Shell 使用总结

Posted on 2017-05-28 22:49  线代  阅读(170)  评论(0)    收藏  举报
  1. 格式化符号:%s, %c, %d, %f.%-5s指明了一个为左对齐且宽度为5的字符串替换(-表示左对齐),如果没有指明-则表示右对齐,宽度指定了保留给某个变量的字符数.对于浮点数,可以使用其他参数对小数部分进行舍入,例如:%-4.2f,其中.2指定保留2位小数.
  2. 比较:
    1. 算数比较:
      1. -gt: 大于 例如: if [ 1 -get 0 ]; then … if
      2. -lt: 小于
      3. -ge: 大于或等于
      4. -le: 小于或等于
    2. 字符串比较:
      1. = 或 ==: 相等, 例如: if [ $str2 == $str2 ]
      2. !=: 不等于
      3. >; 大于
      4. <: 小于
      5. -z: 是否空字符串, 例如: if [ -z $str1 ]
      6. -n: 是否非空字符串, 例如: if [ -n $str1 ]
    3. 文件相关比较:
      1. -f: 是否为文件, 例如: if [ -f $var ]
      2. -x: 是否是可执行文件
      3. -d: 是否是目录
      4. -e: 文件是否存在
      5. -c: 是否是字符设备文件
      6. -b: 是否是块设备文件
      7. -w: 是否是可写文件
      8. -r: 是否是可读文件
      9. -L: 是否是符号连接
  3. 打印彩色输出:\e[颜色码m,\e[0m将颜色重置.其中常用的颜色码有:黑色(30),红色(31),绿色(32),黄色(33),蓝色(34),洋红(35),青色(36),白色(37).常用的彩色背景色有:黑色(40), 红色(41),绿色(42),黄色(43),蓝色(44),洋红(45),青色(46),白色(47)
  4. 文件描述符及重定向:
    1. 标准输入(stdin)用0表示,标准输出(stdout)用1表示,标准错误(stderr)用2表示.
    2. 将文本输出到文件用(>),例如: echo "hello" > temp.txt
    3. 将文本追加到文件用(>>),例如: echo "hello" >> temp.txt
    4. 重定向符号>和>>的区别是>会清除之前的内容,而>>是追加到文件尾部.
    5. 将标准输出和标准错误输出到文件,例如: cmd 2 > stderr.txt 1 > stdout.txt.如果想把标准错误和标准输出重定向到统一文件,例如: cmd 2 > &1 output.txt,或者 cmd &> output.txt.
    6. 如果标准输出和标准错误不想输出到文件,可以将重定向到一个特殊文件/dev/null,黑洞文件.
    7. 标准输入用<表示, 例如: cmd < file.
  5. 日期date
    1. 获取日期:date 2017年 05月 24日 星期三 16:59:41 CST
    2. 获取时间戳(秒):date +%s 1495616478
    3. 设置日期和时间: date -s "格式化的日期字符串" date -s "2017-05-28 23:00:00"
  6. 查找 find
    1. 根据文件名或正则表达式搜索find dir -name "*.txt" 忽略大小写 find dir -iname "*.txt"
    2. 根据文件类型搜索选项 -type

文件类型

类型参数

普通文件

f

符号链接

l

目录

d

字符设备

c

块设备

b

套接字

s

FIFO

p

  1. 根据文件时间搜索(-表示小于,+表示大于):
    1. 访问时间:-atime(单位天), -amin(单位分钟) 用户最近一次访问时间
    2. 修改时间:-mtime(单位天), -mmin(单位分钟) 文件内容最后一次修改时间
    3. 变化时间:-ctime(单位天), -cmin(单位分钟) 文件元数据(权限,所有权等)最后一次改变时间
  2. 根据文件大小搜索-size:

文件单位

大小

b

块(512字节)

c

字节

w

字(2字节)

k

1024字节

M

1024K字节

G

1024M字节

  1. 删除匹配文件:-delete
  2. 基于文件权限和所有权匹配:-perm 权限 例如: -prem 644
  3. 执行命令动作:-exec
    1. 结合grep,可以搜索文件内容的关键字并高亮显示,例如: find path -iname "*.cpp" -exec grep –color -wn -H $1 \{\} \;
  1. 文件分割:split
    1. 按大小分割: split -b blockSize file 其中单位有K(kb), M(MB), G(GB), c(byte), w(word)
    2. 按行数分割: split -l lineNumber file
    3. 使用数字为后缀选项:-d, 默认是字母为后缀
    4. 指定后缀长度选项:-a length
  2. 文件
    1. 任意文件大小:dd 例如: dd if=/dev/zero of=zero.data bs=1M count=1, 默认if为stdin, of为stdout, 其大小为count * bs.
    2. 文件权限,所有权和粘滞位

      1. 第一个字母对应的关系:

符号

含义

-

普通文件

d

目录

c

字符设备

b

块设备

l

符号链接

s

套接字

          

  1. 剩余的部分可以划分成3个部分,每组3个字符组成:

    第一组3个字符对应的是用户权限

    第二组3个字符对应的是用户组权限

    第三组3个字符对应的其他用户权限

  2. 每组3个字符的含义:

    第一个字符是读权限

    第二个字符是写权限

    第三个字符是执行权限

    其中除了其他用户外其余2个用户(组)还有一个setuid(S)特殊权限,出现在执行权限位,setuid权限允许用户以其拥有者的权限来执行可执行文件,即使这个可执行文件是由其他用户允许的.

  3. 目录有一个特殊的权限,粘滞位.如果目录设置了粘滞位,只有创建该目录的用户才能删除目录中的文件,即使用户组和其他用户也有写的权限,也无能为力.粘滞位出现在其他用户权限的执行权限位(x)位置,使用t或T表示,如果没有设置执行权限但设置了粘滞位.就使用t;如果同时设置了执行权限和粘滞位,就使用T.一个典型的例子就是/tmp目录

  4. 改变文件权限:chmod 例如: chmod u=rwx g=rw o=r file; chmod u+x file; chmod u-x file; chmod a+x file, 选项-R为递归设置
  • u: 指定用户权限
  • g: 指定用户组权限
  • o: 指定其他用户权限
  • a: 全部
  • +: 添加权限
  • -: 删除权限
  1. 权限序列:
  • r-- = 4
  • -w- = 2
  • --x = 1
  • rw- = 4 + 2 = 6
  • r-x = 4 + 1 = 5
  • -w-x = 2 + 1 = 3

例如: rwx rw- r-- 等于764即 chmod 764 file

  1. 改变所有权:chown 例如: chmod -R user.group file, 其他-R选项为递归设置
  2. 设置文件为不可修改文件:chattr, 例如:chattr +i file 设置文件file为不可修改, chattr -i file 设置文件file为可修改.