[笔记] Shell常用命令

227 阅读9分钟

1. 简介

  • Shell种类

    • Bourne Shell(sh)
    • C Shell(csh)
    • Korn Shell(ksh)
    • Bourne-Again Shell(bash)
  • 与登录Shell相关文件

    • /etc/profile:系统级初始化文件,由登录Shell调用执行
    • /etc/bash.bashrc/etc/bashrc:每个交互式Shell的系统级启动脚本
    • /etc/bash.logout:系统级登录Shell清理脚本,登陆Shell退出时执行
    • $HOME/.bash_profile$HOME/.bash_login$HOME/.profile:用户个人初始化脚本,由登录Shell执行。按顺序查找,只会执行第一个存在的
    • $HOME/.bashrc:用户每个交互式Shell的启动脚本,修改完需要重新登录才生效
    • $HOME/.bash_logout:用户登录Shell清理脚本
    • $HOME/.bash_inputrc:用户个人的由read line使用的启动脚本
  • 查看有效登录Shell路径:cat /etc/shells

  • Shell变量类型:系统变量、用户自定义变量

  • 常用系统变量

    • BASH_VERSION:保存Bash实例的版本
    • DISPLAY:设置X display名字
    • EDITOR:设置默认的文本编辑器
    • HISTFILE:保存命令历史的文件名
    • HISTFILESIZE:命令历史文件的最大行数
    • HISTSIZE:命令历史的记录数
    • HOME:当前用户目录
    • HOSTNAME:计算机的主机名
    • IFS:定义Shell内部字段分隔符
    • PATH:搜索命令的路径
    • PS1:提示符设定
    • PWD:当前工作目录
    • SHELL:登录Shell路径
    • TERM:登录终端的类型
    • TMOUT:用于设置内建命令read的默认超时时间
  • 查看系统变量:envprintenv

  • 定义变量:varName=varValue,注意等号两边不能有空格,默认肤质是字符串复制

  • 定义数值变量:let var=2+1

  • 变量间赋值:b=$a

  • 命令执行结果赋值:v='pwd'v=$(pwd)

  • 读入内容赋值:echo -n "Enter var:"; read var-n表示打印不换行,read将读入内容赋值给var变量

  • 变量命名规则:必须以字母或下划线开头,后面跟字母、数字或下划线;变量名是大小写敏感的

  • 引用变量最好使用双引号括起来,如"$variable",这样可以避免变量值中的特殊字符被解析成其他含义

    # 变量值被分成了3个参数传给了for循环
    $ LIST="one two three"
    $ for var in $LIST
    > do
    >   echo "$var"
    > done
    one
    two
    three
    ​
    # 变量值被当成一个整体
    $ LIST="one two three"
    $ for var in "$LIST"
    > do
    >   echo "$var"
    > done
    one two three
    
  • 检查变量是否存在

    • ${varNmae? Error: The variable is not defined}:如果变量varNme已定义且不为空,相当于$varName;如果变量varNme值是空,则此语句的值也是空;如果varNme未定义,返回一个错误,并显示问号后定义的错误信息Error: The variable is not defined
    • ${varNmae:? Error: The variable is not defined}:与上一条类似,区别为如果变量值为空,也返回一个错误
    • 示例:echo ${JAVA_HOME? Error: The variable is not defined}
  • Shell扩展的方式:大括号扩展、波浪号扩展、参数和变量扩展、命令扩展、算术扩展、进程替换、单词拆分、文件名扩展

    • 大括号扩展:生成任意字符串的机制,特殊字符{,可以用反斜杠转义

      # 指定前后缀
      $ echo a{b,c,d}e
      abe ace ade
      ​
      # 指定字母顺序
      $ echo {a..z}
      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
      ​
      # 指定字母倒序
      $ echo {g..a}
      g f e d c b a
      ​
      # 指定数字顺序
      $ echo {0..10}
      0 1 2 3 4 5 6 7 8 9 10
      ​
      # 指定数字倒序
      $ echo {5..-3}
      5 4 3 2 1 0 -1 -2 -3
      ​
      # 指定字母数字混合
      $ echo {1..3}{a..c}
      1a 1b 1c 2a 2b 2c 3a 3b 3c
      ​
      # 嵌套
      $ echo a{{b,c,d}a,{e,f,g}b,h}i
      abai acai adai aebi afbi agbi ahi
      $ echo {a,b{1..3},c}
      a b1 b2 b3 c
      ​
      # 创建多个目录
      $ mkdir ~/{dir1,dir2,dir3}# 指定增量
      $ echo {1..10..2}
      1 3 5 7 9
      $ echo {10..1..-2}
      10 8 6 4 2
      $ echo {a..h..3}
      a d g
      $ echo {h..a..-3}
      h e b
      ​
      # 补0
      $ echo {0001..10..3}
      0001 0004 0007 0010
      
    • 波浪号扩展:用于代替自己或他人的主目录

      # 进入当前用户主目录
      $ cd ~
      # 进入fred用户主目录
      $ cd ~fred# 等价于echo $PWD
      $ echo ~+
      # 等价于echo $OLDPWD
      $ echo ~-
      
    • 命令替换:用命令的输出替换命令本身,格式为:$(COMMAND)'COMMAND'

    • 文件名扩展

      # etc目录所有配置文件
      $ ls /etc/*.conf
      # etc目录以a或b开头配置文件
      $ ls /etc/[ab]*.conf
      # 所有jpg文件,问好匹配单个字符
      $ ls image?.jpg
      
  • 修改命令提示符:export PS1="[\t] \u@\h\n$ "

    • \t:24小时制的当前时间
    • \u:当前用户名
    • \h:主机名
    • \n:新的一行
    • $:如果当前用户UID是0,显示#,否则显示$

2. printf

  • 功能:打印文本
  • 示例:printf "%s\n" $var
  • %d:带符号十进制格式
  • %o:无符号八进制格式
  • %u:无符号十进制格式
  • %x:无符号十六进制小写格式
  • %X:无符号十六进制大写格式
  • %f:浮点数格式
  • %e:双精度浮点数格式
  • %E:与%e相同,E大写
  • %c:字符格式
  • %s:字符串格式
  • %%:表示一个%

3. echo

  • 功能:打印文本
  • 示例1:echo "The. Number is $var"
  • 示例2:echo "The log file is ${LOGDIR}messages",避免LOGDIR变量产生歧义
  • -n:打印不换行
  • -e:激活转义字符功能

4. export

  • 功能:将变量或函数输出到后续命令执行环境
  • 示例1:export JAVA_HOME
  • 示例2:export JAVA_HOME=/usr/local/jdk
  • -f:export一个函数
  • -n:将export属性从指定变量函数上移除
  • -p:打印当前Shell所有输出变量

5. unset

  • 功能:删除变量或函数
  • 示例:unset JAVA_HOME
  • -f:删除一个函数
  • -v:删除一个变量
  • 注意:不能删除只读的变量,只读变量定义:readonly JAVA_HOME=/usr/local/jdk

6. history

  • 功能:显示历史命令列表
  • 历史命令默认保存文件:~/.bash_history
  • Ctrl+r:搜索历史命令
  • !!:重复执行上一条命令
  • !up:执行上一条以指定字符开头的命令
  • !6:执行historty列表的第6条命令

7. alias

  • 功能:创建别名
  • 示例:alias ll='ls -l'
  • 当前Shell退出后失效,常用别名可以放到~/.bashrc文件
  • 不跟任何参数时,列出所有别名
  • alias dus:查看特定别名
  • unalias dus:删除别名
  • unalias -a:删除所有别名
  • alias Vim='vim 'ls -t | head -1'':打开当前目录最后被修改的文件
  • alias finbig='find . -type f -exec ls -s {} ; | sort -n -r | head -5':列出当前目录最大的5个文件
  • alias ls='ls -aF --color=always':列出所有文件并附加颜色标识
  • alias hcl='history -c; clear':清除全部命令历史和屏幕
  • alias dus='df -h':查看磁盘空间使用情况
  • alias ..='cd ..':返回上一层
  • alias ...='cd ../..':返回上上一层

8. set

  • 功能:设置Bash选项
  • -o:开启选项,只有使用set -o时列出所有选项状态
  • +o:关闭选项

9. shopt

  • 功能:设置Bash选项
  • 不跟任何参数时,列出所有选项状态
  • -s:开启选项
  • -u:关闭选项

10. ls

  • 功能:列出文件和目录
  • 不跟任何参数时,列出当前目录所有文件和目录
  • -1:数字1,表示每行显示一条记录
  • -l:以长列表格式显示文件和目录,包含文件类型、大小、修改日期等信息
    • 文件类型,第一个字符表示
      • -:普通文件
      • d:目录
      • s:套接字文件
      • l:链接文件
    • 文件权限,用9个字符表示,分别为所有者、用户组、其他用户权限
    • 链接数
    • 所有者
    • 用户组
    • 文件大小:单位字节
    • 最后修改时间
    • 文件名
  • -lh:将文件大小显示为符合人类阅读习惯格式
  • -F:使用不同特殊字符归类不同的文件类型
    • 无特殊字符表示普通文件
    • /:表示目录
    • @:表示链接文件
    • *:表示可执行文件
  • -ld:以长格式列出某个目录信息
  • -R:递归列出子目录内容
  • -ltr:以长格式列出文件与目录信息并按修改时间倒序
  • -ls:以长格式列出文件与目录信息并按文件大小排序
  • -a:显示隐藏文件与目录
  • -A:显示隐藏文件与目录,不含...目录
  • -i:显示inode编号
  • -n:类似于-l,但使用uid和gid代替所有者和用户组

11. cat

  • 功能:查看文件内容,支持多个文件路径
  • 示例:cat /etc/redhat-release /etc/issue
  • 不跟任何参数时,接收标准输入内容并在标准输出显示
  • -n:显示行号
  • -b:显示行号,只标识非空白的行号
  • -e:在每行结尾显示$字符
  • cat > test:等待用户输入,输入内容写入test文件,输入完成按Ctrl+D退出

12. tac

  • 功能:类似cat,以倒序显示文件内容

13. more

  • 功能:分屏显示文件
  • 示例:more /etc/inittab
  • -5:指定一次显示的行数
  • cat README | more:接收从cat输出的内容

14. less

  • 功能:分屏显示文件,支持前后翻页,可同时打开多个文件
  • 示例:less /etc/inittab
  • /:向前搜索关键字,n下一个匹配,N上一个匹配
  • ?:往回搜索关键字,n下一个匹配,N上一个匹配
  • Ctrl+F:向前翻一个窗口内容
  • Ctrl+B:往回翻一个窗口内容
  • Ctrl+D:向前翻半个窗口内容
  • Ctrl+U:往回翻半个窗口内容
  • g:跳转文件开头
  • G:跳转文件末尾
  • qZZ:退出
  • :e:打开多个文件时,切换到指定文件
  • :n:打开多个文件时,切换到下一个文件
  • :p:打开多个文件时,切换到上一个文件
  • m:标记当前位置
  • ':跳转到指定标记位置
  • F:显示新写入内容

15. head

  • 功能:显示文件头部,默认显示前10行
  • 示例:head /etc/inittab
  • -5:指定显示的行数,等价于-n 5
  • -n -20:显示除最后20行以外的所有行
  • -c 10:显示前10个字节数据

16. tail

  • 功能:显示文件尾部,默认显示后10行
  • 示例:tail /etc/inittab
  • -5:指定显示的行数,等价于-n 5
  • -f:即时打印文件中新写入的行
  • --pid:在特定的进程结束时终结tail命令,与-f结合使用
  • --retry:持续尝试打开文件,用于当前不存在的文件

17. file

  • 功能:查看文件类型
  • 示例:file /etc/inittab
  • -i:用MIME类型的格式显示文件类型信息
  • -N:在文件名之后无空白填充显示

18. wc

  • 功能:查看文件统计信息
  • 示例:wc /etc/inittab,结果从左到右依次为行数、单词数、字节数
  • -l:只统计行数信息
  • -w:只统计单词数信息
  • -c:只统计字节数信息
  • -L:统计文件中最长行的长度

19. find

  • 功能:查找文件或目录
  • 示例:find /etc -name inittab
  • -name:查找指定名称
  • -iname:查找指定名称,不区分大小写
  • -type:查找指定类型,f表示文件,d表示目录
  • -perm 777:查找权限为777的文件
  • -perm /a+x:查找可执行文件
  • ! -perm /a+x:查找只读文件
  • find /tmp -type f -name "*.log" -exec rm -f {} ;:查找/tmp目录的.log文件并删除
  • -empty:查找空文件或目录
  • -user:查找指定所有者
  • -group:查找指定用户组
  • -mtime:查找指定修改天数,无符号表示指定天数相等,正数表示指定天数之前,负数表示指定天数之内
  • -cmin:查找指定修改分钟,无符号表示指定分钟相等,正数表示指定分钟之前,负数表示指定分钟之内
  • -size:查找指定大小,无符号表示指大小相等,正数表示大于指定大小,负数表示小于指定大小

20. touch

  • 功能:创建文件或更新文件访问时间
  • 示例:touch effyl,支持同时创建多个文件
  • -a:更新文件访问时间,文件不存在时创建
  • -c:更新文件访问时间,文件不存在时不会创建
  • -m:更新文件修改时间
  • -t:使用指定时间,时间格式:[[CC]YY]MMDDhhmm[.ss]
  • -r:使用指定文件时间更新当前文件

21. mkdir

  • 功能:创建目录
  • 示例:mkdir backup/old
  • -p:递归创建目录,如果目录存在也不会报错
  • -m:设置目录权限,格式可使用777a=rwx

22. cp

  • 功能:复制文件或目录
  • 示例:cp file.txt newfile.txt,文件名可使用通配符
  • -p:复制时保存源文件的所有者、权限、访问时间等信息
  • -r-R:递归复制一个目录
  • -a:存档模式,相当于-dpR
  • -d:保留软链接

23. ln

  • 功能:链接文件或目录
  • 软链接:又称为符号链接,是一类特殊的文件,文件包含另一个文件或目录的路径名;在对文件读写时,系统会自动把该操作转换为对源文件的操作;但删除链接文件时,系统只删除链接文件而不删除源文件;软链接可以链接不同文件系统的文件
  • 硬链接:相当于一个文件的多个文件名,引用的是文件在文件系统中的物理索引;移动或删除原始文件时,硬链接不会被破坏;硬链接不需要用户有原始文件的访问权限,也不显示原始文件的位置;删除硬链接时,文件依然被保留,直到所有对他的引用都被删除;硬链接只能链接同一个文件系统的文件
  • 示例:ln /full/path/original/file /full/path/link/file,默认创建硬链接
  • -s:创建软链接
  • --backup:创建软链接时,备份已存在的同名文件
  • -f:创建软链接时,覆盖已存在的同名文件

24. mv

  • 功能:重命名文件或目录
  • 示例:mv source.txt /tmp
  • -i:覆盖文件或目录时显示提示信息
  • -u:只移动在目标目录中不存在的文件

25. rm

  • 功能:删除文件或目录
  • 示例:rm file1.txt,文件名支持通配符
  • -i:删除每个文件签显示提示信息
  • -r:递归删除目录及其下内容
  • -f:删除前不提示用户确认,并忽略不存在文件

26. chmod

  • 功能:修改权限
  • 示例:chmod 777 example.sh

27. chown

  • 功能:修改所有者
  • 示例:chown root example.sh

28. chgrp

  • 功能:修改用户组
  • 示例:chgrp root example.sh

29. sort

  • 功能:文本排序
  • 示例:sort example.txt

30. uniq

  • 功能:文本去重
  • 示例:uniq example.txt

31. tr

  • 功能:替换或删除字符
  • 示例:echo linuxShell | tr a-z A-Z

32. grep

  • 功能:查找字符串
  • 示例:grep yantaol /etc/passwd

33. diff

  • 功能:比较两个文件
  • 示例:diff nsswitch.conf nsswitch.conf.org

34. hostname

  • 功能:查看或修改主机名
  • 示例:hostname

35. w

  • 功能:显示当前登录用户以及他们运行的进程
  • 示例:w

36. who

  • 功能:显示当前登录用户信息
  • 示例:who

37. uptime

  • 功能:查看系统运行时间信息
  • 示例:uptime

38. uname

  • 功能:查看系统信息
  • 示例:uname

39. date

  • 功能:显示或设置系统日期和时间
  • 示例:date

40. id

  • 功能:显示用户属性
  • 示例:id

41. paste

  • 功能:合并文件
  • 示例:paste file1 file2

42. dd

  • 功能:备份或拷贝文件
  • 示例:dd if=/dev/sda of=/dev/sdb

43. gzip

  • 功能:压缩和归档文件
  • 示例:gzip image1.jpg

44. bzip2

  • 功能:压缩和归档文件
  • 示例:bzip2 image1.jpg

45. gunzip

  • 功能:解压缩文件
  • 示例:gunzip image1.jpg.gz

46. bunzip2

  • 功能:解压缩文件
  • 示例:bunzip2 image1.jpg.bz2

47. tar

  • 功能:打包和解包文件
  • 示例:tar -cvf home.tar /home/yantaol

48. mount

  • 功能:挂载存储介质
  • 示例:mount /dev/sda5 /mydata

49. unmount

  • 功能:卸载存储介质
  • 示例:unmount /mydata

50. df

  • 功能:查看文件系统磁盘空间利用率
  • 示例:df -h

51. du

  • 功能:评估文件空间利用率
  • 示例:du

52. crontab

  • 功能:执行计划任务
  • 示例:crontab -l

53. at

  • 功能:在指定时间执行命令
  • 示例:at 5am

54. &

  • 功能:将任务放到后台运行
  • 示例:command &

55. nohup

  • 功能:运行一个对挂起免疫的命令
  • 示例:nohup sh script.sh &