命令
显示当前目录下文件
ls: 显示所有文件名称
ls -a: 同上,包含隐藏
ll:显示所有文件附带详细信息,如时间,大小,权限等
ll -a:同上,包括隐藏
set 设置Shell执行方式
set 指令可根据不同的需求来设置当前所使用 shell 的执行方式.
比较常用 set -x 和 set -e,可用于调试,且可同时使用.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
set -a 标示已修改的变量,以供输出至环境变量。 -b 使被中止的后台程序立刻回报执行状态。 -C 重定向所产生的文件无法覆盖已存在的文件。 -d 预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用参数可取消。 -e 若指令传回值不等于,则立即退出。可用于调试。 -f 取消使用通配符。 -h 自动记录函数的所在位置。 -H 可利用加指令编号的方式来执行中记录的指令。 -k 指令所给的参数都会被视为此指令的环境变量。 -l 记录循环的变量名称。 -m 使用监视模式。 -n 只读取指令,而不实际执行。 -p 启动优先顺序模式。 -P 启动参数后,执行指令时,会以实际的文件或目录来取代符号连接。 -t 执行完随后的指令,即退出。 -u 当执行时使用到未定义过的变量,则显示错误信息。 -v 显示所读取的输入值。 -x 执行指令后,会先显示该指令及所下的参数。可用于调试。 +<参数> 取消某个set曾启动的参数。 -o 特殊属性有很多,大部分与上面的可选参数功能相同,这里就不列了
|
grep 筛选
grep用于查找文件里符合条件的字符串,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
1 2
| grep [-option] [范本样式] [文件或目录...] - option : 具体包括哪些option , 请百度.
|
例子:
1
| grep '2019-10-24 00:01:11' *.log
|
awk 行处理器
awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息.处理过程: 依次对每一行进行处理,然后输出.
1 2 3 4 5 6 7
| awk [-F|-f|-v] 'BEGIN{} //{command1; command2} END{}' file [-F|-f|-v]: F指定分隔符,-f调用脚本,-v定义变量 var=value '': 引用代码块 BEGIN: 初始化代码块,在对每一行处理之前,初始化代码,主要引用全局变量和设置FS分隔符 {}: 命令代码块,包含一条或多条命令 END: 结尾代码块,在对每一行进行处理之后再执行的代码块,主要进行最终计算或输出结尾摘要信息
|
特殊要点:
- $0: 当前行
- $1: 每行第一个字段
- NF: 字段数量变量
- NR: 每行的记录号,多文件记录递增
- FNR: 与NR类似,不过多文件记录不递增,每个文件都从1开始
- \t: 制表符
- \n: 换行符
- FS: BEGIN时定义分隔符
- RS: 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
- ~: 匹配,与==相比不是精确比较
- !~: 不匹配,不精确比较
- ==: 等于,必须全部相等,精确比较
- !=: 不等于,精确比较
- &&: 逻辑与
- ||: 逻辑或
- +: 匹配时表示1个或1个以上
- /[0-9][0-9]+/: 两个或两个以上数字
- /[0-9][0-9]*/: 一个或一个以上数字
- FILENAME: 文件名
- OFS: 输出字段分隔符, 默认也是空格,可以改为制表符等
- ORS: 输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
- -F’[:#/]’: 定义三个分隔符
xargs 参数过滤
xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如:
1 2
| find /sbin -perm +700 |ls -l find /sbin -perm +700 |xargs ls -l
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| somecommand |xargs -item command -a file 从文件中读入作为 stdin -e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。 -p 当每次执行一个argument的时候询问一次用户。 -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。 -t 表示先打印命令,然后再执行。 -i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。 -r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。 -s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。 -L num 从标准输入一次读取 num 行送给 command 命令。 -l 同 -L。 -d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。 -x exit的意思,主要是配合-s使用。。 -P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。
|
实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| # cat test.txt a b c d e f g h i j k l m n o p q r s t u v w x y z
# cat test.txt | xargs a b c d e f g h i j k l m n o p q r s t u v w x y z
# cat test.txt | xargs -n3 a b c d e f g h i j k l m n o p q r s t u v w x y z
ls *.jpg | xargs -n1 -I {} cp {} /data/images
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
|
locate 查询
locate = “find -name”的另一种写法但比后者更多,原因在于它不搜索具体目录,而是搜索一个数据库,这个数据库包括本地所有信息.Linux系统自动创建这个数据库,并且每天自动更新一次
重定向和管道
重定向
系统设定的输入输出:
- 默认输入设备:标准输入(键盘),STDIN,0
- 默认输出设备:标准输出(显示器),STDOUT,1
- 标准错误输出(显示器):STDERR,2
linux中的I/O重定向,其中一个’>’或’<’表示为覆盖,两个则为追加:
- 标准输入:代码为0,使用<或<<
- 标准输出:代码为1,使用>或>>
- 标准错误输出:代码为2,使用2>或2>>
1 2 3
| /dev/null,数据黑洞,将内容输出定向到该设备下无任何返回内容,即置空
&>(或者2>&1): 重定向标准输出或错误到同一个文件
|
管道
管道是将前一个命令的输出作为后一个命令的输入,命令1|命令2|命令3|...
1 2 3 4
| //例如 ps aux | grep java //ps aux :按一定格式输出所有进程状态 //grep java {ps aux的输出内容} : 筛选包含java字符的行并显示
|
vim详解
vim编辑时在当前目录会产生一个隐藏文件”.文件名称.文件扩展名.swp”,如果不正常退出需要以此进行还原或者删除,否则无法继续正常编辑文件
DOS与unix转换
虚拟内存
查看内存
1 2 3 4
| $ free -h total used free shared buff/cache available Mem: 1.8G 1.3G 100M 956K 415M 366M Swap: 0B 0B 0B
|
根据buff/cache设置虚拟内存大小
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| //创建文件夹 $ mkdir /virtual/swap
//从硬盘空间分配415 * 1 = 415M 挂在/virtual/swap/swapadd //注意如果此时分配总空间大于buff/cache大小,会出现错误: // dd: memory exhausted by input buffer of size 1073741824 bytes (1.0 GiB) $ dd if=/dev/zero of=/virtual/swap/swapadd bs=415M count=1
//初始化 $ mkswap /virtual/swap/swapadd
//启用 $ swapon /virtual/swap/swapadd
//查看 $ free -h
//自启虚拟内存的启用 //注意如果/etc/fstab文件存在/swap none swap sw 0 0 需要注释掉 echo '/virtual/swap/swapadd swap swap defaults 0 0' >> /etc/fstab
//关闭虚拟内存 $ swapoff -v /virtual/swap/swapadd
//硬盘空间不够,还可以还原,先关闭虚拟内存,将其移动到磁盘,在启用虚拟内存 //此法正确性待验证,也有说法关闭后,删除该文件夹即可 $ swapoff -v /virtual/swap/swapadd $ mv /virtual/swap/swapadd /mnt/swap $ swapon /virtual/swap/swapadd
|