426 views
--- title: 2021-04-13 date: 2021-04-13 15:40 --- # Linux ## File root home boot etc usr bin->usr/bin lib->usr/lib tmp dev ## Command ### cat cat -n 编号 cat -b 空白行不编号 cat -s 压缩连续空行 ### ls ls -a 全部信息 ls -l 长信息 ls -F 附加文件类型 #### 文件类型 \* 可执行的普通文件 / 表示目录 @ 符号链接 | FIFOs = 套接字 - - - - - 普通文件 - 目录文件 p 设备文件 b/c 链接文件 l 管道文件 p ### more more -d 提示 more -f 计算实际显示行数 more -s 合并显示空行 more +/pattern 搜索字串并在此之后开始显示 more -num 一行显示的行数 more +num 从 num 行开始显示 - - - - - space/n 下一屏 b 上一屏 enter 下一行 /pattern 搜索 ### less less -a 最后一页 less -m 百分比 less -M 百分比 行号 总行数 less -N 行号 less -p pattern 搜索 pattern less -s 合并显示空行 ### head head -num ### tail tail -num ### cp cp -a = cp -drp cp -d 保留文件链接 如文件下有软连接需要含此项 cp -f 强制不提醒 cp -i 交互提醒 cp -p 更新修改日期与访问权 cp -r 递归复制文件树 cp -v 可视化操作 cp -l 不复制而只产生硬链接 cp -s 不复制而只产生软连接 ### mv mv -/d d mv -i 交互提醒 mv -f 强制不提醒 ### rm rm -r 递归删除文件夹 rm -f 强制不提醒 rm -i 交互提醒 若有文件以-开头 需要 rm -- -file ### sort sort -m 合并排序 sort -n 以数值大小比较 sort -d 字典序(默认) sort -r 逆序 sort -t char 选定分隔字符 sort -u 保留唯一键值 sort -k 选定排序键值 sort -k1,2 sort -k1.1,2 sort -o 输出到文件 sort -nrk1,1 -udk2,2 -nk3,3 a.txt ### diff diff -b 忽略空格 diff -c 上下文格式显示 diff -C num 显示 num 行上下文 - - - - - <为 file1 删除 \>为 file2 新增 ### touch 将文件修改日期更新为当前时间 常用来新建文件 ### mkdir mkdir -p 可以自动创建子目录 ### rmdir 删除目录 ### tar tar -c 打包 tar -x 解包 tar -v 可视化 tar -f 不交互 tar 是不压缩的,需要加上-z 变成 gz tar -zcvf file.tar.gz file tar -zxvf file.tar.gz ### ln ln 硬链接 ln -s 软连接 ## GCC ### 编译顺序 project main.c -src -incude -lib test.c -E(预编译) test.i -S(生成汇编) test.s -c(生成机器码) test.o -o(生成目标文件,连接) test ### 静态库 gcc test.c -c test.o ar rcs testLib test.o gcc -Llib -testLib ### 动态库 gcc -fPIC test.c -c gcc -shared -o testLib.so test.o gcc -Llib -testLib ## Account ### uid gid 表示用户与组群 文件有owner uid/gid 每个uid有其gid 显示文件时系统需要通过访问/etc/passwd以及/etc/group去将uid/gid转化成实际的用户名与组群名 ### /etc/passwd username : pwd(x见shadow) : uid : gid : desc : home_path : shell_path uid为0是系统管理员即root uid为1-499是系统账号,系统服务使用 uid为500-65535即为可登录用户账号 ### /etc/shadow username : pwd(加盐后的) : 最近更改密码的日期(linux时间戳) : 密码不可被更改的天数(0即为可随意更改) : 密码需要重新变更的天数 : 密码需要重新变更的提示天数 : 密码过期后的宽限天数 : 账号失效日期 : 保留字段 ### /etc/group groupname : pwd(x见gshadow) : gid : supported_accounts ## Manage account ### useradd useradd {username} useradd -c 描述信息 useradd -s shell_path useradd -d home_path useradd -p password ### passwd passwd {username} ### userdel userdel {username} userdel -f 强制 userdel -r 递归删除所有信息 ### su su {username} su -l 会读取/profile的shell环境变量 exit返回 ### sudo sudo {exec}默认是root sudo -u 指定用户执行 ### /etc/sudoers username ALL=(ALL) ALL 在任何地方均可运行sudo ### who ### last ### lastlog # Shell ## Bash ### type type {name} type -t file alias builtin type -p 如果外部命令则显示完整文件名(内部命令则无输出) type -a 根据PATH变量将所有含有name的命令进行罗列,包括别名 ### 变量 echo \${var} var=x(=无空格,变量名开头不能为数字) var="lang is \${LANG}"变量可以递归调用 双引号内的特殊字符可以保持原有的特性 单引号内的特殊字符只会保留空格等,\$将会直接被忽略 如果要将\$var的值或一个命令的运行结果赋予另一个变量需要var1=\$(var2)或var1='exec_ret' export VAR可以使var成为环境变量(环境变量一般使用大写字符) unset var可以取消变量 ### 变量别名 alias cmd="*" unalias cmd ### 历史 history {num} history -c清空 history -a将新增的历史数据写入到一个文件 history -r将文件内的内容读入history history -w将history记录的内容写入文件 history是异步更新,用户在登录态只会存在内存中,断开连接后才会落盘写入文件 !可以匹配历史命令 ### Bash环境信息 运行顺序为:当前目录或指定目录->alias->builtin->$PATH搜寻到的命令 Bash启动是会自动从环境变量文件读入变量,分为全局与私有的 non-login shell与login shell读取的配置文件不一致 login shell读取顺序/etc/profile->\~/.bash_profile->~/.bashrc non-login shell只读取/.bashrc ### 组合按键 | 命令| 效果 | | -------- | ------------ | | Ctrl+c | 终止当前命令 | | Ctrl+d | EOF | | ctrl+m | enter | | ctrl+s | 暂停输出 | | ctrl+q | 恢复输出 | | ctrl+u | 删除整行命令 | | ctrl+z | 暂停挂起命令 | ### 通配符与特殊符号 | 符号 | 意义 | | ----- | ---------------------------------------------------------- | | * | 代表任意长度的任意字符 | | ? | 代表一个任意字符 | | [x] | 代表一个括号内的字符(必须有,非任意) | | [a-z] | 代表有一个按括号内编码顺序的范围的一个字符(必须有,非任意) | | [^x] | 代表一个非括号内的字符(必须有,非任意) | ### 数据流的重定向 数据重定向可以将stdin,stdout,stderr传送到不同的设备或位置 exec 1>stdin 2>stderr(>是覆盖,>>是追加) 2>/dev/null可以清除错误信息 2>&1可以将正确与错误信息写入同一个文件 ### 命令运行的判断依据 cmd1;cmd2连续命令下达,但不考虑命令连续性即命令与命令之间可能乱序 $?获取前一个命令的返回值 $?=0时即命令运行正确 cmd1 && cmd2 cmd2在cmd1运行完毕且正确时才运行 cmd1 || cmd2 cmd2在cmd1运行完毕但错误时才运行 ## Tunnel 管道命令界定符号| |仅能处理前一个命令的正确输出结果,无法直接输出错误结果 ### 颉取命令 颉取命令通常是以行为单位 cut -d 分隔符 -f 第几段 grep -v反向选择 grep -n输出行号 grep -i忽略大小写 常用如 cmd | grep -v pattren1 | grep pattern2 ### 排序命令 sort -t 分隔符 -k 第几个 uniq -c 去重计数 wc -l 行 wc -w 单词 wc -c 字符 ### 双向重定向命令 tee -a 追加 重定向一个副本至file中 ### 字符转换命令 tr -d 删除一个字符串 tr -s 取代重复字符 tr '[a-z]''[A-Z]' 实现大小写转换 tr -d '*'删除内容 col 过滤控制字符 col -x 将tab换成空格 col -b 过滤所有控制符 join -t 指定字段分隔符 join num 指定分析字段 join -1/2 指定分析文件 最好事先sort paste -d 指定分隔符,默认是tab paste - 意为来自管道 expand -t num 指定一个tab替代为多少个空格 ### 分割命令 split file PREFIX将文件按大小或行数进行分割 split -b 指定分割文件的最大大小 split -l 按行数分割 PREFIX为分割后的文件名的前导符 ### 参数替换命令 xargs cmd xargs -p 提示 xargs -n 一组命令的量 xargs -e'*' 停止命令的标识 能够将一个不支持管道的命令,接受来自其他命令的stdout ### -号 stdin与stdout可以通过-来替代 ## 正则表达式 ### 特殊字符 egrep "" filename | Column 1 | Column 2 | | -------- | -------------------------------------------- | | ^ | ^word word在行首 | | $ | word$ word在行尾 | | . | 一定有一个任意字符 | | \ | 将特殊符号转义为一般符号 | | \* | 重复前一个字符,0到无穷多个 .*即为任意字符串 | | [^] | 舍去或欲求的字符集合 | | [n1-n2] | 欲求的字符范围 | | {n,m} | 连续n到m个的前一个字符 | | + | 一个或一个以上 | | ? | 0个或1个 | | \| | 或 | | () | 组群 | ## 文件格式化与处理 sed -n 安静模式 sed -i 直接修改文件内容 sed -f 写入文件 动作:[n1],[n2]funnction n1,n2为动作施加行 function:a之下追加,c取代,d删除,i之上插入,p打印选择的数据,s替换 如sed '2,5d' sed s/'pt1'/'pt2'/g 全局替换 awk -F 指定分隔符 awk -F ' ' '$3<10{print $1 "\t" $3}' diff -Naur oldfile newfile > patch patch -p0 < patch(oldfile->newfile) patch -R -p0 <patch(oldfile->newfile->oldfile) ## Shell编程 ### 特征 纯文本,从上往下,从左到右 \可以延伸至下一行 /#为注释 /#!/bin/bash $((运算内容)) ### test test -e dictory ### $特例 $# 参数个数 $@ 输入参数 $n 第n个参数 ### 循环 ```shell= if [ * ]; then do sth elif [ * ]; then do sth else do sth fi while [ * ] do do sth done until [ * ] do do sth done for i in $(seq 1 100) do do sth done for (( i=0; i<=100; i=i+1 )) do do sth done ```