『Linux 干貨』#2 高級的Shell與文件管理(簡明)

訪問博客查看 本文 排版更美觀ヾ(?ω?`)o

Linux 系列學(xué)習(xí)筆記:

在前文的基礎(chǔ)上判耕,記錄了 Linux 中如何充分利用 Shell 命令舌剂,以及對文件權(quán)限的管理版确。

本文部分內(nèi)容參考了清華 ZAH 同學(xué)的教程菩暗,部分參考了 劉遄 老師的《Linux 就該這么學(xué)》,菜鳥教程-Linux鞍匾。

高級的 Shell

Linux 中可以將簡單的 Shell 命令組合以發(fā)揮更大的作用瞳氓,常見的如:與文件讀寫操作有關(guān)的重定向技術(shù)送粱、處理命令輸出值的管道命令符、通配符和轉(zhuǎn)義字符等时捌。這些技巧在 Shell 腳本批處理中十分常用怒医。

輸入輸出重定向

輸入重定向是指把文件導(dǎo)入到命令中,而輸出重定向則是指把原本要輸出到屏幕的數(shù)據(jù)信息寫入到指定文件中奢讨。

日常的學(xué)習(xí)和工作中稚叹,使用輸出重定向的頻率更高,所以又將輸出重定向分為了標準輸出重定向和錯誤輸出重定向兩種不同的技術(shù)拿诸,以及覆蓋寫入追加寫入兩種模式扒袖。

錯誤信息的輸出對于執(zhí)行一個自動化的 Shell 腳本非常有用,它可以把整個腳本執(zhí)行過程中的報錯信息都記錄到文件中佳镜,便于安裝后的排錯工作僚稿。

對于輸入重定向,格式如下:

格式 功能
命令 < 文件 將文件作為命令的標準輸入
命令 << 分界符 從鍵盤輸入中讀入蟀伸,直到遇見分界符才停止
命令 < 文件A > 文件B 將文件 A 作為命令的輸入并將標準輸出到文件 B

通常用輸入重定向能做的事情蚀同,直接執(zhí)行該命令也能做缅刽,因此使用頻率較低。

對于輸出重定向蠢络,格式如下:

格式 功能
命令 > 文件 將標準輸出重定向到一個文件中(清空原有文件的數(shù)據(jù))
命令 2> 文件 將錯誤輸出重定向到一個文件中(清空原有文件的數(shù)據(jù))
命令 >> 文件 將標準輸出重定向到一個文件中(追加到原有內(nèi)容的后面)
命令 2>> 文件 將錯誤輸出重定向到一個文件中(追加到原有內(nèi)容的后面)

管道命令符

管道命令符 | 用于把前一個命令原本要輸出到屏幕的信息當(dāng)作后一個命令的標準輸入衰猛,就像一個「管道」連接了兩條命令一樣,其本質(zhì)是創(chuàng)建一個臨時文件用以讀寫刹孔。

下面用一些例子來展示管道命令符的巧妙之處:

$ grep /sbin/nologin /etc/passwd | wc -l    # 抓取文件中含 /sbin/nologin 的行啡省,統(tǒng)計行數(shù)
$ ls -lah /etc/ | more                      # 羅列目錄下的文件信息,用翻頁的形式查看
$ ls -lah usr/bin | grep echo               # 羅列目錄下的文件信息髓霞,抓取 echo 文件
$ ps aux | grep bash                        # 顯示全部進程卦睹,抓取 bash 的進程信息

此外,管道命令符在一條命令中還可以多次復(fù)用方库,完成更復(fù)雜的工作结序。

但是,由于管道運算符實現(xiàn)的本質(zhì)纵潦,它默認會將前者的輸出作為一整個臨時文件傳給后者徐鹤,而有時候我們卻需要拆散這個文件,依次輸入到后者邀层,這時就需要這個命令:

  • xargs:代表 eXtended ARGuments返敬,管道命令傳遞參數(shù)的一個過濾器,格式為:命令1 | xargs [參數(shù)] 命令2寥院。

通配符

在 Git 學(xué)習(xí)中劲赠,已經(jīng)介紹了一些常用的通配符,這里附上完整表格:

通配符 含義
* 任意字符
? 單個任意字符
[a-z] 單個小寫字母
[A-Z] 單個大寫字母
[a-Z] 單個字母
[0-9] 單個數(shù)字
[[:alpha:]] 任意字母
[[:upper:]] 任意大寫字母
[[:lower:]] 任意小寫字母
[[:digit:]] 所有數(shù)字
[[:alnum:]] 任意字母加數(shù)字
[[:punct:]] 標點符號

轉(zhuǎn)義字符

轉(zhuǎn)義字符通常用于避免命令的歧義只磷,最常用的有如下幾種:

  • 反斜杠 \:使反斜杠后面的一個保留字符變?yōu)閱渭兊淖址?/li>
  • 單引號 ‘’:轉(zhuǎn)義其中所有的變量為單純的字符串经磅。
  • 雙引號 “”:保留其中的變量屬性,不進行轉(zhuǎn)義處理钮追。

環(huán)境變量

回歸一個最本質(zhì)的問題预厌,當(dāng)我們在 Shell 環(huán)境中輸入一條命令時(我們知道這條命令其實是一個 C 編寫的程序),Shell 是如何找到這個程序的呢元媚?

首先轧叽,Shell 會用戶是否以絕對路徑或相對路徑的方式輸入命令(如 /bin/ls),如果是絕對路徑則直接執(zhí)行刊棕。如果不是炭晒,系統(tǒng)則需要在多個路徑中查找用戶輸入的命令文件,而定義這些路徑的變量就叫作 PATH甥角。我們可以通過如下命令來查看:

$ echo $PATH  # 符號 $ 表示輸出環(huán)境變量的值
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin

可以看到网严,PATH 文件中含有多個量,都是這條命令可能存放的位置嗤无,于是解釋器會在這些位置中逐個查找震束。

當(dāng)然怜庸,為了 Linux 這樣龐大系統(tǒng)的運行,類似的環(huán)境還有許多垢村,我們可以使用 env 命令來查看所有環(huán)境變量割疾。這里列出常用的一些變量:

變量名稱 含義
HOME 用戶的主目錄(即家目錄)
SHELL 用戶在使用的 Shell 解釋器名稱
HISTSIZE 輸出的歷史命令記錄條數(shù)
HISTFILESIZE 保存的歷史命令記錄條數(shù)
MAIL 郵件保存路徑
LANG 系統(tǒng)語言、語系名稱
RANDOM 生成一個隨機數(shù)字
PS1 Bash 解釋器的提示符
PATH 定義解釋器搜索用戶執(zhí)行命令的路徑

PATH 是最重要的一個環(huán)境變量嘉栓,許多黑客會在 /tmp 中存放一個與 ls 或 cd 同名的木馬文件宏榕,再把路徑加入 PATH。

文件權(quán)限管理

Linux 作為一個多用戶侵佃、多任務(wù)的操作系統(tǒng)麻昼,具有很好的穩(wěn)定性與安全性,在幕后保障 Linux 系統(tǒng)的安全則是一系列復(fù)雜的配置工作趣钱。這里暫不介紹用戶身份相關(guān)的命令涌献,只介紹文件權(quán)限與歸屬

目錄詳解

Unix/Linux 中首有,一切皆文件。涉及權(quán)限操作時枢劝,不可避免地要接觸各個目錄井联,這里簡單介紹一些常用目錄的作用:

樹狀目錄結(jié)構(gòu)

系統(tǒng)啟動項

  • /boot:存放的啟動 Linux 時使用的內(nèi)核文件,包括連接文件以及鏡像文件您旁。

  • /etc:表示 Etcetera烙常,存放所有的系統(tǒng)需要的配置文件子目錄列表

指令集合

  • /bin:存放著最常用的程序和指令鹤盒,如 ls 就是在 /bin/ls 目錄下的蚕脏。

  • /sbin:表示 Super User,只有系統(tǒng)管理員能使用的程序和指令侦锯。

賬戶

  • /root:系統(tǒng)管理員的用戶主目錄驼鞭。

  • /home:用戶的主目錄,以各個用戶的賬號命名尺碰,支持多用戶挣棕。

  • /usr:表示 Unix Shared Resources,用戶的很多應(yīng)用程序和文件都放在這個目錄下亲桥,類似 Windows 下的 Program Files 目錄洛心。

    • /usr/bin:系統(tǒng)用戶使用的應(yīng)用程序與指令。
    • /usr/sbin:超級用戶使用的比較高級的管理程序和系統(tǒng)守護程序题篷。
    • /usr/src:內(nèi)核源代碼默認的放置目錄词身。

其他

  • 外部文件管理:/dev、/media番枚、/mnt法严,掛載外部設(shè)備璧瞬,如 U盤,光驅(qū)等渐夸。
  • 臨時文件:/run嗤锉,存儲系統(tǒng)運行信息;/tmp墓塌,存儲用戶臨時信息瘟忱。
  • 運行過程項:/var,存放日志等苫幢;/proc访诱,管理內(nèi)存空間,系統(tǒng)內(nèi)存的映射韩肝。
  • 擴展目錄:/src触菜,存放服務(wù)啟動后需要提取的數(shù)據(jù),不用服務(wù)器就是空哀峻。

權(quán)限類型

在 Linux 系統(tǒng)中涡相,每個文件和目錄都有歸屬的所有者和所屬組,并且規(guī)定了其所有者剩蟀、所屬組以及其他人所擁有的可讀却呋取(r)、可寫入(w)育特、可執(zhí)行(x丙号,代表 execute)的權(quán)限。

這三個權(quán)限對于文件和目錄的含義各不相同:

權(quán)限 文件 目錄
讀如衷(r) 能讀取文件 能夠讀取目錄內(nèi)的文件列表
寫入(w) 能編輯犬缨、新增、修改棉浸、刪除文件 能夠在目錄內(nèi)新增怀薛、刪除、重命名文件
執(zhí)行(r) 能運行一個腳本程序 能夠進入該目錄

三類對象涮拗,三種權(quán)限乾戏,總共需要九個標志位來限定一個文件或目錄的權(quán)限范圍,為了區(qū)分文件和目錄等三热,還有一個附加標志位鼓择。權(quán)限的表示就分為字符表示和數(shù)字表示兩種:

文件權(quán)限的字符與數(shù)字表示

數(shù)字表示即在字符對應(yīng)的二進制位填寫 1 或 0,表示授權(quán)或未授權(quán)就漾,轉(zhuǎn)換為十進制就是 4呐能、2、1。

下面以一個例子來說明這兩種表示法:現(xiàn)在有這樣一個文件摆出,其所有者擁有可讀朗徊、可寫、可執(zhí)行的權(quán)限偎漫,其文件所屬組擁有可讀爷恳、可寫的權(quán)限;其他人只有可讀的權(quán)限象踊。

  • 字符表示:rwxrw-r--
  • 數(shù)字表示:111110100764

那么現(xiàn)在我們用 ls -l 查看文件的信息:

通過ls命令查看到的文件屬性信息

這些信息依次為:文件類型與權(quán)限温亲;硬鏈接數(shù);所有者杯矩;所有組栈虚;文件大小(字節(jié))史隆;最后修改時間魂务;文件名。

文件類型有 7 種泌射,最常見的是 - 表示普通文件粘姜,d 表示目錄文件。

硬鏈接數(shù)魄幕,對于普通文件相艇,表示指向存儲數(shù)據(jù)塊中該文件的鏈接數(shù)(相當(dāng)于 Windows 的快捷方式);對于目錄文件纯陨,表示所在子目錄級數(shù)

在復(fù)雜的實際情況中留储,單純設(shè)置 rwx 權(quán)限已無法滿足需求翼抠,因此還有 SUID、SGID 與 SBIT 三個特殊權(quán)限位获讳,這里不多贅述。

修改權(quán)限

通常來講,修改權(quán)限的操作有以下兩個:

  • chmod:代表 Change mode酒请,格式為 chmod [參數(shù)] 文件名稱淫半。其中參數(shù)為數(shù)字表示的權(quán)限。

  • chown:代表 Change owner帅矗,格式為 chown 所有者:所有組 文件名偎肃。

樣例 功能
chmod +x script.sh 給腳本添加可執(zhí)行權(quán)限(默認對于任何人)
chmod 777 a.txt 賦予所有人完整權(quán)限
chmod 000 a.txt 賦予最小權(quán)限,只有 root 才能操作
chown root:root a.txt 修改所有者和所有組為 root

此外浑此,它們還有一個特別的共性累颂,就是針對目錄進行操作時需要加上大寫參數(shù) -R 來表示遞歸操作,即對目錄內(nèi)所有的文件進行整體操作。

管理員權(quán)限

Linux 系統(tǒng)為了安全性考慮紊馏,使得許多系統(tǒng)命令和服務(wù)只能被 root 管理員來使用料饥,通過一些命令可以切換或暫時切換 root 權(quán)限。

  • su:不退出登錄的情況下朱监,切換用戶身份岸啡,格式為 su - 用戶名稱

注意到命令中間有個 - 符號赫编,這意味著完全切換到新的用戶巡蘸,即把環(huán)境變量信息也變更為新用戶的相應(yīng)信息,而不是保留原始的信息沛慢。用戶名稱可以是普通用戶赡若,也可以是 root。由普通用戶切換至 root 需要輸入管理員密碼团甲。

$ su - root
Password:  #此處輸入管理員密碼
  • sudo:代表 Superuser do逾冬,給普通用戶提供額外的權(quán)限,格式為 sudo [參數(shù)] 用戶名稱躺苦。

最常用的是為當(dāng)前用戶暫時提供 root 權(quán)限身腻,此時不需要輸入管理員密碼,只需要當(dāng)前用戶密碼匹厘。該命令可以避免顯式輸入管理員密碼嘀趟,但有效時間僅有 5 分鐘。

$ sudo su
Password:  #此處輸入當(dāng)前用戶密碼

此外愈诚,sudo 還可加在其他命令前面她按,以獲取高權(quán)限的執(zhí)行,常用的有包管理命令炕柔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酌泰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子匕累,更是在濱河造成了極大的恐慌陵刹,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件欢嘿,死亡現(xiàn)場離奇詭異衰琐,居然都是意外死亡,警方通過查閱死者的電腦和手機炼蹦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門羡宙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人框弛,你說我怎么就攤上這事辛辨。” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵斗搞,是天一觀的道長指攒。 經(jīng)常有香客問我,道長僻焚,這世上最難降的妖魔是什么允悦? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮虑啤,結(jié)果婚禮上隙弛,老公的妹妹穿的比我還像新娘。我一直安慰自己狞山,他們只是感情好全闷,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著萍启,像睡著了一般总珠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勘纯,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天局服,我揣著相機與錄音,去河邊找鬼驳遵。 笑死淫奔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的堤结。 我是一名探鬼主播唆迁,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼竞穷!你這毒婦竟也來了媒惕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤来庭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后穿挨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體月弛,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年科盛,在試婚紗的時候發(fā)現(xiàn)自己被綠了帽衙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡贞绵,死狀恐怖厉萝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤谴垫,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布章母,位于F島的核電站,受9級特大地震影響翩剪,放射性物質(zhì)發(fā)生泄漏乳怎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一前弯、第九天 我趴在偏房一處隱蔽的房頂上張望蚪缀。 院中可真熱鬧,春花似錦恕出、人聲如沸询枚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽金蜀。三九已至,卻和暖如春狈醉,著一層夾襖步出監(jiān)牢的瞬間廉油,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工苗傅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抒线,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓渣慕,卻偏偏與公主長得像嘶炭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子逊桦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

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