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的默认超时时间
-
查看系统变量:
env或printenv -
定义变量:
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:跳转文件末尾q或ZZ:退出: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:设置目录权限,格式可使用777或a=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 &