alias:命令别名
alias:显示当前shell进程所有可用的命令别名
alias NAME="VALUE"
定义别名NAME,其相当于执行命令VALUE
[ps:在命令行中定义的别名,仅对当前shell进程有效,如果想永久有效,要定义在配置文件中
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
ps:编辑配置给出的新配置不会立即生效
bash进程重新读取配置文件:
source /path/to/config_file
/path/to/config_file
撤销别名:unalias
unalias [-a] name [name ...]
ps:如果别名同原命令的名菜,则如果要执行圆明路,可使用"\COMMAND"
文件名通配符:*,?,[]
*:任意长度的任意字符
?: 任意单个字符
[]: 匹配指定范围内单个字符
[0-9]
[a-z]:不区分大小写
[^]:匹配指定范围外的任意字符
[^0-9a-z]
专用字符集合:
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]:任意大写字母
[:alpha:]:任意大小写字母
[:alnum:]:任意数字或字母
[:space:]:空格
[:punct:]:标点符号
bash的快捷键
- ctrl+l:清屏,相当于clear
- ctrl+a:光标跳至命令首部
- ctrl+e:跳转至命令结尾
- ctrl+c:取消命令执行
- ctrl+u:删除命令行首至光标所在处的所有内容
- ctrl+k:删除光标所在处至命令行尾部的所有内容
I/O重定
打开的文件都有一个fd:file descriptor(文件描述符)
标准输入:keyboard,0
标准输出:monitor,1
标准错误输出:monitor,2
I/O重定向:改变标准位置
输出重定向:COMMAND > NEW_POS,COMMAND >> NEW_POS
>:覆盖重定向,目标文件中的内容会被清除
>>:追加重定向,新内容会追加至目标文件尾部
set -C:禁止将内容覆盖输出至已有文件中:
强制覆盖:>|
set +C:允许
2>:覆盖重定向错误输出数据流
2>>:追加重定向错误输出数据流
标准输出和错误输出各种定向至不同位置:
COMMAND > /path/to/file.out 2> /path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向:
&>:覆盖重定向
&>>:追加重定向
COMMAND > /path/to/file.out 2>&1
COMMAND >> /path/to/file.out 2>&1
输入重定向:<
tr命令:转换或删除字符
tr [OPTION]... SET1 [SET2]
HERE Documentation:<<
cat << EOF
cat > /path/to/somefile << EOF
I/O 管道
COMMAND1 | COMMAND2 | COMMAND3 |...
cat /etc/fstab | tr 'a-z' 'A-Z'
ps:最后一个命令会在当前shell进程的子shell进程中执行
tee 数据重定向
tee [OPTION]... [FILE]...
-a:向文件中重定向时使用追加模式;
-i:忽略中断(interrupt)信号
文本处理工具
wc:统计
wc [OPTION]... [FILE]...
wc [OPTION]... --files0-from=F
-l:lines
-w:words
-c:characters
cut:字段切分
cut OPTION... [FILE]...
-d:delimiter 指明分隔符
-f FILEDS:
#:第#个字段
#,#[,#]:离散的多个字段,例如,1,3,6
#-#:连续的多个字段,例如1-6
混合使用:1-3,7
--output-delimiter=STRING:指明输出的分隔符
sort:排序
sort [OPTION]... [FILE]...
-f:忽略字符大小写
-r:逆序
-t DELIMITER:字段分隔符
-k #:以指定字段为标准排序
-n:以数值大小排序
-u:uniq,排序并去重
uniq:去重
uniq [OPTION]... [FILE]...
-c:显示每行重复出现的次数
-d:仅显示重复过的行
-u:仅显示未曾重复的行
ps:连续且完全相同方为重复
find:文件查找
find [OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径,默认为当前目录
查找条件:指定的查找标准,可以文件名,大小,类型,权限,属主属组等标准进行,默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做什么操作;默认输出至屏幕
查找条件:
根据文件名查找:
-name "文件名称":支持使用glob
*,?,[],[^]
-iname "文件名称":忽略大小写
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名
根据属主属组查找:
-user USERNAME:查找属主为指定用户的文件
-group GROUPNAME:查找属组为指定组的文件
-uid UserID:查找属主为指定UID号的文件
-gid GroupID:查找属组为指定GID号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
根据文件类型查找:
-type TYPE:
f:普通文件
d:目录
l:符号链接
s:套接字
b:块设备
c:字符设备
p:管道
组合条件:
与:-a
或:-o
非:!或-notvv23
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
找出/tmp目录下,属主不是root,且文件名不是fstab的文件
find /tmp \( -not -user root -a -not -name 'fstab' \) -ls
find /tmp -not \( -user root -o -name 'fstab' \) -ls
根据文件大小:
-size [+|-]#UNIT
常用单位:k,M,G
#UNIT:(#-1,#],大于#-1,小于等于#
-#UNIT:[0,#-1]
+#UNIT:(#,oo)
根据时间戳:
以天为单位:
-atime [+|-]#
#:[#,#+1)
+#:[#+1,oo]
-#:[0,#)
-mtime
-ctime
以分组为单位:
-amin
-mmin
-cmin
根据权限查找:
-perm [/|-]MODE
MODE:精确权限匹配
/MODE:任何一类对象(u,g,o)的权限中,只要能一位匹配即可
-MODE:每一类对象都必须同时拥有为其指定的权限标准
-666:
处理动作:
-print:默认的处理动作,显示至屏幕
-ls:类似于ls -l
-delete:删除查找到的文件'
-fls /path/to/somefile :查找到的所有文件的长格式信息保存至指定文件
-ok COMMAND {} \;对查到的每个文件执行由COMMAND指定的命令
对每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \;对查找到的每个文件执行由COMMAND指定的命令
{}:用于引用查找到的文件名称自身
find /tmp -cmin -5 -exec mv {} {}.new \; #改文件名
ps:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令
有些命令不能接受过多参数,此时命令执行可能会失败,另一种方式可规避此问题
find | xagrs COMMAND
示例
查找/var目录下属主为root且属组为mail的所有文件或目录
find /var -user root -a -group mail
find /var -user root -group mail #-a可以省略
查找/usr目录下不属于root,bin,hadoop的所有文件或目录
find /usr -not \( -user root -o -user bin -o -user hadoop \)
find /usr -not -user root -a -not -user bin -a -not -user hadoop
.查找/etc目录下最近一周内其内容修改过,同时属主不为root,也不是Hadoop的文件或目录
find /etc -mtime -7 -a -not \( -user root -o -user hadoop \)
查找当前系统上没有属主或属组,且最近一个周内未曾被访问过的文件
find / -nouser -a -nogroup -a -atime -7
查找/etc目录下大于1M且类型为普通文件的所有文件
find /etc -size +1M -type f
查找/etc目录下所有用户都没有写权限的文件
find /etc -not -perm +222
查找/etc目录下至少有一类用户没有执行权限的文件
find /etc -not -perm -111
查找/etc/init.d目录下,所有用户都有执行权限,且其他用户有些权限的文件
find /etc/init.d -perm -113