linux基础命令二
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