管道重定向筆記作業

 

標準i/o和管道

Vim f1

[root@centos7~]#]ps aux|grep vim

root ?????10967(進程編號)??0.1 ?0.4 151196 ?4828 pts/0 ???S+ ??11:10 ??0:00 vim f1

root ?????11028 ?0.0 ?0.0 112660 ??968 pts/1 ???R+ ??11:10 ??0:00 grep –color=auto vim

 

[root@centos7~]#]ls /proc/10967/fd/ -l

total 0

lrwx——. 1 root root 64 Nov 18 11:11 0 -> /dev/pts/0 0是標準輸入

lrwx——. 1 root root 64 Nov 18 11:11 1 -> /dev/pts/0 1是標準輸出

lrwx——. 1 root root 64 Nov 18 11:10 2 -> /dev/pts/0 2是標準錯誤輸出

lrwx——. 1 root root 64 Nov 18 11:11 3 -> /root/.f1.swp //并沒有真正打開f1文件,而是在/root下創建了一個.f1.swp的文件,.f1.swp關閉,才會真正存到f1文件中。

[root@centos7~]#]ls -a

. ???????????????.bash_logout ??.dbus ?????.f1.swp ??????????????Music ?????Videos

 

標準輸出重定向

> //>或<必須跟文件名。

[root@centos7~]#]ls > /dev/pts/2 //ls命令結果輸出到/dev/pts/2(終端窗口)來顯示

[root@centos7~]#]tree -d /etc/ > /app/tree.log //標準輸出重定向到文件中

[root@centos7~]#]ls > /app/tree.log //文件內容被ls命令結果覆蓋

[root@centos7~]#]cat /app/tree.log

[root@centos7~]#echo “My hostname is `hostname`” > /app/system.log //uname -r系統版本

[root@centos7~]#]cat /app/system.log

My hostname is centos7 主機名

>> //追加

>> //創建新文件

 

[root@centos7~]#]hostname > f1

[root@centos7~]#]cat f1

centos7

[root@centos7~]#]set -C //禁止覆蓋

[root@centos7~]#]ls > f1

-bash: f1: cannot overwrite existing file

[root@centos7~]#]ls >> f1 //可以追加

[root@centos7~]#]echo xxxx >| f1 //強制覆蓋

[root@centos7~]#]set +C //允許覆蓋

[root@centos7~]#]> f1

 

 

標準錯誤重定向

2>

[root@centos7~]#]ls nonono 2> f1

[root@centos7~]#]cat f1

ls: cannot access nonono: No such file or directory

 

正確結果和錯誤結果同時輸出

[root@centos7~]#]ls nononon anaconda-ks.cfg &> f1 //新寫法

[root@centos7~]#]cat f1

ls: cannot access nononon: No such file or directory

anaconda-ks.cfg

 

[root@centos7~]#]( error;hostname ) > f1 2>&1 //把錯誤的結果轉換成正確的結果輸出,2>&1放在命令后邊。1>&2正確轉換錯誤

[root@centos7~]#]cat f1

bash: error: command not found…

centos7

(echo error 1>&2)> /dev/null //打印出error,>重定向正確結果。

(echo error 1>&2)2> /dev/null //錯誤結果放垃圾箱,2>重定向錯誤結果

 

[root@centos7~]#](errcmd;hostname) 2>&1 > f1 //注意2>&1放的位置

bash: errcmd: command not found…

[root@centos7~]#]( (errcmd;hostname)2>&1) > f1 //((errcmd;hostname) > f1 2>&1

[root@centos7~]#]cat f1

bash: errcmd: command not found…

centos7

 

 

[root@centos7~]#](ls;pwd;hostname) >> f1 //批量輸出重定向加括號

[root@centos7~]#]( error;hostname ) &> f1 //正確和錯誤的信息都放到f1里

[root@centos7~]#]( error;hostname ) &>> f1 //正確和錯誤的信息累加到f1里

((errcmd;hostname) >> f1 2>&1 //正確和錯誤的信息累加到f1里

[root@centos7~]#]( error;hostname ) > f1 2> f2 //正確的結果放f1,錯誤結果放f2

[root@centos7~]#]cat f2

bash: error: command not found…

[root@centos7~]#]cat f1

centos7

 

ll /dev/null //垃圾箱

[root@centos7~]#]ls > /dev/null //結果指向垃圾箱不進行顯示

[root@centos7~]#]rpm -i /misc/cd/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm &> /dev/null

 

 

 

 

tr命令(轉換和刪除字符)

[root@centos7~]#]tr 1 a

123124121212312

a23a24a2a2a23a2

 

[root@centos7~]#]tr -t 123 ab //-t截斷

12345123

ab345ab3

 

[root@centos7~]#]tr ‘1-9’ ‘a-i’

122389345645

abbchicdefde

 

[root@centos7/app]#]tr -s ‘a’ //壓縮重復字符

aassddfffaasaaaadfffaaaffwe

assddfffasadfffaffwe

 

[root@centos7/app]#]tr -sc ‘a’ //-c除了a,都壓縮

aaddssfffddddeegg

aadsfdeg

 

[root@centos7/app]#]tr -dc ‘a’ //除了a全刪,結束命令按Ctrl+d。

aaafsfsfdsdfwefaafsdfsdfagwrgr

werefwefwe

sdff

aaaaaaaa[root@centos7/app]#]

 

[root@centos7/app]#]tr -dc ‘a\n’ //除了a和換行全刪,保留a和換行。回車即執行

asfdasfasf

aaa

 

[root@centos7/app]#]tr ‘\n’ ‘\t’ < f1

aaa bbb ccc ddd [root@centos7/app]#]tr ‘\n’ ‘\v’ < f1

aaa

bbb

ccc

ddd

[root@centos7/app]#]

 

[root@centos7/app]#]tr ‘a-z’ ‘A-Z’ < fstab //標準輸入重定向,fstab文件中小寫字母轉換為大寫。

[root@centos7/app]#]tr -d ‘a-z’ < fstab //刪除fstab文件中小寫字母

[root@centos7/app]#]tr -d ‘a-z’ < fstab >f1 //刪除fstab文件中小寫字母,并且輸出重定向到f1。不可輸出到源文件fstab。

 

[root@centos7/app]#]tr -d ‘\n’ < f1 //刪除f1文件中的換行

aaabbbcccddd[root@centos7/app]#]

 

Windows和linux文本轉換

Rz //win to linux

Sz //linux to win

[root@centos7/app]#]hexdump -C win.txt //16進制查看,0a換行,0d回車

00000000 ?61 0d 0a 62 0d 0a 63 ?????????????????????????????|a..b..c|

00000007

 

[root@centos7/app]#]cat -A win.txt

a^M$ a=61,0d=^M(回車),0a=$(換行)

b^M$

 

[root@centos7/app]#]hexdump -C linux.txt //linux沒有回車。

00000000 ?61 0a 62 0a 63 0a 0a ?????????????????????????????|a.b.c..|

00000007

[root@centos7/app]#]tr -d ‘\r’ < win.txt > newwin.txt //把回車刪掉

[root@centos7/app]#]hexdump -C newwin.txt

00000000 ?61 0a 62 0a 63 ???????????????????????????????????|a.b.c|

00000005

[root@centos7/app]#]hexdump -c win.txt

0000000 ??a ?\r ?\n ??b ?\r ?\n ??c

0000007

 

[root@centos7/app]#]dos2unix win.txt

dos2unix: converting file win.txt to Unix format …

[root@centos7/app]#]hexdump -c win.txt

0000000 ??a ?\n ??b ?\n ??c

0000005

 

[root@centos7/app]#]unix2dos win.txt

unix2dos: converting file win.txt to DOS format …

[root@centos7/app]#]hexdump -c win.txt

0000000 ??a ?\r ?\n ??b ?\r ?\n ??c

0000007

 

練習 v

1、將/etc/issue文件中的內容轉換為大寫后保存至/tmp/issue.out文件中 v 2、將當前系統登錄用戶的信息轉換為大寫后保存至/tmp/who.out文件中 v

3、一個linux用戶給root發郵件,要求郵件標題為”help”,郵件正文如下: Hello, I am 用戶名,The system version is here,please help me to check it ,thanks! 操作系統版本信息 v

4、將/root/下文件列表,顯示成一行,并文件名之間用空格隔開 v 5、計算1+2+3+..+99+100的總和 v

6、刪除Windows文本文件中的‘^M’字符 v

7、處理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的數字 和空格 v

8、將PATH變量每個目錄顯示在獨立的一行 v

9、將指定文件中0-9分別替代成a-j v

10、將文件中每個單詞(由字母組成)顯示在獨立的一行,并無空行

1:[root@centos7/app]#]tr ‘a-z’ ‘A-Z’ < /etc/issue >/tmp/issue.out

[root@centos7/app]#]tr ‘[:lower:]’ ‘[:upper:]’ < /etc/issue >/tmp/issue.out

2:[root@centos7/app]#]who | tr ‘[:lower:]’ ‘[:upper:]’ > /tmp/who.out

3:[root@centos7~]#mail -s help root <<end

hello .i am `whoami^$USER`,

the system version is here ,pleade help me to check it,thanks!

`cat /etc/redhat-release“uname -r`

end

You have mail in /var/spool/mail/root

hello .i am root,

the system version is here ,pleade help me to check it,thanks!

CentOS Linux release 7.4.1708 (Core)

4:[root@centos7~]#]ls | tr ‘\n’ ‘ ‘ > /app/ls.out

5:[root@centos7~]#]echo {1..100}|tr ‘ ‘ ‘+’ |bc

[root@centos7~]#]seq -s “+” 1 100 ?|bc

6: ??tr -d ‘\r’?< win.txt > new.txt \\ tr?-d ’\15’?< win.txt >new.txt//\15代表八進制的回車dos2unix unix2dos

[root@centos7/app]#]hexdump -C new.txt

00000000 ?61 0a 62 0a 63 ???????????????????????????????????|a.b.c|

00000005

7:[root@centos7/app]#]echo ‘xt.,l 1 jr#new.txtmn 2 c*/fe 3 uz 4’ | tr -dc ‘0-9[:space:]’ //[:digit:]數字

8:[root@centos7/app]#]echo $PATH | tr ‘:’ ‘\n’

9:[root@centos7/app]#]tr ‘0-9’ ‘a-j’ < list.txt

10:[root@centos7/app]#]tr -sc ‘a-zA-Z’ ‘\n’ < ?/etc/centos-release

[root@centos7/app]#]tr -dc ‘a-zA-Z ‘ ?< ?/etc/centos-release |tr -s ‘ ‘ ‘\n’

 

 

<<EOF //多行重定向

發郵件

Mail -s “h1”?root < mail.txt

Mail -s “h2”?root << end

[root@centos7~]#]cat /var/spool/mail/ //郵件存放地址

[root@centos7~]#]cat mail.txt|mail -s h3 root

 

[root@centos7~]#]cat > f1 << end

Heretest 就地文本

 

錯誤命令通過管道執行,轉換成正確結果

[root@centos7~]#]error 2>&1 |tr ‘a-z’ ‘A-Z’ //不能用&>

[root@centos7~]#]error |& tr ‘a-z’ ‘A-Z’ //新方法,|&

分頁顯示:

[root@centos7~]#]ls -R /etc/ |less

[root@centos7~]#]ls -R /etc/ |more

 

Lpr:把輸入發送給打印機

Echo “test print”?| lpr -P printer_name

 

管道中-符號

示例:

將 /home 里面的文件打包,但打包的數據不是記錄到文件,而是傳送到 stdout,經過管道后,將 tar -cvf – /home 傳送給后面的 tar -xvf – , 后面的這個 – 則是取前一個命令的stdout, 因此,就不需要使用臨時file了

Tar -cvf – /home | tar -xvf –

 

[root@centos7~]#]ls |tee ls.out //重定向到文件并且在屏幕打印,默認覆蓋性的。

[root@centos7~]#]who |tee ls.out

[root@centos7~]#]hostname |tee -a ls.out //-a追加新內容

[root@centos7~]#]hostname |tee -a ls.out | tr a-z A-Z

[root@centos7~]#]who | tee who.out| grep root

 

給文件分配文件描述符

[root@centos7/app]#]exec 8<> f1

[root@centos7/app]#]ls /proc/$$/fd/ -l

total 0

lrwx——. 1 root root 64 Nov 18 11:10 0 -> /dev/pts/1

lrwx——. 1 root root 64 Nov 18 11:10 1 -> /dev/pts/1

lrwx——. 1 root root 64 Nov 18 11:10 2 -> /dev/pts/1

lrwx——. 1 root root 64 Nov 18 16:32 255 -> /dev/pts/1

lrwx——. 1 root root 64 Nov 18 16:32 8 -> /app/f1 // 軟鏈接

[root@centos7/app]#]cat f1

\S

Kernel \r on an \m

[root@centos7/app]#]cat /proc/$$/fd/8

\S

Kernel \r on an \m

[root@centos7/app]#]echo XXXXXXXXXX >> /proc/$$/fd/8 //8和f1是同一個文件。

[root@centos7/app]#]cat /proc/$$/fd/8

\S

Kernel \r on an \m

XXXXXXXXXX

 

[root@centos7/app]#]exec 8>- //8重定向成-,

[root@centos7/app]#]ll /proc/$$/fd/8

l-wx——. 1 root root 64 Nov 18 16:32 /proc/10987/fd/8 -> /app/-

 

[root@centos7/app]#]exec 8>&- //取消8和文件名的映射關系

[root@centos7/app]#]ll /proc/$$/fd/8

ls: cannot access /proc/10987/fd/8: No such file or directory

 

Exec是內部命令

Help exec

 

 

 

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88702

(1)
yanzhenguoyanzhenguo
上一篇 2017-11-19
下一篇 2017-11-20

相關推薦

  • 實現CenOS7網卡名傳統方式

    網卡命令:理念 CentOS 6之前,網絡接口使用連續號碼命名:eth0、eth1等,當 增加或刪除網卡時,名稱可能會發生變化 CentOS 7使用基于硬件,設備拓撲和設置類型命名: (1) 網卡命名機制 systemd對網絡設備的命名方式 (a) 如果Firmware或BIOS為主板上集成的設備提供的索引信 息可用,且可預測則根據此索引進行命名, 例如en…

    Linux干貨 2017-12-19
  • yum命令的用法

    1.列出所有可更新的軟件清單命令:yum check-update 2.安裝所有更新軟件命令:yum update 3.僅安裝指定的軟件命令:yum install <package_name> 4.僅更新指定的軟件命令:yum update <package_name> 5.列出所有可安裝的軟件清單命令:yum list 用YUM安…

    Linux干貨 2017-08-11
  • 腳本練習

    注:以下腳本練習實驗都是以root用戶身份執行的,若普通用戶運行需要另加相應的權限 1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。 [root@fengl bin]# vim systeminfo.sh [roo…

    Linux干貨 2016-08-15
  • 第一次測試

    1.第一層  video  視頻 2.第二層  audio  音頻 3.第三層  字幕 查看視頻詳細信息 ffmpeg -i 視頻文件 轉碼修改視頻格式 ffmpeg -i 輸入文件   輸出文件格式 視頻文件中提取音頻和視頻 提取視頻中的音頻 ffmpeg -i CP0454900262.ts -…

    Linux干貨 2017-02-06
  • FHS文件系統各目錄及功能

    FHS即:filesystem hierarchy standard 的縮寫,意思是文件系統目錄標準,Linux系統采用這種文件組織形式,這是一種樹形結構組織文件。如下圖, /bin : 此文件用于放置二進制執行文件。 在/bin底下的指令可以被root與一般賬號所使用,主要有:cat, chmod, chown, date, mv, mkdir,…

    Linux干貨 2016-10-17
  • bash腳本編程基礎知識

    shell腳本語言編程之bash shell簡介 什么是shell:     shell是Linux的用戶界面,提供了用戶與內核進行交互的接口,他接收了用戶的指令,并將指令送入內核去執行     shell即是一種高級程序語言,也是一種命令解析語言   &nb…

    Linux干貨 2016-08-15
欧美性久久久久