相信不少沒有系統瞭解過Linux的小夥伴會和我同樣,在按照教程進行某些環境配置類工做時,遇到一些看上去使人一臉懵逼看不出意思的英文縮寫組成的linux命令,而且常常對於linux系統的組織結構和操做方式感到迷惑,因此爲了對Linux系統有更多理解,我就去看了一下相關資料,發現豆瓣上不少人推薦這本書,本身看過也以爲做爲Linux系統的入門挺不錯的,推薦相似小夥伴能夠去讀一下。linux
Linux系統表明‘自由’,能夠給你一臺沒有任何祕密的計算機,你能夠了解它的一切。git
啓動shell時會出現[me@linuxbox ~]$
,一般包含用戶名、主機名、工做目錄、$ 符號。若是不是 $ 而是 # 表明當前用戶有超級管理員權限shell
按下鼠標左鍵,沿着文本拖動鼠標(或者雙擊一個單詞)高亮了一些文本, 那麼這些高亮的文本就被拷貝到了一個由 X 管理的緩衝區裏面。而後按下鼠標中鍵, 這些文本就被粘貼到光標所在的位置。數據庫
date --- 輸出Thu Oct 25 13:51:54 EDT 2007
express
cal --- 輸出當月日曆ubuntu
df --- 輸出磁盤剩餘空間數量windows
free --- 顯示空閒內存的數量bash
pwd --- print working directory 打印當前目錄路徑less
cd --- change directory函數
ls --- list direcotry contents
相對路徑:.. 表明父級目錄,. 表明當前目錄,.能夠省略
cd --- 切換到用戶的home目錄
cd - --- 切換到先前的工做目錄
cd ~user_name --- 切換到用戶的home目錄,如 cd ~bob
會切換到bob的home目錄
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字符 頁面調度器程序,容許以以逐頁方式輕鬆瀏覽長文本文檔
/ 根目錄
/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目錄當作是一個放置咱們系統程序的配置文件的地方。因此常看到這樣的目錄介紹
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
文件。
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:]] - 匹配任一個大寫字母
複製代碼
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 壓縮的文本文件的內容。
? - 顯示命令幫助
PgUp - 顯示上一頁
PgDn - 顯示下一頁
n - next 顯示下一個節點
p - prev 顯示上一個節點
u - up 顯示父節點,一般是個菜單
q - quit 退出閱讀器
複製代碼
超連接經過它開頭的星號來辨別,把光標放在上面並按下 enter 鍵,就能夠激活它
建立以前先用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 會話結束時,它們會消失
"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 選項能夠查看重複行
字符展開
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'
記幾個能夠常常用到的:
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-g
或ctrl-c
退出搜索
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 軟鏈接,隨後三個一組,分別是用戶對該文件的權限、用戶所屬用戶組對該文件權限、其餘全部人對該文件的權限