目录
字符转换命令:tr、col、join、paste、expand
Bash Shell的操作环境
路径与命令查找顺序
在我们了解了命令的别名后,就可以通过别名大大地简化了命令的使用;但是在系统中如果说有的命令和别名正好重复,那么系统该以什么顺序去执行呢?
例如:alias echo='echo -n'
注:echo的n参数表示在执行完命令之后不换行
查看命令的执行顺序:type -a echo
注:如果说系统中的命令和别名重复,可以通过type命令来查看该命令的执行顺序
bash的登录与欢迎信息
修改登录前的提示信息:vim /etc/issue
修改登录后的信息:vim /etc/motd
bash的环境配置文件
login-shell:登录时候所使用的shell,取得shell(如bash)时需要完整的登录流程,就称为login shell。举例来说,有tty1-tty6登录,输入用户的账户和密码后,取得的shell就称为“login shell”
no-login shell:无需验证登录模式,取得shell不需要账户登录的流程。比如说,在X window登录linux后,在桌面右击获取的命令行窗口,此时不需要用账户名和密码进行登录,那这个bash的环境就称为non-login shell。在比如,在bash中再次执行bash命令,获取到的子bash进程,也没有登录动作,这个子bash进程同样是non-login shell
当我们在输入用户名、密码登录系统的时候,系统会读取一些配置文件;
vim /etc/profile:这个文件设置了系统所有的全局变量,如PATH变量、HOME变量、PS1、PS2等;
vim /etc/inputrc:这个文件设置了系统一些常用的快捷键
ls /etc/profile.d/:这个目录下设置了系统中一些常见的别名
注:当用户登录到系统之后profile、inputrc、profile.d等配置文件设置了全局的环境,对所有的用户都生效;而不同的用户中.bash_profile配置文件设置了只对当前用户生效,一般只改变这个文件
终端机的环境设置:stty、set
我们在系统的使用过程中,经常会用到很多的快捷键;比如使用Ctrl+C来撤销命令的执行,使用Ctrl+Z来把一个进程放在后台,在输出完成之后使用Ctrl+D来退出输出等等;这些快捷键都是在stty中进行设置的;
查看系统中的快捷键信息:stty -a
在我们使用变量的过程中,可以通过set命令来更改系统的一些环境和规则;
例如:set –u:开启变量检测功能;
注:开启变量检测功能是在使用变量之前先检测变量是否定义
set –x:开启系统跟踪功能;
注:开启系统跟踪功能之后所做的每一步操作,系统都会进行跟踪; 关闭系统跟踪功能:+x;常用于脚本排错
通配符与特殊符号
在linux中,有通配符及正则表达式,那么什么是通配符和正则表达式。它是由shell解析,并且一般用于匹配文件名,实际上就是shell解释器去解析的特殊符号,linux系统通配符有几下几种:
文件名通配符
* 代表任意长度任意字符
? 代表任意单个字符
[] 代表指定范围的任意单个字符
[^] 代表指定范围外的任意单个字符
! 代表否定
例:ls [a-z][0-9]?[!0-9]*.mp3
数据流重定向
什么是数据流重定向
首先说一下什么是数据流重定向,所谓数据流重定向简单来说就是一个过程,这个过程捕捉一个文件,或者命令,程序,脚本,甚至脚本中的代码块(code block)的输出,然后把捕捉到的输出,作为输入发送给另外一个文件,命令,程序,或者脚本;简单地说,当我们通过键盘输入一条命令,按回车执行的时候系统都会返回给我们一个输出,默认情况下是直接将结果输出在屏幕上面;而有时候我们并不想系统将结果通过屏幕输出给我们,而是将输出的结果输出到文件中去;改变标准输入、标准输出的方向就是重定向。
在Linux中每启动一个进程,系统就会为这个进程分配一个编号,并且在这个目录下创建一个文件夹,文件夹的名称就是这个进程的编号,进程所操纵的文件就在fd文件夹下;里面的编号称为文件描述符,通常表示标准输入、标准输出、和标准错误输出
标准输出、标准错误输出重定向:
例:/proc/1788/fd/0123
例如:cal 1>xx
注:cal 1> xx表示将日历信息写入到一个xx的文件中去,并不显示在屏幕上;数字1表示文件描述符;如果xx这个文件之前存在,里面的内容将会被清空
数据流追加:cal 1>> xx
注:cal >> yy表示将输出的结果不断地追加到文件中去,并不会被清空
错误信息重定向:xxxxxxxxx 2 > aa
注:覆盖、追加只能重定向正确的结果;如果需要重定向错误的信息则必须要加上文件描述符2
同时重定向正确输出、错误输出:cal &>> aa
如果在一个输出中,同时具有正确的输出和错误输出;可以将其结果同时重定向到两个文件中:
通过强制的方法,打破正确、错误信息的重定向:
总结:覆盖、追加只能重定向正确的结果
要想重定向成功,必须要指定文件描述符(即0、1、2);如果是标准正确输出,1可以省略;
如果输出的内容中含有标准正确的输出和错误输出,可以通过在后面追加从而将错误信息和正确信息分开放入两个文件中也可以通 过输入&符号,将正确的和错误的输出到同一个文件;或者通过强制的方法,打破正确、错误信息的重定向
标准输入重定向:
例:tr 'a-z' 'A-Z' <xx
注:通过tr字符转换命令,将xx文件中的小写转换成大写;<表示标准输入
Here Document:<<表示指定输入结束符
总结:Here文档可以自己输入重定向的内容,直到输入指定的结尾之后结束;结尾可以是任意的字符;
Here文档可以支持变量的功能
命令执行的判断依据:&&、||
在Linux中如果想要在一条命令行中同时执行多条命令,可以使用分号隔开;多条命令的执行结果互不影响,系统每执行一次命令都会将上一次执行的结果存放在一个容器中;如果执行结果正确则为0,如果执行结果错误则是一个不为零的数;
查看容器中的执行结果:echo $?
命令1 && 命令2:两者都为真,结果才为真(且的关系)
命令1 || 命令2:一个为真,结果就为真(或的关系)
管道命令(pipe)
管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入;
语法:命令1 | 命令2 | 命令3 …
意义:将命令1执行的结果作为参数传递给命令2,以此类推
例:ifconfig eth0 | grep 'inet addr'
选取命令:cut、grep
cut:选取一段字符
例:cut –d: -f1 /etc/passwd
注:d参数表示分割符,f表示需要查看的第几部分;
例:last | cut –d’ ’ –f1
注:last命令表示查看上次用户的登录信息
grep:过滤
grep 关键字 file:在file文件中查找含有关键字的行
grep的其他参数:
例:grep –inv tom passwd --color
注: -i参数过滤忽略大小写;-n加上行号;-v排除含有关键字的行--color颜色显示高亮;
例:grep -A3 tom passwd -n --color
注: -A3表示过滤关键字所在行及其下面三行
例:grep -B3 tom passwd -n --color
注: -B3表示过滤关键字所在行及其上面三行
排序命令:sort、wc、uniq
sort
例:cut –d: –f3 /etc/passwd | sort –n 以数字的形式排序
例:cut –d: –f3 passwd | sort -n -r 以数字的形式反向排序
例:sort -t : -k2 -n passwd
注: -t表示指明分隔符;-k表示第几部分排序;-n表示以数字形式排序
例:last | cut -d’ ’ -f1 | sort –u
注: -u表示删除重复行,等同于uniq;last命令显示系统用户的登录信息
例:last | cut -d’ ’ -f1 | sort | uniq –c
注:-c表示统计重复的次数
wc
wc是word count的缩写,该命令用于对文档的字符统计
例:wc xx
注:wc xx表示查看xx的文件信息,-l 统计行数, -w 统计单词数,-c 统计字符数
双向重定向:tee
当我们在使用管道的时候,想要查看上一条命令的执行结果或者想要保存上一条命令的执行结果,可以通过tee命令实现双向重定向;一方面将执行结果重定向到文件中,另一方面将执行结果传给管道去执行下一步命令
例:ifconfig eth0 | tee xx | grep 'inet addr'
字符转换命令:tr、col、join、paste、expand
tr:该命令用于转换字符的大小写
例:tr 'a-z' 'A-Z' < xx
例:tr ‘a-z’ ‘A-Z’ < hosts > xxx
mv xxx hosts
注:上面的命令是 将hosts文件中的小写转换成大写,数据再重定向到xxx文件中;然后再将xxx文件覆盖到hosts中
tr ‘a-z’ ‘A-Z’ < hosts > hosts (这种做法是错误的,会损坏文件的内容)
例:cat passwd | tr -d ':'
注:将passwd文件中的冒号删除;-d表示删除
col 和 expand
在Linux中,空白行存在Tab键和空格键两种;而col -x 和 expand命令用于将Tab键转换成空格键;
例:cat xx | col -x | cat -A
cat xx | expand cat -A
注:col -x等同于expand; -A表示查看文件的空格或Tab
join 和 paste
例:paste xx yy
例:join -t ':' aa cc
注:paste和join两者都能够将文件粘贴在一起,只不过paste是直接将文件粘贴在一起;而join则是匹配相同的部分粘贴,并且相同的部分会被省略,-t参数表示分隔符
切割命令:split
split命令用于将一个大文件切割成一个个小的文件
例:split -b 10k /etc/services xxx 将文件按块来切割,b参数表示以文件块分割
例:split -l 100 /etc/services xxx 将文件按100行分割,l参数表示以行分割
例:cat xxx* > service 将分割的文件重新拼接
注:diff命令用于比较文件,没有输出结果表示两份文件相同
参数代换:xargs
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。在linux中有一些命令是不支持管道技术的,所以可以使用xargs来使那些不支持管道技术的命令使用管道;xargs经常和find配合使用
例:find -name 'file*' | ls -l
使用xargs之后:
关于减号 - 的用途
tar cvf - /home | tar xvf - 不指明打包的文件名和解档的文件名,直接使用-代替
原创文章,转载请注明出处