“文件管理、命令别名、glob”和“IO重定向、管道及文本处理工具
文件管理:
cp,mv,rm
复制命令:cp
cp src(源)dest(目标)
src是文件
如果目标不存在,新建dest,并将src中内容填充至dest中;
如果目录存在:
如果dest是文件,将src中的内容覆盖至dest中;
此时建议为cp命令使用-i选项;
如果dest是目录,在dest下新建与原文件同名的文件,并将src中内容填充至新文件中;
cp src...dest
src...:多个文件
dest必须存在,且为目录,其它情形均会出错;
cp src dest
src是目录:
此时使用选项:-r
如果dest不存在,则创建指定目录,复制src目录中所有文件至dest中;
如果dest存在:
如果dest是文件,报错
如果dest是目录
常用选项:
-i:交互式
-r,-R:递归复制目录及内部的所有内容
-a:归档,相当于-dR --preserv=all
-d:--no-dereference --preserv=links
--preserv=[-ATTR_LIST]
mode:权限
ownership:属主属组
timestamp
links
xattr
context
all
-p:--preserv=mode,ownership,timestamp
-v:--verbose
-f:--force
mv:move,移动文件
常用选项:
-i:交互式
-f:强制
rm: remove,删除
rm [option]...file...
常用选项:
-i:交互式
-f:强制删除
-r:递归
rm -rf
文本编辑器:nano
全屏编辑器
bash的基础特性(2)
1.命令别名(alias)
通过alias命令实现:
(1)alias
显示当前shell进程所有可用的命令别名;
(2)alias NAME='VALUE'
定义别名NAME,其相当于执行命令VALUE;
注意:在命令行中定义的别名,仅对当前shell进程有效;如果想永久有效,要定义在配置文件中;
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
Note:编辑配置给出的新配置不会立即生效
bash进程重新读取配置文件:
source /path/to/config_file
. /path/to/config_file
撤销别名:unalias
unalias [-a] name [name...]
Note:如果别名同原命令的名称,则如果要执行原命令,可使用“\command”
2.glob(globbing)
bash中用于实现文件名“通配”
通配符:*,?,[ ]
(1):*,任意长度的任意字符;例如,a*b:aab,ab,abc
(2):?,任意单个字符;例如:a?b:aab,ab,a12b,abc
(3):[ ],匹配指定范围内的任意当个字符;例如:[0-9],[a-z](不区分字符大小写),[A-Z]
(4):[^],匹配指定范围外的任意单个字符,例如:[^0-9]
专用字符合集:[:digit:],任意数字,相当于0-9
[:lower:],任意小写字母
[:upper:],任意大写字母
[:alpha:],任意大小写字母
[:alnum:],任意数字或字母
[:space:],空格符号
[:punct:],标点符号
练习:
1.显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
touch /tmp/labc8m;ls -d /tmp/1*[0-9]*[[:lower:]]
2.显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录
ls -d /etc/[0-9]*[^0-9]
3.显示/etc目录下,以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
ls /etc/[^[:alpha:]][[:alpha:]]*
4.复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tem/mageedu目录中
ls /etc/m*[^0-9];cp -a /etc/a*[^0-9] /tmp/mageedu
5.复制/etc目录下,所有以.d结尾的文件或目录至/tem/magedu.com目录中
ls -d /etc/*.d;cp -a /etc/*.d /tmp/magedu.com
6.复制/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/magedu.com目录中
ls /etc/[snrp]*.conf;cp -a /etc/[mnrp]*.conf /tmp/magedu.com
3.bash的快捷键
Ctrl+l:清屏,相当于clear命令
Ctrl+a:跳转至命令开始处
Ctrl+e:跳转至命令结尾处
Ctrl+c:取消命令的执行
Ctrl+u:删除命令行首至光标所在处的所有内容
Ctrl+k:删除光标所在处至命令行尾部的所有内容
4.bash的I/O重定向及管道
程序:指令+数据
读入数据:Input
输出数据:Output
打开的文件都有一个fd:file descripter(文件描述符)
标准输入:keyborad,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]
hear documentation:<<
#cat << eof
#cat > /path/to/somefile << eof
管道:
command1 | command2 | command3 | ...
Note:最后一个命令会在当前shell进程的子shell进程中执行
tee命令:
tee [option] ...[file]...
练习:
1.将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中
head -n 5 /etc/passwd | tr 'a-z' 'A-Z' > /tmp/passwd.out
2.将登录至将前系统上用户信息中的后3行的信息转换为大写后保存至/tmp/who.out文件中
who | tail -n 3 | tr 'a-z' 'A-Z' > /tmp/who.out
文件处理工具:wc,cut,sort,uniq
wc命令:
wc [option]...[file]...
-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:仅显示不曾重复的行
Note:连续且完全相同方为重复
练习:
取出/etc/passwd文件的第6至第10行,并将这些信息按第3个字段的数值大小进行排序,最后仅显示各自的第一个字段

浙公网安备 33010602011771号