快樂的Linux命令列--讀書筆記1

superMaryyy發表於2019-04-20

相信很多沒有系統瞭解過Linux的小夥伴會和我一樣,在按照教程進行某些環境配置類工作時,遇到一些看上去令人一臉懵逼看不出意思的英文縮寫組成的linux命令,並且經常對於linux系統的組織結構和操作方式感到迷惑,所以為了對Linux系統有更多理解,我就去看了一下相關資料,發現豆瓣上很多人推薦這本書,自己看過也覺得作為Linux系統的入門挺不錯的,推薦類似小夥伴可以去讀一下。

chap01-03

01 引言

Linux系統代表‘自由’,可以給你一臺沒有任何祕密的計算機,你可以瞭解它的一切。

為什麼要學習命令列:

  1. “圖形使用者介面讓簡單的任務更容易完成, 而命令列介面使完成複雜的任務成為可能”
  2. 學習 Linux 命令列會讓你受益匪淺,給你極大的回報。如果你認為, 現在你已經是高手了。別急,其實你還不知道什麼才是真正的高手。不像其他一些計算機技能, 一段時間之後可能就被淘汰了,命令列知識卻不會落伍,你今天所學到的,在十年以後, 都會有用處。命令列通過了時間的考驗。

chap02 什麼是 shell

啟動shell時會出現[me@linuxbox ~]$,通常包含使用者名稱、主機名、工作目錄、$ 符號。如果不是 $ 而是 # 代表當前使用者有超級管理員許可權

複製貼上技巧:

按下滑鼠左鍵,沿著文字拖動滑鼠(或者雙擊一個單詞)高亮了一些文字, 那麼這些高亮的文字就被拷貝到了一個由 X 管理的緩衝區裡面。然後按下滑鼠中鍵, 這些文字就被貼上到游標所在的位置。

命令

date --- 輸出Thu Oct 25 13:51:54 EDT 2007

cal --- 輸出當月日曆

df --- 輸出磁碟剩餘空間數量

free --- 顯示空閒記憶體的數量

chap03 檔案系統中跳轉

命令

pwd --- print working directory 列印當前目錄路徑

cd --- change directory

ls --- list direcotry contents

絕對路徑 相對路徑

相對路徑:.. 代表父級目錄,. 代表當前目錄,.可以省略

快捷鍵

cd --- 切換到使用者的home目錄

cd - --- 切換到先前的工作目錄

cd ~user_name --- 切換到使用者的home目錄,如 cd ~bob 會切換到bob的home目錄

chap04 探究作業系統

4.1命令:

ls:

ls -l   以長模式輸出

ls -t   按檔案修改時間的順序輸出

ls -lt  

ls -t --reverse     按時間逆序排列

ls -a   顯示全部檔案,包括.開頭的隱藏檔案;

ls -lh  以人易讀的格式來顯示檔案大小

ls -S   以檔案大小排序

ls /usr     列出別的目錄下的檔案

ls ~ /usr   列出多個目錄下的檔案

ls -i   展示檔案索引節點資訊,`ls -li` 可以用來判斷硬連結
複製程式碼

對目錄使用ls -l會列印出類似內容-rw-r--r-- 1 root root 358374 2007-04-03 11:05 ubuntu Sax.ogg 開頭的“-”說明是一個普通檔案,“d”表明是一個目錄,“l”表示是一個軟連結,symlink

file --- 確定檔案型別 file add.png ==》 add.png: PNG image data, 64 x 64, 8-bit/color RGBA, interlaced

less --- 瀏覽文字檔案內容 q退出, /a 搜尋a字元 頁面排程器程式,允許以以逐頁方式輕鬆瀏覽長文字文件

4.2檔案系統

/       根目錄

/boot   包含 Linux 核心、初始啟動載入程式等

/bin    binaries縮寫,以bin命名的資料夾都是放二進位制可執行程式的,/bin是系統執行所需的二進位制程式,/usr/bin系統安裝的可執行程式

/etc    放系統層面的配置檔案

/home   分配給使用者的可讀寫目錄,普通使用者只能在自己的home目錄下修改

/root   root賬戶的home目錄,理解為管理員的home目錄

/sbin   s代表system,包含“系統”二進位制檔案,重大系統任務的程式,通常為超級使用者保留

/tmp    臨時檔案儲存的目錄
複製程式碼

/usr unix system resource,/usr 目錄可能是最大的一個。它包含普通使用者所需要的所有程式和檔案

/usr/bin    系統安裝的可執行程式
/usr/lib    上面所有程式所共用的庫
/usr/local  使用者安裝程式時的安裝目錄,由原始碼編譯的程式會安裝在/usr/local/bin 目錄下,一個新系統沒安裝程式之前這個目錄為空
/usr/share  /usr/bin中的程式使用的共享資料, 包括配置檔案、圖示、音訊等
/usr/share/doc  安裝的軟體包會包含一些文件,存放按照軟體包分類的文件。

/var        存放動態檔案,各種資料庫,假離線檔案,使用者郵件等等。上述目錄除了/tmp 和/home 目錄,其他都是靜態的,內容不會改變。
/var/log    包含日誌檔案、各種系統活動的記錄,這些檔案非常重要,並且應該時時監測它們,其中最重要的一個檔案是/var/log/messages。有時只有超級使用者才能檢視這些日誌檔案。
複製程式碼

完整的 Linux 檔案系統層次體系標準可通過以下連結找到: !http://www.pathname.com/fhs/

/etc 檔名的意思: 一種說法,是et cetera。這個是老一點的說法,就是說,不管什麼資料或檔案,只要不屬於其它目錄的,零零碎碎就放在/etc目錄下。 另一種說法,"Editable Text Configuration":很多人也把/etc目錄看成是一個放置我們系統程式的配置檔案的地方。所以常看到這樣的目錄介紹

4.3符號連結

lrwxrwxrwx 1 root root 11 2007-08-11 07:34 libc.so.6 -> libc-2.6.so 以 l 開頭,表示這個檔案是一個符號連結,也叫軟連線或symlink,它表示對實際檔案的一個引用,當多個程式都引用某一個檔案時,檔名中維護者版本號,當檔案升級時,需要修改所有引用到的地方,使用軟連結就可以把原來的軟連結刪除,再建立一個同名但引用新版本檔案的軟連結即可。這個連結名為libc.so.6,實際指向的是libc-2.6.so檔案。

chap05 操作檔案和目錄

常用命令

cp — 複製檔案和目錄
    選項:-a 同時複製屬性;  -r 遞迴複製目錄內容;  -i 互動式複製,如將覆蓋檔案會提示; -u 更新式複製; -v 顯示操作詳細資訊
mv — 移動/重新命名檔案和目錄
    選項:-i  -u  -v
mkdir — 建立目錄
rm — 刪除檔案和目錄
    選項:-i 互動式;  -r 遞迴式;  -f 強制性;  -v 冗餘式
    **注意:** rm 刪除不可復原,所以要小心。當使用rm 刪除帶萬用字元的目錄時,一個避免誤刪除的操作是,先使用ls 測試一下萬用字元,再執行rm。

ln — 建立硬連結和符號連結
建立硬連結:`ln file link`
建立軟連結:`ln -s file link`
複製程式碼

硬連結 - 不能關聯它所在的檔案系統之外的檔案,即它不能關聯別的磁碟分割槽上的檔案 - 不能關聯一個目錄 - 硬連結本身與檔案沒有區別,一個硬連結本身就是一個檔案。 - 每個檔案預設會有一個硬連結

軟連結 - 相當於windows中的快捷方式; - 一個符號連結指向一個檔案; - 往符號連結裡面寫入東西,那麼相關聯的檔案也被寫入; - 刪除符號連結時,只有連結被刪除,而不是檔案自身; - 如果先於符號連結 刪除檔案,這個連結仍然存在,但是不指向任何東西。在這種情況下,這個連結被稱為 壞連結。

萬用字元

\* - 匹配任意字元
? - 匹配1個字元
[abc] - 匹配屬於字符集abc的字元 [a-z][A-Z]
[!abc] - 匹配除a、b、c外的字元
[[:class:]] - 匹配字元類
複製程式碼

字元類

[[:alnum:]] - 匹配任一個字母或數字
[[:alpha:]] - 匹配任一個字母
[[:digit:]] - 匹配任一個數字
[[:lower:]] - 匹配任一個小寫字母
[[:upper:]] - 匹配任一個大寫字母
複製程式碼

chap06 使用命令

命令 文件幫助類的命令

type - 顯示命令屬於哪一種型別:可執行程式、shell builtin 命令、shell 函式、別名
which - 顯示可執行程式型別命令 的程式  的路徑位置

man     - 顯示命令的手冊:`man ls`。`man 5 passwd`:檢視passwd命令手冊的第五章節的內容
apropos - 在手冊中搜尋給定的關鍵字,`apropos xxx` 等同於 `man -k xxx`
info    - 顯示程式的info條目,類似man,採用info 閱讀器程式顯示內容,info頁是超級連結形式的,和網頁很類似:`info coreutils`
whatis  - 顯示命令的簡潔描述

help    - 顯示shell builtin 型別命令的幫助手冊: help cd,  將輸出`cd: cd [-L|-P] [dir]` 其中豎線| 表示互斥
--help  - 一些可執行程式型別的命令支援一個help 選項:mkdir --help

alias   - 建立命令別名:alias foo='xxxxxxx'。 不帶引數的alias 將列印出系統所有的別名
unalias - 刪除命令別名: unalias foo
複製程式碼

README文件: 許多程式在/usr/share/doc/下有自己的文件檔案,大部分是文字格式,可以用less程式檢視;.gz結尾的檔案是經過gzip壓縮過的,其中的文字文件可以使用zless查閱,zless是gzip軟體包裡的特殊的less版本,可以顯示由 gzip 壓縮的文字檔案的內容。

info閱讀器程式命令:

?      - 顯示命令幫助
PgUp    - 顯示上一頁
PgDn    - 顯示下一頁
n       - next 顯示下一個節點
p       - prev 顯示上一個節點
u       - up 顯示父節點,通常是個選單
q       - quit 退出閱讀器
複製程式碼

超連結通過它開頭的星號來辨別,把游標放在上面並按下 enter 鍵,就可以啟用它

用alias 建立你自己的命令

建立之前先用type測試命令名是否已有 type foo ==> bash: type: foo: not found alias foo='cd /usr; ls; cd -' foo

這樣會先後執行cd /usr; ls; cd -這三句命令 type foo ==> foo is aliased to 'cd /usr; ls ; cd -'

在命令列中定義的別名, shell 會話結束時,它們會消失

chap07 重定向

I/O重定向

"I/O重定向",可以重定向命令的輸入和輸出,命令的輸入來自檔案,輸出也存到檔案,可以把多個命令連線起來組成一個強大的命、令管道。

標準輸入、輸出和錯誤

程式會產生兩種輸出:1,程式執行結果,也就是程式要完成的功能;2,我們得到的狀態和錯誤資訊,這些告訴我們程式的進展。與Linux的主題“Everything is a file”一致,程式,比如說ls,會把執行結果輸送到一個叫做標準輸出的檔案(用stdout表示),把錯誤資訊輸送到一個標準錯誤檔案(用stderr表示)。預設情況下,標準輸出和標準錯誤都連線到螢幕,而不是儲存到磁碟。此外許多程式從標準輸入裝置(stdin)獲取資訊,預設情況下,標準輸入連線到鍵盤。重定向命令可以更改輸入輸出的地點。一般從鍵盤輸入,輸出到螢幕,通過命令可以更改到從檔案輸入輸出,或是從命令的結果中獲取輸入源等。

命令

cat     Concatenate files連線檔案,讀取一個或多個檔案並複製他們到標準輸出。
    - cat 讀取檔案:`cat < file1.txt`改變輸入源為file1.txt檔案,等同於`cat file1.txt` ==》 將顯示file1.txt檔案的內容
    - cat 連線多個檔案:`cat out*.txt > out.txt` ==》 把符合條件的txt檔案的內容合併到out.txt檔案中
    - cat 後不帶引數,將等待使用者輸入,ctrl + d標誌使用者輸入的結束,然後複製顯示使用者的輸入。`cat > dog.txt`將把使用者的輸入寫入dog.txt檔案中

sort    排序文字行
uniq    去除重複行;加-d 顯示重複行
grep    列印匹配行:
    - `ls /bin /usr/bin | sort | uniq | grep zip` 顯示檔名包含'zip'的檔案列表
    - `ls /bin | grep -i zip` 搜尋匹配項時忽略大小寫
    - `ls /bin | grep -v zip` 展示不匹配的項
wc      顯示檔案中的字數、行數、檔案大小: 
    - `wc file1.txt` 顯示檔案file1.txt的字數等資料,
    - `wc` 如果不帶引數,它接受標準輸入,即鍵盤輸入
    - `ls /usr/bin | wc -l` 只輸出行數,這裡可以很方便的檢視/usr/bin下面的程式個數

head    預設列印檔案的前十行,
    - `head -n 5 file1.txt` 加 -n 引數,可以制定列印幾行
    - `ls /usr/bin | head -n 5` 也可以用在管道線中

tail    預設列印檔案的後十行,
    - `tail -n 5 file1.txt` 加 -n 引數,可以制定列印幾行
    - `tail -f /var/log/message` 加-f引數可以實時地瀏覽檔案,可以用來觀察日誌檔案,因為檢視的同時日誌檔案也在被寫入

tee     從標準輸入讀取資料,並同時寫到標準輸出和檔案:
    - `ls /usr/bin | tee teeFile.txt | grep zip` ==> 把內容寫入到teeFile.txt,之後傳遞資料到grep 命令

\>      更改輸出到檔案,例如`ls -l /usr/bin > output.txt` 
    `> output.txt` 可以清空output.txt的內容
\>\>    把輸出新增到檔案末尾而非重寫檔案:`ls -l /usr/bin >> output.txt`
2\>     輸出程式的錯誤資訊到檔案:`ls -l /bin/usr 2> error.txt`
&\>     把輸出資訊和錯誤資訊寫入同一個檔案: `ls -l /bin/usr &> output.txt`
\>/dev/null 扔掉不需要的輸出結果,/dev/null 是一個特殊檔案,叫做‘位儲存桶’,可以接受輸入,並對輸入不做任何處理
複製程式碼

管道線

命令從標準輸入讀取資料並輸送到標準輸出的能力被一個稱為管道線的 shell 特性所利用。 使用管道操作符"|"(豎槓),一個命令的標準輸出可以通過管道送至另一個命令的標準輸入,管道線可以對資料完成複雜的操作:

ls -l /usr/bin | less

ls -l /bin /usr/bin | sort | less :會把/bin 和 /usr/bin 下的內容列表合併排序後輸出到less

ls -l /bin /usr/bin | sort | uniq | less

:加上uniq可以刪除重複行

ls -l /bin /usr/bin | sort | uniq -d | less :uniq加 -d 選項可以檢視重複行

chap08 從 shell 眼中看世界--各種展開和引用

字元展開

echo * 並不會輸出 *號,這是因為*是萬用字元,shell在echo命令被執行前把*展開成了另外的內容,echo的實際引數是*展開後的東西

路徑名展開

echo D*

echo [[:upper:]]

echo /usr/*/share

echo * 顯示結果不包含顯示隱藏檔案

ls -A 顯示所有檔案,包括隱藏檔案

波浪線展開

echo ~ ==> 輸出 /home/tianmiao185

echo ~tianmiao185 ==> 輸出 /home/tianmiao185

算術表示式展開

格式為$((expression))

echo $((2+2)) 輸出4

echo $(( (2+2) ** 2)) 輸出16,**是冪運算

花括號展開

echo Front-{a,b,c}-back 輸出 Front-a-back Front-b-back Front-c-back

echo Number-{2..5} 輸出 Number-2 Number-3 Number-4 Number-5

echo {a..z} 將按順序輸出26個字母

mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12} 花括號可以巢狀,左邊將建立一系列年月命名的資料夾

引數展開

echo $USER 將輸出tianmiao185,USER是一個變數存在系統的環境變數配置檔案中。

printenv | less 檢視所有有效的變數

命令替換

命令替換允許我們把一個命令的輸出作為一個展開模式來使用

echo $(ls) 命令替換的格式是用$和括號包裹命令,就可以把命令執行的結果作為引數傳給別的命令:$(命令)

file $(ls /usr/bin/* | grep zip) ==> 更為複雜的命令替換

舊版shell還支援用``符號包裹命令的格式:

ls -l `which cp`

引號

雙引號包裹可以阻止空格、~、花括號展開、路徑名展開、字元展開,不可以阻止涉及 $ 的展開,即引數展開、變數替換、算術表示式,也不能阻止 \ (反斜槓),和 `(倒引號)

單引號可以阻止所有的展開,包括涉及 $ 的展開

轉義

命令中可以使用\來轉義特殊字元

\\b     BackSpace   退格符
\\n     NewLine     換行符
\\a     Alert       蜂鳴符,導致計算機嘟嘟響
\\r     Return      回車符
\\t     Table       製表符
複製程式碼

echo 加上-e選項可以解析轉義字元: echo -e "Time is up \a" 會把\a進行解析成蜂鳴符,等同於echo "Time is up"$'\a'

chap09 鍵盤高階操作技巧

記幾個可以經常用到的:

clear   清屏 
ctrl-l  清屏,並移動游標到左上角
history 顯示歷史命令列表
ctrl-a  移動游標到行首
ctrl-e  移動到行尾

ctrl-k  剪下游標到行尾的文字
ctrl-u  剪下游標到行首的文字
ctrl-y  把剪下環中的文字貼上到游標位置

tab鍵   可以自動補全,按兩次tab鍵可以輸出所有符合條件的內容
複製程式碼

歷史命令

history | less 瀏覽歷史命令
history | grep /usr/bin 搜尋指定pattern的歷史命令,將得到類似:`88  ls -l /usr/bin > ls-output.txt` 的一行行內容
!88     應用指定行命令
上箭頭  應用上一個歷史命令
下箭頭  應用下一個歷史命令
複製程式碼

增量搜尋

ctrl-r 啟動增量搜尋命令,然後輸入搜尋關鍵詞,按enter執行命令,或ctrl-j 從歷史列表複製這一行到當前命令列,再次輸入ctrl-r 來找到下一個匹配項,輸入ctrl-gctrl-c退出搜尋

chap10 許可權

linux系統是多使用者的,每個使用者只能操作各自許可權下的目錄和檔案。

命令

id      顯示使用者身份號,會顯示使用者的uid,gid,和group分別表示使用者id,使用者組id,所屬使用者組。
    - 這些資訊來源於使用者配置檔案,使用者帳戶資訊 定義在/etc/passwd 檔案裡面,使用者組定義在/etc/group 檔案裡面
    - linux的普通使用者通常分在users這個使用者組

passwd  更改使用者密碼: `passwd [user]`

chmod   更改檔案模式
    - u user的簡寫,代表使用者本身
    - g group,代表使用者所屬使用者組
    - o others,代表剩餘其他使用者
    - a all,代表所有人
    - chmod u+x file1.txt 給使用者新增可執行許可權
    - chmod u-x file1.txt
    - chmod +x  file1.txt  等價於 chmod a+x 給所有人新增x許可權
    - chmod go=rw file1.txt “=”,表示只有指定的許可權可用,其它所有的許可權被刪除
    - u+x,go=rw 給檔案擁有者執行許可權並給組和其他人讀和執行的許可權。多種設定可以用逗號分開。

chown   更改檔案所有者,chown 引數例項:
    - bob       把檔案所有者從當前屬主更改為使用者 bob。
    - bob:users 把檔案所有者改為使用者 bob,檔案使用者組改為使用者組 users。
    - :admins   把檔案使用者組改為組 admins,檔案所有者不變。
    - bob:      檔案所有者改為使用者 bob,檔案使用者組改為使用者 bob 登入系統時所屬的使用者組。

chgrp   更改檔案組所有權
umask   設定預設的檔案許可權
su      `su [-[l]] [user]` su 命令用來以另一個使用者的身份來啟動 shell,輸入"exit",會返回到原來的 shell
sudo    以另一個使用者的身份來執行命令。
    - 與su 之間的一個重要區別是 sudo 不會重新啟動一個 shell,也不會載入另一個 使用者的 shell 執行環境
    - 第一次使用 sudo 命令之後短時間內,shell不會再提示輸入密碼,這是因為,在 大多數的配置中,sudo 命令會相信你幾分鐘,直到計時結束
複製程式碼

ls -l /usr/bin的輸出結構中:-rw-rw-r-- 1 me me 0 2008-03-06 14:52 foo.txt

-rw-rw-r--首字母代表: - 檔案、d 目錄 l 軟連線,隨後三個一組,分別是使用者對該檔案的許可權、使用者所屬使用者組對該檔案許可權、其他所有人對該檔案的許可權

相關文章