1.命令的查找顺序
(1)/bin/ls 或者 ./ls
(2)alias 找到命令执行
(3)bash内置的命令执行
(4)最后才是$PATH顺序查找到的第一个执行
2.如果要修改linux启动界面 可以修改 /etc/issue 如果要修改登录后的提示 可以修改 /etc/motd
3.如果要添加变量,可以在 ~/.bash_profile中添加,/etc/profile虽然也可以,但是是系统文件,最好不要修改. .bash_profile会读取.bashrc文件,所以修改.bashrc也可以达到自定义环境变量的效果. .bashrc是非登录的情况下会默认读取.
读取配置文件的命令 source 或者 .
4.ctrl+C 终止当前命令 ctrl+D 输入结束 ctrl+M 回车 ctrl+S 暂停屏幕输出 ctrl+Q 恢复屏幕输出 ctrl+U 删除整行命令 ctrl+Z 暂停当前命令
5.命令通配符 * 任意字符 ? 单个字符 [] 括号内的任意字符 [-]连续字符 [^] 除了括号中的字符
6. 数据流重定向
如果要把命令执行的结果输出到文件中可以使用标准输入 ,如: ll / > ~/rootfile 会把 ll / 的结果输出到rootfile文件中,如果再次输出这个文件的话会覆盖, 我们可以使用 >> 进行累加,就会保留原本的数据.
如果要输出错误命令用 2> 2>>, 如果要把错误命令不显示,可以用/dev/null,如: ll/noDir 2> /dev/null ,如果要把正确结果和错误结果输出到一个文件中,可以执行 ll /etc /lnoDir > ~/rootfile >2 &1 或者 ll /etc /lnoDir &> ~/rootfile 都可以.
相反,如果要把正确输出流当做错误输出流,可以使用相反的 >1 &2
< << 常用的是用文件输入替换键盘输入,比如:cat > catfile < /etc/crontab 我们就用 crontab代替键盘输入了, cat > catfile << "stop" 的意思是输入遇到stop才会停下来
7.命令执行判断式
[command1] && [command2] 1执行成功后才会执行2
[command1] || [command2] 1执行失败后才会执行2
常用的假设 判断式: [command1] && [command2] || [command3] 1执行成功后才会执行2,否则执行3.和三目运算符差不多.
8.管道命令 |
(1)管道命令仅会处理标准输出,不会处理错误 (2)管道命令必须接受前一个命令的数据成为标准输入继续处理才行.
比如: echo ${PATH} | cut -d ':' -f 3 把 ${PATH} 的信息传送到cut中处理,用:分割后输出第三个数据. cut的局限好像是分隔符只能是单个字符,不能是多个字符,正则也不能用
选取命令:
cut -d '分割字符' -f fields 根据分割字符分割字符串 fields代表下标
cut -c 字符区间 按照字符下标分割
grep '要搜索的字符' 可以使用 last | grep 'root' 找到最后登录的root信息
排序命令:
sort 例子: cat /etc/passwd | sort -t ':' -k 3 把passwd的信息用:分割后用第三个排序
uniq 去重 加上-c 可以统计数量 cat /etc/passwd | sort -t ':' -k 3 | uniq 可以去掉重复的数据
wc 统计cat /etc/passwd | wc 输出的信息分别代表 行 ,字数,字符数
9.双向重定向 tee
如果我们想用管道执行命令的时候在输出屏幕的同时可以保存到文件中,可以用tee
ls /etc | tee ~/tecfile | more
ls /etc 输出的信息在用more执行后可以用 tecfile保存一份.
10.字符转换命令
tr: cat /etc/passwd | tr ':' '/' 可以替换掉 passwd 中的 : 为/
col : cat -A /etc/man_db.conf | col -x | cat -A | more 将tab键转化为空格
join: 处理有相同数据的两个文件 join -t ':' /etc/passwd /etc/shadow | head -n 3 将两个文件第一栏相同的整合为一行,栏位代表被 : 分割后的位置
paste: 不需要比对两个文件的相关性 直接拼接 past /etc/passwd /etc/shadow 将这两个文件拼接到一起
expand: tab 转空格 比如: grep '^MANPATH' /etc/man_db.conf | head -n 3 | expand -t 6 - | cat -A 会把tab键会把 ^I 转化为 6个空格
unexpand相反,会把空格转化为tab键
11.分割文件 split
split可以分割文件,比如: split -b 300k /etc/services services 会把 services文件按照300k划分 出现 servicesa servicesb ... 等文件,要合并的话,可以用 cat services* >> servicesback 恢复到一个文件中
以行数划分,可以加上 -l : ls -al / | split -l 10 - lsroot ,因为是用处理管道接收的命令,所以没有文件,可以用 - 替代文件, - 代表上一个命令的标准输出
12. - 减号
- 代表标准输入与输出,比如: tar -cvf - /home | tar -xvf - -C /tmp/homeback ,这里打包没有新生成文件,而是通过 - 传送到下一个命令,在下一个命令中,用 - 代表上一个命令接收的数据,来解压,这样就不用新建文件,直接通过 - 传输数据.
13.参数代换 xargs
xargs [command] 可以把上一个管道传送的数据当做参数给 command,比如: echo "/tmp" | xargs ls -al , xargs 直接把 /tmp 当做参数给了 ls.
14.正则与文件格式化命令
正则大学就学习过,工作中也多多少少用了一些,现在linux也提到了,全当复习了
sed:处理管道的输入数据.
删除: nl /etc/passwd | sed '2,5d' 会删除2-5行数据
新增: nl /etc/passwd | sed '2a tea ' 会在第2行最后添加 tea,在前方插入可以把 2a换成2i nl /etc/passwd | sed '2i tea ' ,如果要增加多行可以用 \,和执行多行命令一个道理
替换: nl /etc/passwd | sed '2,5c replace text' 会把 2- 5 行删除然后替换成 replace text 这个字符串
打印: nl /etc/passwd | sed -n '2,5p' 会打印 2 - 5 行,注意要加上 -n
查找并替换: 语法: sed 's/[查找的字符串]/[替换的字符串]/g' 比如: ifconfig | grep 'inet' | sed 's/.*inet//g' 可以删除 ip地址前面的inet
删除空白行: cat /etc/man_db.conf | grep 'MAN' | sed 's/#.*$//g' 删除注释后会生成空白行, 在后面加上 | sed '/^$/d' 就可以 ^$在linux的正则中代表空白行
修改原始内容: 加上 -i 比如: sed -i 's/a/s/g' /etc/passwd 会把passwd的a字母都换成s,但是尽量不要修改系统文件.
15.文件的格式化
printf 和c语言中的差不多,根据某种格式输出字符串,java中也有类似的功能System.out.printf();
awk: 把行分成数个字段处理, 比如:我想获取docker启动的容器id,可以用 docker ps -a | grep -v 'CON' | awk '{print $1}' 来打印id, $1代表第一个字符,以此类推.
NF代表字段总数,NR代表处理的第几行,FS代表分割的字符,默认空格键, docker ps -a | grep -v 'CON' | awk '{print NR NF}' 可以看到效果.
awk还支持 > >= < <= == 等运算符,比如: cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 " " $3}'可以列出第三栏小于10以下的数据,BEGIN是让FS=":"第一行生效.
16.比较命令
diff 可以比较文件,以行为单位,可以比较目录 diff [文件1|目录1] [文件2|目录2]
cmp 命令和diff差不多,只不过比较字节,可以比较二进制文件
pr 增加页码