1、輸入輸出,重定向,管道

shell_advanced,advancedbashshell

一、輸入輸出,重定向,管道 二、<(cmd);>(cmd)
三、>;<;>>;<<;>>>;<<<
四、文本处理_一:cat;head;tail;cut;wc;sort;uniq;tr;tac;rev    
壹、輸入輸出,重定向,管道 1、Linux 程序有四个专业的输入输出,分别是:
标准输入,用数字0表示,私下认可连接到键盘,程序日常用来赢得用户的输入
标准输出,用数字一意味,暗中认可连接到荧屏,程序平常用来输出新闻标准错误,用数字二代表,私下认可连接到显示屏,程序经常用来输出错误新闻 解析:
命令 passwd 从正规输入读取用户密码,所以用户能够用键盘输入密码 命令 echo
把结果输出到标准输出,所以可以在显示屏上见到结果 普通用户未有权力查看/root
目录,所以出错,于是 ls 把错误新闻输出到正式错误,也正是显示屏 2、> 与
>> > 删除原来数据,写入新数据 >>
将新数据追加到原来数据之后 叁、/dev/null 俗称:垃圾桶文件 # echo hello
world > /dev/null
–重定向到该文件的数额都被基本丢掉了,能够用那几个本性来遮掩某个输出音信
# ls / /root 二> /dev/null –屏蔽掉命令的失误新闻 四、输出重定向
用户能够依照要求,把私下认可的输入输出的倾向实行修改 # ls -l > test #
ls -l 一> test –两条都是正统输出重定向到 test 文件,即暗中同意壹可省略 #
ls /jjjj 二> test –将行业内部错误重定向到 test 文件 # ls / /jjjj 一>
stdout 二> stderr –将标准输出与正规错误分别重定向到七个例外的公文中
# ls /jjjj / > std 二>&1–将行业内部错误合并到正规输出,同等对待定向到三个文书在那之中 # ls /jjjj / &>
std –结果与上条语句等价,特别简洁 # ls /jjjj / &>> std
–也是将正式输出与正规错误重定向追加到1个文书 5、标准输入重定向   #
cat 0< /etc/passwd   # cat < /etc/passwd   # cat /etc/passwd
–cat命令的专业输入来源于文件 /etc/passwd 中 六、管道
上面所描述的重定向,是把规范的输入输出连接到文件。大家也足以把三个程序之间的正规化输入输出进行连接,达成命令之间数据的传递,这种技能被形象地称做管道,程序的输出就像是流水在管道中流通1样,从最左侧的先后流到最左边的先后。管道是linux
shell
里那2个广阔的技能,利用管道技术能够达到十二分使用多个小工具,完结万分复杂而强劲的效应。
# cat /etc/passwd | head -n 三–左侧的授命的正式输出作为左边的吩咐的正经输入 # cat /etc/passwd | head
-n 三 | tail -n 一 7、标准输入输出的递进商讨 标准的输入输出是Linux
暗许为程序成立好的多少个公文描述符,尽管超越一半的顺序都会利用那多少个文本讲述符来作为协调的输入输出,不过那不即使强制性的,也正是说,程序能够不使用那多个正规的文本描述符,而是自个儿打开新的公文讲述符来使用。当程序不利用正式的输入输出时,那里所采纳的重定向对其也就不起功用了。例如:
passwd:
程序从专业输入读取用户密码,因而大家得以因此重定向标准输入来向它提供密码
ssh:
命令是用于远程登录的次第,它读取用户输入的密码时,使用的不是正经输入,由此大家无法因此重定向标准输入来向它提供密码
八、验证进度的专业输入输出所连接的文书 # sleep 99玖 一> /tmp/good
贰>&一 –在二个终极运维命令 # pgrep -x sleep
–在其它二个极限,找出sleep 的进程ID # lsof -anop 167一五 -d 0,1,二–查看该进度所打开的公文 九、验证重定向发生的火候 # vim file # cat -n
file > file –期待cat
会在每一行后面加上行号,然后把结果重定向保存回原来的文件file 中 # cat
file –为空了 原因:shell 执行命令以前,会先执行重定向操作,在第 二条命令中,先举办 > file,这几个重定向操作会把公文file
的剧情清空。当重定向操作把file 文件清空之后,再cat
该文件,自然就看不到任何内容了 $ sudo ls /root > /root/ls.log
–该例子中,用户没有机会输入密码,因为重定向操作先执行,当前用户是普通用户,不或然在路线
/root/ls.log 中开创文件,shell 出错并退出:bash: /root/ls.log:
Permission denied。此时还尚未实行命令sudo,所以也就从未机会输入密码  
二、<(cmd);>(cmd) 一、<(cmd) 用进度置换的秘籍重定向标准输入
贰、>(cmd) 用进度置换的章程重定向标准输出 三、过程置换
进度的科公输盘出存到一个暂时文件中,重回近来文件的门径
<(),当必要运用程序的出口,可是又不想生成1在那之中间文件时,能够思索采取进程置换
# paste <(seq $(wc -l /etc/passwd | cut -d” ” -f1)) <(awk -F:
‘{print $1}’ /etc/passwd) # paste <(seq 二陆) <(awk -F: ‘{print
$一}’ /etc/passwd) –可将该两条命令进行自己检查自纠  
三、>;<;>>;<<;>>>;<<< 1、>
–输出重定向,创造(存在则覆盖) # echo ‘hello world’ > test —
不设有 test 则开创,存在则覆盖里面内容 2、< –输入重定向,来源于文件
# less < /etc/passwd –将 /etc/passwd 里面包车型地铁内容输入到工具 less #
cat < <(ls /) –那里运用到命令置换 # wc -l < $(echo
/etc/passwd) # wc -l < <(cat /etc/passwd) –那里运用到进度置换
三、>> –重定向到文件,创设(存在则添加到文件末尾) # echo ‘hello
george’ >> george — 不存在 george
则开创,存在则扩充内容至文件末尾 四、<< –重定向,用于Here document
四.一、Here Document 是在Linux Shell
中的1种奇特的重定向格局,它的核心的款式如下: cmd << delimiter
Here Document Content delimiter : << delimiter –shell批量注释
Here Document Content delimiter 功用:将五个 delimiter 之间的始末(Here
Document Content) 传递给 cmd 作为输入参数 四.二、终端 # cat << EOF
> one > two > three > EOF EOF
–只是三个标识而已,能够替换来任意的官方字符 >
–那么些标记是极限产生的唤起输入消息的标识符 delimiter —
一定要顶格写,前边前边不可能有任何字符,包含空格 四.叁、shell # vim here.sh
–注:还可在里面使用变量 #!/bin/bash cat << EOF > output.sh
echo “hello” echo “world” echo $1 EOF # chmod a+x here.sh # ./here.sh
george # cat output.sh –查看里面内容;在此处 $一 被进行成为了剧本的参数
注意:若不想拓展那个变量,则需选择双引号将第二个 EOF 引起来。
四.4、<<- Here Document 还有叁个用法便是将 ‘<<‘ 变为
‘<<-‘。 使用 <<- 的绝无仅有变化就是Here Document
的内容部分每行前边的 tab (制表符)将会被删去掉,那种用法是为了编写制定Here
Document的时候可以将内容部分进行缩进,方便阅读代码 伍、<<<
–重定向,用于Here string # wc -l <<< “$(ls -l /home)” #
while read x; do echo “hello”;done <<< “$(seq 5)” # bc
<<< “2 ^ 10” # vim string.sh #!/bin/bash while read line do
if [ “${line#ftp:}” != “$line” ];then awk -F: ‘{print $陆}’
<<< $line break fi done < /etc/passwd
注释:循环读取/etc/passwd 文件中的每一行,假如是ftp
用户,就打印出其家目录,并退出循环 ${line#ftp:}:某行初始相配到了 ftp:
;则只取该行未相称部分 # chmod a+x string.sh # ./string.sh  
四、文本处理_一:cat;head;tail;cut;wc;sort;uniq;tr;tac;rev
文本处理是每七个系统一管理理员都会频繁触发的职责,其宗旨内容是连锁工具的应用,关键要点在于灵活地整合八个工具去实现职务1、cat
–concatinate,把贰个要么多少个公文的內容按順序連接起來,輸出到正规輸出 #
cat -n /etc/passwd –显示文件内容,并且拉长行号 # cat -A /etc/passwd
–打字与印刷出部分不可知的字符和职位标记 # cat 1.txt 二.txt > test.txt
–合并文件 2、head –读取文件底部 # head -n 三 /etc/passwd
–读取文件/etc/passwd 的前方三行 # head -n -1 file –扬弃 file
的最终1行 # head -c 三 /etc/passwd –读取文件/etc/passwd 的前头叁個字节
# head -c -3 file –丢弃 file 的最后 3 个字节 # head -c 10m
/dev/urandom > big –成立三个十M的文本 叁、tail –读取文件后面部分 # tail
-n 三 /etc/passwd –读取文件 /etc/passwd 后边3行 # tail -n +28
/etc/passwd –从第1捌行开首读取,直到文件后面部分;放任底部的27行 # tail -c
3 /etc/passwd –读取文件 /etc/passwd 的末端三個字节 # tail -c +28
/etc/passwd –从第一八字节初阶读取,直到文件尾巴部分;摒弃底部的27字节 # tail
-f /etc/passwd
–跟踪文件尾巴部分内容的扭转,常用來视察日志文件的变化化,分外实用 四、cut
–功效类似于awk,但是并未awk那么强劲和复杂性,当要对数码做分列输出时,平时应用awk,用cut的时候不多
常用选项: -d –定义分隔符 -b –输出钦命地方的字节(byte) -c
–输出钦命地点的字符(character) # echo “a;b;c d;e” | cut -d “;” -f一,三,4– -d 定义分隔符( 暗中同意是 TAB );-f 定义输出对应字段 #shell_advanced。 cat -n
/etc/passwd | cut -d $’\n’ -f壹,叁-五,7 — 使用换行符做分隔符 # echo
笔者是中华夏族 | cut -b一-三 — -b 输出钦点地方的字节(byte);3个utf八的汉语字占用2个字节 # echo 小编是华夏人 | cut -c二-肆 — -c
输出钦赐地方的字符(character);与-b 的区分表以往拍卖非英文字符时 # echo
做个大胆的中华夏族民共和国人 | cut -b壹-贰,玖 –会输出3个 ”假“ 字 # echo -n
做个硬汉的中中原人民共和国人 | xxd –会发现 一,2,玖 那多少个字节为:e581 八七 # echo -n
假 | xxd –而 ”假“ 也是 伍、wc –总括数据的字节数,字符数,单词数,行数
常用选项: -c –总结字节数 -m –总括字符数 -w –计算词数 -l –总括行数
# echo -n 笔者是中中原人民共和国人 | wc -c — -c 计算字节数,四个utf八华语占1四个字节 #
echo -n 笔者是神州人 | wc -m — -m 统计字符数,与-c
的分歧表往后处理非英文字符时,类似于命令cut # echo -n 作者是神州人 | wc
-w — -w
总括词数,未有分开符分开,陆个汉语算二个词,那与普通话所谓的“词”是见仁见智的 #
echo -n Uppercase CHINESE | wc -w –两个词 # echo -n Uppercase CHINESE
| wc -c –壹多个英文字节,未有 -n 就有十八个(因为还有一个换行符) # echo
-n Uppercase CHINESE | wc -m –1多个英文字符,未有 -n
就有1七个(因为还有3个换行符) # wc -l /etc/passwd — -l 总结行数
六、sort –按行对文本进行排序 常用选项: -t –钦定分割符 -k
–钦赐排序的字段 -u –去除重复的行 -n, -h –根据数值排序 -r –反过来排序
# cut -d “:” -f七 /etc/passwd | sort -u — -u 去除重复行 # echo -e
“1\n2\n10” | sort # echo -e “1\n2\n拾” | sort -n — -n
按数值排序,无法处理K, M, G 等单位字符 # ls -lh | tail -n +二 | sort
-k伍,5n — -k 内定排序的字段 # ls -lh | tail -n +2 | sort -k伍,伍h — -h
比照数值排序时,能处理K, M, G 等单位字符 # head -4 /etc/passwd | sort
-t: -k7,七 — -t 以冒号 : 作为字段分割符,按第八字段排序 # head -4
/etc/passwd | sort -t: -k7,柒 -k三,叁n
–先按第8字段排序,若第7字段有一样的,则按第二字段排序 # echo -e
“1\n2\n三” | sort -nr — -r 对排序反转 # head -四 /etc/passwd | sort
-t: -k七,7 -k三,三nr –至反转第一字段排序,也可同时对三个字段反转 7、uniq
–去除接二连三的再一次行 常用选项: -c –总括重复行的数目 # echo -e
“1\n1\n2\n一” | uniq — 结果中仍有四个1,因为那多少个1是不总是的 # echo
-e “1\n1\n2\n壹” | sort -u — sort 去除重复则不用总是 # cut -d: -f7
/etc/passwd | sort | uniq -c —
在sort命令例子的基础上,总结区别的登录shell出现的次数 捌、tr
–转换,删除,缩减相同字符 常用选项: -d –删除,删除相称到的持有字母 -s
–缩减,缩减相同字符 格式: tr SET壹 SET二 注意:
把集合一里面包车型客车字符转换来集合第22中学对应地方的字符,所以原则上五个汇聚中的字符数目应该一致,可是,假若四个聚众中的字符数不等于,程序也不会出错,请留意那种情景下的结果。要点:
a、 tr
不关切八个汇聚中是怎么样字符,它只是不难地把对应地点的字符每种做替换而已、
b、 tr 做的是单个字符的轮换,不可能替换字符串 # echo abc | tr a-z A-Z
–把二十五个小写字母转换到相呼应的大写字母 # echo abc | tr ab BA –把 a 和
b,分别转换为 B 和 A # echo 好人做好事 | tr 好 坏 — “好” 转换为 “坏”
# echo abcdefg | tr a-z AB
–集合二较短,程序自动用集合第22中学最终三个字符来扩张集合二 # echo abcdefg |
tr a-b A-Z –集合贰较长,程序自动把集合二切短 # echo Abc | tr a-zA-Z
A-Za-z –完成英文字母大小反转 # echo hello world | tr -d ow — -d
删除,相称到的富有字母 # echo 0123456789 | tr -d 13579 # tr -d ‘\01二’
< /etc/passwd — 删除文件/etc/passwd 中的换行符,tr
可用8进制表示2个字符 # echo aabbaacc | tr -s a —
-s,将每个连在一起的多少个 a 缩减至2个 # echo aabbaacc | tr -s a A —
聚集之后再做转换 玖、tac
–把1个大概三个文本的內容按順序連接起來,輸出到標準輸出,每一种文件中,内容按行号反序打字与印刷
# echo -e “111111111\n2222222” > f1 # echo -e
“333333333\n4444444” > f2 # tac f二 f一 10、rev
–把文件中的行左右反转 # echo -e “1234567\nabcdefg” > test # rev
test   五、扩展 1、cat,md5sum # echo file1 > file1 # echo file二> file二 –成立多个公文 # md伍sum file一 file二 –相比他们的 md5值是还是不是相同 # head -c 10m /dev/urandom > bigfile
–使用随机设备创立二个 10M 的文书 # head -c 三m bigfile > file1–将前 3M 数据导入 file1 # tail -c 4m bigfile > file3 –将后 叁M
数据导入 file3 # head -c ⑥m bigfile | tail -c 叁m > file二 –将中间 四M
数据导入 file2 # ls -lh file* # cat file一 file二 file三 > newbigfile
–使用 cat 将两个公文合并到八个新大文件中 # md伍sum newbigfile bigfile
–在用命令比较旧大文件与新大文件的 md5sum 值

一、
輸入輸出,重定向,管道 二、(cmd);(cmd) 三、;;;;;
肆、文本处理_1:cat;head;tail;cut;wc;sort;uniq;tr;tac;rev
一、輸…

一、輸入輸出,重定向,管道

I/O:

2、<(cmd);>(cmd)

2、<(cmd);>(cmd)

系统设定

3、>;<;>>;<<;>>>;<<<

3、>;<;>>;<<;>>>;<<<

  私下认可输入设备:标准输入,STDIN,0

四、文本处理_1:cat;head;tail;cut;wc;sort;uniq;tr;tac;rev

澳门金沙国际 ,4、文本处理_1:cat;head;tail;cut;wc;sort;uniq;tr;tac;rev

  私下认可输出设备:标准输出,STDOUT,1

 

 

  标准错误输出:STDE卡宴CRUISER,2

 

 

  属于分裂的数据流

1、輸入輸出,重定向,管道

一、輸入輸出,重定向,管道

 

1、Linux
程序有八个标准的输入输出,分别是:

1、Linux
程序有多少个正式的输入输出,分别是:

标准输入:键盘

行业内部输入,用数字0表示,默许连接到键盘,程序平常用来博取用户的输入

专业输入,用数字0表示,暗中认可连接到键盘,程序日常用来赢得用户的输入

规范输出和错误输出:荧屏

正规输出,用数字一意味,暗中同意连接到荧屏,程序日常用来输出新闻

专业输出,用数字一意味着,暗中认可连接到显示器,程序经常用来输出音信

 

标准错误,用数字二意味着,暗许连接到显示器,程序日常用来输出错误音信

规范错误,用数字贰意味着,暗中同意连接到荧屏,程序平常用来输出错误新闻

I/O重定向:

解析:

解析:

 

命令 passwd 从正式输入读取用户密码,所以用户能够用键盘输入密码

一声令下 passwd 从行业内部输入读取用户密码,所以用户能够用键盘输入密码

出口重定向:

命令 echo 把结果输出到专业输出,所以能够在屏幕上来看结果

指令 echo 把结果输出到专业输出,所以能够在显示器上观察结果

> :覆盖输出

普通用户未有权力查看/root 目录,所以出错,于是 ls
把错误消息输出到专业错误,相当于显示屏

普通用户未有权限查看/root 目录,所以出错,于是 ls
把错误消息输出到正式错误,也正是显示器

>> :追加输出

2、> 与 >>

2、> 与 >>

二>:错误输出

> 删除原来数据,写入新数据

> 删除原来数据,写入新数据

二>>:追加错误输出

>>
将新数据追加到原来数据之后

>>
将新数据追加到原来数据之后

 

3、/dev/null

3、/dev/null

健康输出

俗称:垃圾桶文件

俗称:垃圾桶文件

ls /usr > /tmp/var.out

# echo hello world > /dev/null
–重定向到该文件的多寡都被基本丢掉了,能够用那性情格来遮掩有个别输出音讯

# echo hello world > /dev/null
–重定向到该文件的多少都被基本丢掉了,可以用这一个性格来遮掩有个别输出消息

 

# ls / /root 二> /dev/null –屏蔽掉命令的失误音讯

# ls / /root 二> /dev/null –屏蔽掉命令的失误消息

set

四、输出重定向

四、输出重定向

  -C:禁止对曾经存在文件使用覆盖重定向;

用户能够根据须求,把默许的输入输出的大方向拓展修改

用户能够依照需求,把暗中认可的输入输出的自由化进行修改

  +C:允许覆盖输出

# ls -l > test

# ls -l > test

 

# ls -l 一> test –两条都以正经输出重定向到 test 文件,即私下认可一可总结

# ls -l 一> test –两条都以专业输出重定向到 test 文件,即暗许一可回顾

强制覆盖输出

# ls /jjjj 二> test –将标准错误重定向到 test 文件

# ls /jjjj 贰> test –将规范错误重定向到 test 文件

ls /usr >| /tmp/var.out

# ls / /jjjj ①> stdout 2> stderr
–将规范输出与正统错误分别重定向到七个例外的文本中

# ls / /jjjj 一> stdout 2> stderr
–将标准输出与正式错误分别重定向到八个例外的文件中

荒谬输出

# ls /jjjj / > std 二>&1–将规范错误合并到标准输出,不分畛域定向到叁个文件个中

# ls /jjjj / > std 2>&1–将行业内部错误合并到专业输出,仁同一视定向到3个文本当中

ls /varr 2> /tmp/var2.out

# ls /jjjj / &> std –结果与上条语句等价,尤其简洁

# ls /jjjj / &> std –结果与上条语句等价,越发简明

定向标准输出与规范错误输出

# ls /jjjj / &>> std
–也是将规范输出与正规错误重定向追加到二个文本

# ls /jjjj / &>> std
–也是将标准输出与标准错误重定向追加到贰个文件

ls /varr > /tmp/var3.out 2> /tmp/err.out

伍、标准输入重定向

5、标准输入重定向

 

  # cat 0< /etc/passwd

  # cat 0< /etc/passwd

&>:重定向标准输出或不当输出至同多少个文本

  # cat < /etc/passwd

  # cat < /etc/passwd

ls /varr &> /tmp/var4.out 

  # cat /etc/passwd –cat命令的正式输入来源于文件 /etc/passwd 中

  # cat /etc/passwd –cat命令的正统输入来源于文件 /etc/passwd 中

 

6、管道

6、管道

输入重定向

上边所讲述的重定向,是把标准的输入输出连接到文件。大家也足以把五个程序之间的正统输入输出实行连接,达成命令之间数据的传递,那种技能被形象地称做管道,程序的输出就像流水在管道中流通壹样,从最左边的次第流到最左侧的程序。管道是linux
shell
里那一个广阔的技能,利用管道技术能够完结10分使用多个小工具,完毕格外复杂而有力的机能。

地点所讲述的重定向,是把正规化的输入输出连接到文件。大家也可以把多个程序之间的正规输入输出进行一连,实现命令之间数据的传递,那种技术被形象地称做管道,程序的出口就好像流水在管道中流通一样,从最左边的顺序流到最左边的先后。管道是linux
shell
里那三个广泛的技能,利用管道技术能够达到特出使用三个小工具,实现十分复杂而强劲的成效。

<:平常输入

# cat /etc/passwd | head -n 三–左边的命令的专业输出作为右侧的指令的专业输入

# cat /etc/passwd | head -n 三–左侧的一声令下的行业内部输出作为左边的下令的正规输入

<<:Here Document

# cat /etc/passwd | head -n 3 | tail -n 1

# cat /etc/passwd | head -n 3 | tail -n 1

cat << EOF

7、标准输入输出的深切商讨

7、标准输入输出的深切探讨

 

正规的输入输出是Linux
暗中同意为程序创造好的七个公文描述符,即便多数的顺序都会动用那多少个文件讲述符来作为团结的输入输出,不过那并非是强制性的,也正是说,程序可以不使用那多少个正规的文件描述符,而是自个儿打开新的文书讲述符来使用。当程序不利用标准的输入输出时,那里所采用的重定向对其也就不起作用了。例如:

行业内部的输入输出是Linux
暗中同意为程序成立好的多少个文本描述符,就算超越四伍%的次第都会使用那多少个公文讲述符来作为自身的输入输出,可是那毫无是强制性的,也正是说,程序能够不行使那多少个专业的文书描述符,而是自个儿打开新的文本讲述符来使用。当程序不应用正规的输入输出时,这里所利用的重定向对其也就不起成效了。例如:

健康输入

passwd:
程序从专业输入读取用户密码,因而大家得以经过重定向标准输入来向它提供密码

passwd:
程序从专业输入读取用户密码,因而大家得以因而重定向标准输入来向它提供密码

tr ‘a-z’ ‘A-Z’ < /etc/fstab

ssh:
命令是用来远程登录的先后,它读取用户输入的密码时,使用的不是正规输入,因而大家无法由此重定向标准输入来向它提供密码

ssh:
命令是用于远程登录的次第,它读取用户输入的密码时,使用的不是行业内部输入,因而大家不可能因此重定向标准输入来向它提供密码

出口内容到文件中

八、验证进程的正规化输入输出所连接的公文

八、验证进程的正式输入输出所连接的公文

cat >> /tmp/myfile.txt << EOF

# sleep 99九 壹> /tmp/good 二>&1 –在二个终端运转命令

# sleep 99⑨ 一> /tmp/good 二>&壹 –在一个终极运维命令

 

# pgrep -x sleep –在其它1个极限,找出sleep 的进程ID

# pgrep -x sleep –在此外三个巅峰,找出sleep 的进度ID

管道:前多个发令的输出,作为后三个限令的输入

# lsof -anop 167一5 -d 0,一,二 –查看该进程所打开的文件

# lsof -anop 16715 -d 0,一,二 –查看该进度所打开的文件

命令1 | 命令2 | 命令3 …

9、验证重定向产生的机会

9、验证重定向发生的火候

 

# vim file

# vim file

echo “First love is only a little foolishness and a lot of curiosity.” |
tr ‘a-z’ ‘A-Z’

# cat -n file > file –期待cat
会在每1行前面加上行号,然后把结果重定向保存回原来的公文file 中

# cat -n file > file –期待cat
会在每1行前边加上行号,然后把结果重定向保存回原来的文书file 中

echo “redhat” | passwd –stdin hive

# cat file –为空了

# cat file –为空了

cat /etc/passwd | sort 

由来:shell
执行命令在此以前,会先执行重定向操作,在第 贰 条命令中,先实施 >
file,那个重定向操作会把公文file 的内容清空。当重定向操作把file
文件清空之后,再cat 该文件,自然就看不到任何内容了

缘由:shell
执行命令从前,会先执行重定向操作,在第 2 条命令中,先实施 >
file,这些重定向操作会把文件file 的始末清空。当重定向操作把file
文件清空之后,再cat 该文件,自然就看不到任何内容了

cut -d : -f 1 /etc/passwd | sort -n | tr ‘a-z’ ‘A-Z’

$ sudo ls /root > /root/ls.log
–该例子中,用户未有机会输入密码,因为重定向操作先执行,当前用户是普通用户,不只怕在途径
/root/ls.log 中开创文件,shell 出错并退出:bash: /root/ls.log:
Permission denied。此时还尚无执行命令sudo,所以也就平昔不机会输入密码

$ sudo ls /root > /root/ls.log
–该例子中,用户未有机会输入密码,因为重定向操作先执行,当前用户是普通用户,不可能在路径
/root/ls.log 中创制文件,shell 出错并脱离:bash: /root/ls.log:
Permission denied。此时还从未实施命令sudo,所以也就未有机会输入密码

ls /var | tr ‘a-z’ ‘A-Z’

 

 

wc -l /etc/passwd | cut -d’ ‘ -f 1

二、<(cmd);>(cmd)

二、<(cmd);>(cmd)

 

1、<(cmd)

1、<(cmd)

tee :从专业输入读取,写入到正式输出,并保存到文件中

用经过置换的法门重定向标准输入

用经过置换的措施重定向标准输入

echo “First love is only a little foolishness and a lot of curiosity.” |
tee  /tmp/test.out

2、>(cmd)

2、>(cmd)

 

用经过置换的情势重定向标准输出

用经过置换的法子重定向标准输出

练习:

三、进度置换

三、进度置换

壹.总计/usr/bin目录下的文本个数;

经过的正规输出存到叁个近来文件中,重回一时文件的不二等秘书诀<(),当必要动用程序的出口,不过又不想生成1当中等文件时,能够设想动用进程置换

经过的正规化输出存到2个一时半刻文件中,再次回到一时半刻文件的途径
<(),当供给利用程序的出口,然而又不想生成1其中级文件时,可以考虑选拔进度置换

 #ls /usr/bin | wc -l

# paste <(seq $(wc -l /etc/passwd | cut -d” ” -f1)) <(awk -F:
‘{print $1}’ /etc/passwd)

# paste <(seq $(wc -l /etc/passwd | cut -d” ” -f1)) <(awk -F:
‘{print $1}’ /etc/passwd)

二.取出当前系统上有所用户的shell,每一个shell只展现1遍,且按梯次展现;

# paste <(seq 26) <(awk -F: ‘{print $壹}’ /etc/passwd)
–可将该两条命令实行相比较

# paste <(seq 二陆) <(awk -F: ‘{print $一}’ /etc/passwd)
–可将该两条命令实行自己检查自纠

# /etc/passwd 保存shell

 

 

#cut -d : -f 7 /etc/passwd |sort -u

三、>;<;>>;<<;>>>;<<<

三、>;<;>>;<<;>>>;<<<

3.怎样展现/var/log目录下各种文件的内容类型?

一、>
–输出重定向,创制(存在则覆盖)

一、>
–输出重定向,创设(存在则覆盖)

#file /var/log/*

# echo ‘hello world’ > test — 不存在 test
则开创,存在则覆盖里面内容

# echo ‘hello world’ > test — 不存在 test
则创设,存在则覆盖里面内容

4.取出/etc/inittab文件的第6行;

2、< –输入重定向,来源于文件

贰、< –输入重定向,来源于文件

# head -6 /etc/inittab | tail -1

# less < /etc/passwd –将 /etc/passwd 里面包车型大巴剧情输入到工具 less

# less < /etc/passwd –将 /etc/passwd 里面包车型地铁剧情输入到工具 less

伍.取出/etc/passwd文件中尾数第9个用户的用户名和shell,显示到显示器上并将其保存至/tmp/users文件中;

# cat < <(ls /) –那里运用到命令置换

# cat < <(ls /) –那里运用到命令置换

# tail -9 /etc/passwd | head -1 | cut -d : -f 1,7 | tee /tmp/users

# wc -l < $(echo /etc/passwd)

# wc -l < $(echo /etc/passwd)

陆.呈现/etc目录下全体以pa开首的文本,并总括其个数;

# wc -l < <(cat /etc/passwd) –那里运用到进度置换

# wc -l < <(cat /etc/passwd) –那里运用到进度置换

#  ls -d /etc/pa* | wc -l

三、>>
–重定向到文件,创设(存在则添加到文件末尾)

三、>>
–重定向到文件,创立(存在则添加到文件末尾)

七.不使用文本编辑器,将alias
cls=clear一行内容添加至当下用户的.bashrc文件中。

# echo ‘hello george’ >> george — 不存在 george
则创建,存在则扩张内容至文件末尾

# echo ‘hello george’ >> george — 不设有 george
则创制,存在则扩张内容至文件末尾

# echo “alias cls=clear” >> ~/.bashrc

4、<< –重定向,用于Here
document

4、<< –重定向,用于Here
document

 

4.1、Here Document

4.1、Here Document

是在Linux Shell 中的1种卓殊的重定向情势,它的骨干的格局如下:

是在Linux Shell 中的一种新鲜的重定向方式,它的焦点的样式如下:

cmd << delimiter

cmd << delimiter

Here Document Content

Here Document Content

delimiter

delimiter

: << delimiter
–shell批量注释

: << delimiter
–shell批量注释

Here Document Content

Here Document Content

delimiter

delimiter

功用:将四个 delimiter 之间的情节(Here
Document Content) 传递给 cmd 作为输入参数

成效:将五个 delimiter 之间的内容(Here
Document Content) 传递给 cmd 作为输入参数

4.2、终端

4.2、终端

# cat << EOF

# cat << EOF

> one

> one

> two

> two

> three

> three

> EOF

> EOF

EOF
–只是贰个标识而已,能够替换到任意的法定字符

EOF
–只是三个标识而已,可以替换来任意的法定字符

>
–这么些符号是终极发生的提示输入消息的标识符

>
–这么些标记是极限发生的唤起输入消息的标识符

delimiter —
一定要顶格写,前边前面不能够有任何字符,蕴涵空格

delimiter —
一定要顶格写,前面后边不可能有任何字符,蕴含空格

4.3、shell

4.3、shell

# vim here.sh –注:还可在里头使用变量

# vim here.sh –注:还可在内部使用变量

#!/bin/bash

#!/bin/bash

cat << EOF > output.sh

cat << EOF > output.sh

echo “hello”

echo “hello”

echo “world”

echo “world”

echo $1

echo $1

EOF

EOF

# chmod a+x here.sh

# chmod a+x here.sh

# ./here.sh george

# ./here.sh george

# cat output.sh –查看里面内容;在此地 $1 被实行成为了剧本的参数

# cat output.sh –查看里面内容;在那边 $一 被进行成为了剧本的参数

只顾:若不想拓展那几个变量,则需使用双引号将第1个EOF 引起来。

小心:若不想进行这一个变量,则需使用双引号将率先个
EOF 引起来。

4.4、<<-

4.4、<<-

Here Document 还有二个用法就是将 ‘<<‘ 变为 ‘<<-‘。 使用
<<- 的唯1变化就是Here Document 的始末部分每行前面包车型地铁 tab
(制表符)将会被剔除掉,那种用法是为着编写制定Here
Document的时候能够将内容部分开始展览缩进,方便阅读代码

Here Document 还有一个用法就是将 ‘<<‘ 变为 ‘<<-‘。 使用
<<- 的绝无仅有变化正是Here Document 的始末部分每行前边的 tab
(制表符)将会被剔除掉,那种用法是为了编制Here
Document的时候能够将内容部分进行缩进,方便阅读代码

5、<<< –重定向,用于Here
string

5、<<< –重定向,用于Here
string

# wc -l <<< “$(ls -l /home)”

# wc -l <<< “$(ls -l /home)”

# while read x; do echo “hello”;done <<< “$(seq 5)”

# while read x; do echo “hello”;done <<< “$(seq 5)”

# bc <<< “2 ^ 10”

# bc <<< “2 ^ 10”

# vim string.sh

# vim string.sh

#!/bin/bash

#!/bin/bash

while read line

while read line

do

do

if [ “${line#ftp:}” != “$line” ];then

if [ “${line#ftp:}” != “$line” ];then

awk -F: ‘{print $6}’ <<< $line

awk -F: ‘{print $6}’ <<< $line

break

break

fi

fi

done < /etc/passwd

done < /etc/passwd

申明:循环读取/etc/passwd
文件中的每壹行,假使是ftp 用户,就打印出其家目录,并脱离循环

诠释:循环读取/etc/passwd
文件中的每1行,假设是ftp 用户,就打字与印刷出其家目录,并脱离循环

${line#ftp:}:某行开头相称到了 ftp:
;则只取该行未相称部分

${line#ftp:}:某行先河相配到了 ftp:
;则只取该行未相称部分

# chmod a+x string.sh

# chmod a+x string.sh

# ./string.sh

# ./string.sh

 

 

4、文本处理_1:cat;head;tail;cut;wc;sort;uniq;tr;tac;rev

肆、文本处理_1:cat;head;tail;cut;wc;sort;uniq;tr;tac;rev

文本处理是每二个系统一管理理员都会一再接触的职务,其宗旨内容是生死相依工具的运用,关键要点在于灵活地整合八个工具去达成职责

文本处理是每个系统一管理理员都会频仍触发的天职,其焦点内容是相关工具的施用,关键要点在于灵活地组合七个工具去完结职务

一、cat
–concatinate,把贰个要么三个公文的內容按順序連接起來,輸出到专业輸出

一、cat
–concatinate,把三个或许多少个文件的內容按順序連接起來,輸出到专业輸出

# cat -n /etc/passwd –呈现文件内容,并且增进行号

# cat -n /etc/passwd –呈现文件内容,并且增加行号

# cat -A /etc/passwd –打字与印刷出1部分不可知的字符和岗位标记

# cat -A /etc/passwd –打印出有个别不可知的字符和地点标记

# cat 1.txt 2.txt > test.txt –合并文件

# cat 1.txt 2.txt > test.txt –合并文件

贰、head –读取文件底部

二、head –读取文件底部

# head -n 三 /etc/passwd –读取文件/etc/passwd 的日前3行

# head -n 叁 /etc/passwd –读取文件/etc/passwd 的前头叁行

# head -n -壹 file –放弃 file 的末梢壹行

# head -n -一 file –舍弃 file 的尾声一行

# head -c 3 /etc/passwd –读取文件/etc/passwd 的前方叁個字节

# head -c 3 /etc/passwd –读取文件/etc/passwd 的前面三個字节

# head -c -3 file –丢弃 file 的最后 3 个字节

# head -c -3 file –丢弃 file 的最后 3 个字节

# head -c 拾m /dev/urandom > big –成立三个10M的文件

# head -c 10m /dev/urandom > big –创设叁个十M的公文

③、tail –读取文件尾部

三、tail –读取文件尾巴部分

# tail -n 三 /etc/passwd –读取文件
/etc/passwd 前边三行

# tail -n 3 /etc/passwd –读取文件
/etc/passwd 前边3行

# tail -n +28 /etc/passwd
–从第三八行伊始读取,直到文件尾巴部分;废弃尾部的二7行

# tail -n +28 /etc/passwd
–从第18行起始读取,直到文件后面部分;甩掉尾部的二7行

# tail -c 三 /etc/passwd –读取文件 /etc/passwd 的后面3個字节

# tail -c 三 /etc/passwd –读取文件 /etc/passwd 的末尾3個字节

# tail -c +2捌 /etc/passwd
–从第三八字节开始读取,直到文件尾部;甩掉尾部的27字节

# tail -c +2八 /etc/passwd
–从第一8字节开头读取,直到文件尾巴部分;舍弃尾部的二柒字节

# tail -f /etc/passwd
–跟踪文件尾巴部分内容的生成,常用來视察日志文件的变化化,13分实用

# tail -f /etc/passwd
–跟踪文件背后部分内容的变动,常用來视察日志文件的变化化,分外实用

4、cut
–成效附近于awk,可是从未awk那么强劲和错综复杂,当要对数据做分列输出时,平时选取awk,用cut的时候不多

四、cut
–功效类似于awk,不过从未awk那么强劲和复杂性,当要对数码做分列输出时,平日利用awk,用cut的时候不多

常用选项:

常用选项:

-d –定义分隔符

-d –定义分隔符

-b –输出钦赐位置的字节(byte)

-b –输出钦赐地方的字节(byte)

-c
–输出钦命地点的字符(character)

-c
–输出钦赐地点的字符(character)

# echo “a;b;c d;e” | cut -d “;” -f1,三,四 — -d 定义分隔符( 私下认可是 TAB );-f 定义输出对应字段

# echo “a;b;c d;e” | cut -d “;” -f1,3,肆 — -d 定义分隔符( 默许是 TAB );-f 定义输出对应字段

# cat -n /etc/passwd | cut -d $’\n’ -f一,三-5,7 — 使用换行符做分隔符

# cat -n /etc/passwd | cut -d $’\n’ -f一,三-5,7 — 使用换行符做分隔符

# echo 笔者是华夏人 | cut -b1-三 — -b
输出钦定地方的字节(byte);二个utf八 的汉语字占用二个字节

# echo 笔者是礼仪之邦人 | cut -b1-三 — -b
输出钦命地方的字节(byte);贰个utf捌 的中文字占用三个字节

# echo 作者是礼仪之邦人 | cut -c二-4 — -c
输出钦命位置的字符(character);与-b 的差异表未来拍卖非英文字符时

# echo 小编是华夏人 | cut -c二-四 — -c
输出钦点地点的字符(character);与-b 的界别表未来拍卖非英文字符时

# echo 做个大胆的中华夏族民共和国人 | cut -b壹-二,玖 –会输出2个 ”假“ 字

# echo 做个大胆的炎白人 | cut -b一-贰,九 –会输出三个 ”假“ 字

# echo -n 做个英雄的中中原人 | xxd –会发现 壹,二,九 这四个字节为:e5捌1 87

# echo -n 做个英豪的华夏人 | xxd –会发现 一,二,九 那八个字节为:e5八1 八7

# echo -n 假 | xxd –而 ”假“ 也是

# echo -n 假 | xxd –而 ”假“ 也是

5、wc
–总计数据的字节数,字符数,单词数,行数

5、wc
–计算数据的字节数,字符数,单词数,行数

常用选项:

常用选项:

-c –总计字节数

-c –总结字节数

-m –总结字符数

-m –计算字符数

-w –总括词数

-w –计算词数

-l –总括行数

-l –总计行数

# echo -n 作者是华夏人 | wc -c — -c 总括字节数,6个utf八华语占一八个字节

# echo -n 作者是礼仪之邦人 | wc -c — -c 计算字节数,四个utf八国语占壹四个字节

# echo -n 作者是炎黄种人 | wc -m — -m 总括字符数,与-c
的分别表今后拍卖非英文字符时,类似于命令cut

# echo -n 我是炎黄人 | wc -m — -m 计算字符数,与-c
的区分表未来拍卖非英文字符时,类似于命令cut

# echo -n 笔者是炎白人 | wc -w — -w
计算词数,未有分开符分开,陆个中文算一个词,那与汉语所谓的“词”是不相同的

# echo -n 小编是礼仪之邦人 | wc -w — -w
总结词数,未有分开符分开,两个汉语算3个词,那与普通话所谓的“词”是见仁见智的

# echo -n Uppercase CHINESE | wc -w –两个词

# echo -n Uppercase CHINESE | wc -w –两个词

# echo -n Uppercase CHINESE | wc -c –一多少个英文字节,没有 -n
就有十多个(因为还有2个换行符)

# echo -n Uppercase CHINESE | wc -c –一8个英文字节,未有 -n
就有二十一个(因为还有三个换行符)

# echo -n Uppercase CHINESE | wc -m –1柒个英文字符,未有 -n
就有21个(因为还有3个换行符)

# echo -n Uppercase CHINESE | wc -m –一七个英文字符,未有 -n
就有拾8个(因为还有一个换行符)

# wc -l /etc/passwd — -l 总结行数

# wc -l /etc/passwd — -l 总计行数

六、sort –按行对文本实行排序

陆、sort –按行对文本举行排序

常用选项:

常用选项:

-t –内定分割符

-t –钦定分割符

-k –钦命排序的字段

-k –钦点排序的字段

-u –去除重复的行

-u –去除重复的行

-n, -h –遵照数值排序

-n, -h –依据数值排序

-r –反过来排序

-r –反过来排序

# cut -d “:” -f七 /etc/passwd | sort -u — -u 去除重复行

# cut -d “:” -f7 /etc/passwd | sort -u — -u 去除重复行

# echo -e “1\n2\n10” | sort

# echo -e “1\n2\n10” | sort

# echo -e “1\n2\n⑩” | sort -n — -n 按数值排序,不可能处理K, M, G
等单位字符

# echo -e “1\n2\n拾” | sort -n — -n 按数值排序,无法处理K, M, G
等单位字符

# ls -lh | tail -n +二 | sort -k5,伍n — -k 钦命排序的字段

# ls -lh | tail -n +二 | sort -k5,伍n — -k 钦定排序的字段

# ls -lh | tail -n +2 | sort -k五,5h — -h 比照数值排序时,能处理K, M, G
等单位字符

# ls -lh | tail -n +2 | sort -k伍,5h — -h 如约数值排序时,能处理K, M, G
等单位字符

# head -④ /etc/passwd | sort -t: -k七,7
— -t 以冒号 : 作为字段分割符,按第8字段排序

# head -四 /etc/passwd | sort -t: -k柒,7
— -t 以冒号 : 作为字段分割符,按第8字段排序

# head -4 /etc/passwd | sort -t: -k7,七 -k三,叁n
–先按第七字段排序,若第十字段有一样的,则按第三字段排序

# head -4 /etc/passwd | sort -t: -k柒,7 -k三,3n
–先按第捌字段排序,若第九字段有同样的,则按第二字段排序

# echo -e “1\n2\n三” | sort -nr — -r 对排序反转

# echo -e “1\n2\n3” | sort -nr — -r 对排序反转

# head -4 /etc/passwd | sort -t: -k7,7 -k叁,3nr
–至反转第3字段排序,也可同时对五个字段反转

# head -四 /etc/passwd | sort -t: -k七,7 -k三,三nr
–至反转第壹字段排序,也可同时对多个字段反转

7、uniq –去除一连的重复行

七、uniq –去除再三再四的重复行

常用选项:

常用选项:

-c –总结重复行的数码

-c –总计重复行的多少

# echo -e “1\n1\n2\n壹” | uniq —
结果中仍有四个一,因为那八个壹是不总是的

# echo -e “1\n1\n2\n一” | uniq —
结果中仍有多少个壹,因为那多少个壹是不总是的

# echo -e “1\n1\n2\n一” | sort -u — sort 去除重复则毫不总是

# echo -e “1\n1\n2\n一” | sort -u — sort 去除重复则不用总是

# cut -d: -f七 /etc/passwd | sort | uniq -c —
在sort命令例子的基础上,计算不相同的报到shell出现的次数

# cut -d: -f柒 /etc/passwd | sort | uniq -c —
在sort命令例子的底子上,总计区别的记名shell出现的次数

捌、tr –转换,删除,缩减相同字符

八、tr –转换,删除,缩减相同字符

常用选项:

常用选项:

-d –删除,删除相称到的具备字母

-d –删除,删除相配到的有所字母

-s –缩减,缩减相同字符

-s –缩减,缩减相同字符

格式: tr SET1 SET2

格式: tr SET1 SET2

注意:
把集合1里面包车型客车字符转换来集合第22中学对应地方的字符,所以原则上多少个集聚中的字符数目应该同样,但是,假如多个聚众中的字符数不等于,程序也不会出错,请留心这种情景下的结果。要点:

在意:
把集合1里面包车型客车字符转换成集合第22中学对应地方的字符,所以原则上多个聚众中的字符数目应该同样,不过,借使五个聚众中的字符数不等于,程序也不会出错,请留意那种气象下的结果。要点:

a、 tr
不尊崇多个聚众中是何等字符,它只是不难地把对应地点的字符每个做替换而已、

a、 tr
不尊崇三个聚众中是什么样字符,它只是不难地把对应地点的字符各种做替换而已、

b、 tr 做的是单个字符的交替,不可能替换字符串

b、 tr 做的是单个字符的替换,无法替换字符串

# echo abc | tr a-z A-Z –把贰十五个小写字母转换到相呼应的大写字母

# echo abc | tr a-z A-Z –把二伍个小写字母转换到相对应的大写字母

# echo abc | tr ab BA –把 a 和 b,分别转换为 B 和 A

# echo abc | tr ab BA –把 a 和 b,分别转换为 B 和 A

# echo 好人做好事 | tr 好 坏 — “好” 转换为 “坏”

# echo 好人做好事 | tr 好 坏 — “好” 转换为 “坏”

# echo abcdefg | tr a-z AB
–集合2较短,程序自动用集合第22中学最后三个字符来扩大集合二

# echo abcdefg | tr a-z AB
–集合二较短,程序自动用集合第22中学最终三个字符来扩大集合2

# echo abcdefg | tr a-b A-Z –集合贰较长,程序自动把集合二切短

# echo abcdefg | tr a-b A-Z –集合2较长,程序自动把集合2切短

# echo Abc | tr a-zA-Z A-Za-z –落成英文字母大小反转

# echo Abc | tr a-zA-Z A-Za-z –完成英文字母大小反转

# echo hello world | tr -d ow — -d
删除,匹配到的持有字母

# echo hello world | tr -d ow — -d
删除,相配到的有着字母

# echo 0123456789 | tr -d 13579

# echo 0123456789 | tr -d 13579

# tr -d ‘\01二’ < /etc/passwd — 删除文件/etc/passwd 中的换行符,tr
可用八进制表示3个字符

# tr -d ‘\01贰’ < /etc/passwd — 删除文件/etc/passwd 中的换行符,tr
可用八进制表示一个字符

# echo aabbaacc | tr -s a — -s,将每一种连在1起的多少个 a 缩减至一个

# echo aabbaacc | tr -s a — -s,将各类连在一起的多少个 a 缩减至1个

# echo aabbaacc | tr -s a A — 会晤之后再做转换

# echo aabbaacc | tr -s a A — 集合之后再做转换

九、tac
–把一个依旧多少个文本的內容按順序連接起來,輸出到標準輸出,各样文件中,内容按行号反序打字与印刷

九、tac
–把一个只怕八个文本的內容按順序連接起來,輸出到標準輸出,每种文件中,内容按行号反序打印

# echo -e “111111111\n2222222” > f1

# echo -e “111111111\n2222222” > f1

# echo -e “333333333\n4444444” > f2

# echo -e “333333333\n4444444” > f2

# tac f2 f1

# tac f2 f1

10、rev –把公文中的行左右反转

10、rev –把文件中的行左右反转

# echo -e “1234567\nabcdefg” > test

# echo -e “1234567\nabcdefg” > test

# rev test

# rev test

 

 

五、扩展

五、扩展

1、cat,md5sum

1、cat,md5sum

# echo file1 > file1

# echo file1 > file1

# echo file2 > file二 –成立多少个公文

# echo file二 > file二 –创造七个文本

# md伍sum file壹 file二 –相比他们的 md5 值是不是相同

# md伍sum file1 file二 –相比他们的 md伍 值是或不是1致

# head -c 10m /dev/urandom > bigfile –使用随机设备成立三个 10M
的公文

# head -c 十m /dev/urandom > bigfile –使用随机设备创设四个 10M
的公文

# head -c 3m bigfile > file一 –将前 三M 数据导入 file一

# head -c 三m bigfile > file壹 –将前 3M 数据导入 file壹

# tail -c 肆m bigfile > file三 –将后 三M 数据导入 file三

# tail -c 4m bigfile > file三 –将后 3M 数据导入 file叁

# head -c 陆m bigfile | tail -c 叁m > file贰 –将中间 四M 数据导入 file二

# head -c 6m bigfile | tail -c 三m > file二 –将中等 四M 数据导入 file2

# ls -lh file*

# ls -lh file*

# cat file一 file二 file三 > newbigfile –使用 cat
将多个文件合并到3个新大文件中

# cat file一 file二 file叁 > newbigfile –使用 cat
将多个公文合并到叁个新大文件中

# md五sum newbigfile bigfile –在用命令相比较旧大文件与新大文件的 md5sum

# md伍sum newbigfile bigfile –在用命令相比较旧大文件与新大文件的 md5sum

相关文章