2023-03-19創(chuàng)建悬赏、查看和編輯文本文件

將輸出重定向到文件或程序

  • 標(biāo)準(zhǔn)輸入潜支、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤
    進(jìn)程使用稱為文件描述符的通道來(lái)獲取輸入并發(fā)送輸出。所有進(jìn)程在開始時(shí)至少要有三個(gè)文件描述符:標(biāo)準(zhǔn)輸入(通道0)從鍵盤上讀取輸入浅悉;標(biāo)準(zhǔn)輸出(通道1)將正常輸出發(fā)送到終端趟据;標(biāo)準(zhǔn)錯(cuò)誤(通道2)將錯(cuò)誤消息發(fā)送到終端
    通道(文件描述符)
    -- 0 stdin 標(biāo)準(zhǔn)輸入 鍵盤 僅讀取
    -- 1 stdout 標(biāo)準(zhǔn)輸出 終端 僅寫入
    -- 2 stderr 標(biāo)準(zhǔn)錯(cuò)誤 終端 僅寫入
]# ls -l /dev/std*
lrwxrwxrwx. 1 root root 15 Mar 14 17:15 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Mar 14 17:15 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 Mar 14 17:15 /dev/stdout -> /proc/self/fd/1
  • 將輸出重定向到文件
    重定向stdout可以阻止進(jìn)程輸出顯示在終端上。stdout不會(huì)阻止stderr錯(cuò)誤消息顯示在終端上术健。如果文件不存在汹碱,則會(huì)創(chuàng)建文件;如果文件確實(shí)存在荞估,但是所需的重定向沒(méi)有附加到文件咳促,則該文件的內(nèi)容將被覆蓋。如果想要丟棄消息勘伺,特殊文件/dev/null以靜默的方式丟棄重定向到其自身的通道輸出跪腹,并且始終是空文件。
    輸出重定向操作符:
    -- > file 重定向stdout以覆蓋文件
    -- >> file 重定向stdout以附加到文件
    -- 2> file 重定向stderr以覆蓋文件
    -- 2> /dev/null 將stderr錯(cuò)誤消息重定向到/dev/null飞醉,從而將它丟棄
    -- > file 2>&1或& > file 重定向stdin和stderr以覆蓋同一個(gè)文件
    -- >> file 2>&1或&>> file 重定向stdin和stderr附加到同一個(gè)文件
#將命令的輸出重定向到某個(gè)文件中
[user@serverb ~]$ date >/tmp/saved-timestamp
[user@serverb ~]$ cat /tmp/saved-timestamp
Sat Mar 18 14:33:08 CST 2023
#將命令的錯(cuò)誤消息重定向到某個(gè)文件中尺迂,標(biāo)準(zhǔn)輸出默認(rèn)輸出在終端
[user@serverb ~]$ find /etc/ -name passwd 2> /tmp/errors
/etc/passwd
/etc/pam.d/passwd
[user@serverb ~]$ cat /tmp/errors
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/selinux/targeted/active’: Permission denied
find: ‘/etc/selinux/final’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/audisp’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
#將命令的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤分別重定向到兩個(gè)不同的文件中
[user@serverb ~]$ find /etc/ -name passwd > /tmp/output 2> /tmp/errors
[user@serverb ~]$ cat /tmp/output /tmp/errors
/etc/passwd
/etc/pam.d/passwd
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/selinux/targeted/active’: Permission denied
find: ‘/etc/selinux/final’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/audisp’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
#將標(biāo)準(zhǔn)輸出重定向到某個(gè)文件中,標(biāo)準(zhǔn)錯(cuò)誤直接忽略
[user@serverb ~]$ find /etc/ -name passwd > /tmp/output 2> /dev/null
[user@serverb ~]$ cat /tmp/output
/etc/passwd
/etc/pam.d/passwd
#將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤一并重定向到文件中
[user@serverb ~]$ find /etc/ -name passwd &> /tmp/saved-both
[user@serverb ~]$ cat /tmp/saved-both
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
/etc/passwd
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/selinux/targeted/active’: Permission denied
find: ‘/etc/selinux/final’: Permission denied
/etc/pam.d/passwd
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/audisp’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
#將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤追加到現(xiàn)有的文件中
[user@serverb ~]$ find /etc/ -name passwd >> /tmp/saved-both 2>&1

構(gòu)建管道

管道是一個(gè)或多個(gè)命令的序列冒掌,用豎線字符(|)分隔噪裕。管道將第一個(gè)命令的標(biāo)準(zhǔn)輸出連接到下一個(gè)命令的標(biāo)準(zhǔn)輸入

#查看最近更新的是個(gè)文件并重定向到文件中
[user@serverb etc]$ ls -tl  | head -10 >/tmp/ten-last-change-file
[user@serverb etc]$ cat /tmp/ten-last-change-file
total 1100
-rw-r--r--.  1 root root     58 Mar 14 16:21 subgid
-rw-r--r--.  1 root root     58 Mar 14 16:21 subuid
----------.  1 root root    408 Mar 14 16:21 gshadow
-rw-r--r--.  1 root root    518 Mar 14 16:21 group
----------.  1 root root    766 Mar 14 16:21 shadow
-rw-r--r--.  1 root root    976 Mar 14 16:21 passwd
-rw-r--r--.  1 root root  22607 Mar 14 10:34 ld.so.cache
----------.  1 root root    737 Mar 13 21:09 shadow-
-rw-r--r--.  1 root root    503 Mar 13 20:49 group-
  • tee命令
    當(dāng)重定向和管道重合時(shí),shell會(huì)首先設(shè)置整個(gè)管道股毫,然后重定向輸入/輸出膳音。如果管道的中間使用了輸出重定向,則輸出將轉(zhuǎn)至文件铃诬,而不是下一個(gè)前往管道中的下一個(gè)命令
#終端上沒(méi)有任何輸出
[user@serverb glob]$ ls -l >/tmp/files | less
#如果使用了tee命令祭陷,終端會(huì)有文件的內(nèi)容
[user@serverb glob]$ ls -l | tee /tmp/files | less
#管道末尾使用tee命令,則可以保存命令的最終輸出并且同時(shí)輸出到終端
[user@serverb etc]$ ls -tl |head -n 10 | tee /tmp/last-files
total 1100
-rw-r--r--.  1 root root     58 Mar 14 16:21 subgid
-rw-r--r--.  1 root root     58 Mar 14 16:21 subuid
----------.  1 root root    408 Mar 14 16:21 gshadow
-rw-r--r--.  1 root root    518 Mar 14 16:21 group
----------.  1 root root    766 Mar 14 16:21 shadow
-rw-r--r--.  1 root root    976 Mar 14 16:21 passwd
-rw-r--r--.  1 root root  22607 Mar 14 10:34 ld.so.cache
----------.  1 root root    737 Mar 13 21:09 shadow-
-rw-r--r--.  1 root root    503 Mar 13 20:49 group-

vim編輯器

最小化安裝的Linux系統(tǒng)沒(méi)有vim編輯器趣席,需要安裝vim-minimal軟件包兵志。vim編輯器是隨Linux和unix系統(tǒng)分發(fā)的vi編輯器改進(jìn)的,功能特別強(qiáng)大宣肚。
如果文件不存在想罕,則vim可以新建文件
編輯器的三種模式:
命令模式 插入模式 末行模式
命-----按i鍵-----插入模式(按ESC鍵回到命令模式)


式-----按:鍵-----末行模式(按ESC鍵回到命令模式)
命令模式下復(fù)制、粘貼:
復(fù)制1行(yy)霉涨、復(fù)制3行(3yy)
粘貼到當(dāng)前行之后(p)
命令模式下刪除:
刪除單個(gè)字符(x)
刪除到行首(d^)按价、刪除到行尾(d$)
刪除1行(dd)、刪除3行(3dd)
命令模式下查找關(guān)鍵字:
搜索(/word) 切換結(jié)果(n笙瑟、N)
補(bǔ)充:在命令模式下大寫的C楼镐,可以刪除光標(biāo)之后,并且進(jìn)入輸入模式

  • vim的可視模式
    可視模式是一種突出顯示和操作文本的絕佳方式往枷;最明顯的就是在生產(chǎn)環(huán)境中修改配置文件(可批量取消注釋和批量添加注釋)
    -- 操作方法:
    添加注釋:
    1.將光標(biāo)放在要注釋首行的行首CTRL+v進(jìn)入可視模式
    2.向下移動(dòng)光標(biāo)框产,選中要添加注釋的行
    3.按下shift+i鍵凄杯,并輸入#
    4.按下ESC鍵,過(guò)后就批量注釋了
    取消注釋:
    1.將光標(biāo)移動(dòng)到要取消注釋的首行的行首CTRL+v進(jìn)入可視模式
    2.向下移動(dòng)光標(biāo)秉宿,選中要取消注釋的行
    3.按下shift+x戒突,即可取消注釋

更改shell環(huán)境

bash shell允許設(shè)置shell變量,你可以使用這些變量來(lái)幫助運(yùn)行命令和修改shell的行為蘸鲸。還可以將shell變量導(dǎo)出為環(huán)境變量妖谴,他們會(huì)在程序啟動(dòng)時(shí)自動(dòng)復(fù)制到從該shell運(yùn)行的程序中

  • 使用變量
    變量定義的命名規(guī)則:可以包含大寫或小寫字母、數(shù)字和下劃線
#定義一個(gè)變量
[user@serverb ~]$ variablename=value
#可以使用$來(lái)引用變量
[user@serverb ~]$ echo $variablename
value
#使用unset取消一個(gè)變量
[user@serverb ~]$ unset variablename

使用set命令列出當(dāng)前設(shè)置的所有shell變量

#定義一個(gè)變量酌摇,就能在set命令的最后看到所定義的變量
[user@serverb ~]$ set | less
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
... ...
  • 使用shell變量配置bash
    -- 例子1:history命令是顯示當(dāng)前用戶所執(zhí)行的歷史命令,有兩個(gè)shell變量定義HISTFILE(歷史命令存放的文件)和HISTFILESIZE(定義歷史命令的條數(shù))
[user@serverb ~]$ echo $HISTFILE
/home/user/.bash_history
[user@serverb ~]$ echo $HISTFILESIZE
1000

擴(kuò)展:如何將history顯示的內(nèi)容加上日期時(shí)間

vim ~/.bashrc
#在文件最后一行添加
HISTTIMEFORMAT="%F %T "
#加載配置文件
source ~/.bashrc
#展示
[user@serverb ~]$ history | head -1
    1  2023-03-18 14:32:31 date

-- 例子2:PS1變量顯示的是shell提示符的格式

[user@serverb ~]$ echo $PS1
[\u@\h \W]\$
#可以修改
vim ~/.bashrc
#添加變量
PS1="[\u@\h \t \W]\$"
source ~/.bashrc
#提示符變了
[user@serverb 17:03:53 ~]$

使用環(huán)境變量配置程序

以上的HISTFILE和HISTFILESIZE膝舅、PS1不需要導(dǎo)出為環(huán)境變量,因?yàn)樗鼈儍H僅供shell本身使用窑多,而不由從該shell運(yùn)行的程序使用仍稀。

#例如修改語(yǔ)言
[user@serverb 17:18:20 ~]$echo $LANG
en_US.UTF-8
[user@serverb 17:18:39 ~]$export LANG=zh_CN.utf8
[user@serverb 17:18:53 ~]$date
2023年 03月 18日 星期六 17:18:55 CST
#env命令可查案shell的所有環(huán)境變量
[user@serverb 17:31:56 ~]$env
XDG_SESSION_ID=31
HOSTNAME=serverb
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
USER=user
... ...
  • 重要的環(huán)境變量PATH
    PATH變量是一個(gè)含有程序目錄的冒號(hào)分隔列表
[user@serverb 17:25:15 ~]$echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin

當(dāng)運(yùn)行l(wèi)s等命令是,shell會(huì)按照順序逐一在這些命令中查找可執(zhí)行文件ls埂息,并且運(yùn)行它找到的第一個(gè)匹配的文件

#自己創(chuàng)建一個(gè)命令
[user@serverb 17:30:05 ~]$vim aiguo
[user@serverb 17:30:47 ~]$bash aiguo
i love you
[user@serverb 17:30:51 ~]$chmod +x aiguo
[user@serverb 17:31:11 ~]$./aiguo
i love you
[user@serverb 17:31:16 ~]$pwd
/home/user
#將腳本所在目錄添加到環(huán)境變量中
[user@serverb 17:31:24 ~]$export PATH=$PATH:/home/user
[user@serverb 17:31:53 ~]$aiguo
i love you

自動(dòng)設(shè)置環(huán)境變量

  • 按照慣例技潘,shell自動(dòng)設(shè)置的環(huán)境變量和shell變量具有使用全部大寫字母的名稱。如果要設(shè)置自己的變量千康,可能需要使用由小寫字符組成的名稱來(lái)幫助避免命名沖突享幽。
  • 如果希望在shell啟動(dòng)時(shí)自動(dòng)設(shè)置shell或環(huán)境變量,可以編輯bash啟動(dòng)腳本拾弃。啟動(dòng)bash時(shí)值桩,會(huì)運(yùn)行幾個(gè)包含shell命令的文本文件,以初始化shell環(huán)境豪椿。
    重要:
    在Linux中奔坟,以下是四個(gè)常見(jiàn)的shell配置文件及其作用和區(qū)別:

1./etc/profile:系統(tǒng)級(jí)別的全局配置文件,對(duì)所有用戶都生效搭盾。在用戶登錄時(shí)咳秉,該文件會(huì)被讀取并執(zhí)行,設(shè)置一些系統(tǒng)級(jí)別的環(huán)境變量鸯隅、別名澜建、PATH等。一般不建議在該文件中添加個(gè)人的配置信息滋迈,因?yàn)檫@會(huì)影響所有用戶霎奢。

2./etc/bashrc:系統(tǒng)級(jí)別的bash shell配置文件,同樣對(duì)所有用戶都生效饼灿。在用戶打開新的終端時(shí),該文件會(huì)被讀取并執(zhí)行帝美,設(shè)置一些系統(tǒng)級(jí)別的別名碍彭、環(huán)境變量等。一般也不建議在該文件中添加個(gè)人的配置信息。

3.~/.bash_profile:用戶級(jí)別的bash shell配置文件庇忌,僅對(duì)當(dāng)前用戶生效舞箍。在用戶登錄時(shí),該文件會(huì)被讀取并執(zhí)行皆疹,設(shè)置個(gè)人的環(huán)境變量疏橄、PATH、別名等略就。一些基于bash的系統(tǒng)捎迫,如macOS,默認(rèn)會(huì)在用戶主目錄下創(chuàng)建該文件表牢,以便用戶自定義shell配置窄绒。

4.~/.bashrc:用戶級(jí)別的bash shell配置文件,僅對(duì)當(dāng)前用戶生效崔兴。在用戶打開新的終端時(shí)彰导,該文件會(huì)被讀取并執(zhí)行,設(shè)置個(gè)人的別名敲茄、環(huán)境變量位谋、shell函數(shù)等。該文件是用戶自定義shell配置的主要文件堰燎,經(jīng)常用于設(shè)置個(gè)人的命令別名掏父、修改提示符等。
總的來(lái)說(shuō)爽待,系統(tǒng)級(jí)別的配置文件作用于所有用戶损同,個(gè)人級(jí)別的配置文件僅作用于當(dāng)前用戶。在修改這些配置文件時(shí)鸟款,建議備份原有的文件膏燃,并確保修改不會(huì)影響系統(tǒng)的正常運(yùn)行。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末何什,一起剝皮案震驚了整個(gè)濱河市组哩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌处渣,老刑警劉巖伶贰,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異罐栈,居然都是意外死亡黍衙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門荠诬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)琅翻,“玉大人位仁,你說(shuō)我怎么就攤上這事》阶担” “怎么了聂抢?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)棠众。 經(jīng)常有香客問(wèn)我琳疏,道長(zhǎng),這世上最難降的妖魔是什么闸拿? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任空盼,我火速辦了婚禮,結(jié)果婚禮上胸墙,老公的妹妹穿的比我還像新娘我注。我一直安慰自己,他們只是感情好迟隅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布但骨。 她就那樣靜靜地躺著,像睡著了一般智袭。 火紅的嫁衣襯著肌膚如雪奔缠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天吼野,我揣著相機(jī)與錄音校哎,去河邊找鬼。 笑死瞳步,一個(gè)胖子當(dāng)著我的面吹牛闷哆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播单起,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抱怔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了嘀倒?” 一聲冷哼從身側(cè)響起屈留,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎测蘑,沒(méi)想到半個(gè)月后灌危,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碳胳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年勇蝙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挨约。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浅蚪,死狀恐怖藕帜,靈堂內(nèi)的尸體忽然破棺而出烫罩,到底是詐尸還是另有隱情惜傲,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布贝攒,位于F島的核電站盗誊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏隘弊。R本人自食惡果不足惜哈踱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梨熙。 院中可真熱鬧开镣,春花似錦、人聲如沸咽扇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)质欲。三九已至树埠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘶伟,已是汗流浹背怎憋。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留九昧,地道東北人绊袋。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像铸鹰,于是被迫代替她去往敵國(guó)和親癌别。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容