PS.我的以爲shell命令偏記憶,因此與其說是筆記不如干脆說是書摘,這裏先列出我要粗讀的書linux
0.Linux就該這麼學(棄坑,廣告太多)git
Linux命令行(30%)正則表達式
how linux works(30%)shell
red hat linux用戶基礎數據庫
LINUX系統管理技術手冊(可選)編程
老師發的文件安全
echo
打印bash
date[參數][-指定格式]
網絡
%t 跳格[Tab 鍵]
%H 小時(00~23)
%I 小時(00~12)
%M 分鐘(00~59)
%S 秒(00~59)
%j 今年中的第幾天架構
reboot
poweroff
wget
-b 後臺下載模式
-P 下載到指定目錄
-t 最大嘗試次數
-c 斷點續傳
-p 下載頁面內全部資源,包括圖片、視頻等
-r 遞歸下載
ps
查看進程
用例 ps aux
(沒必要使用-
前綴)
-a 顯示全部進程(包括其餘用戶的進程)
-u 用戶以及其餘詳細信息
-x 顯示沒有控制終端的進程
top
監視系統
pidof
[參數] [服務名稱]
kill
[參數] [進程 PID]
killall
[參數] [服務名稱]
ifconfig
[網絡設備] [參數
uname [-a]
cat /etc/redhat-release
uptime
查看系統負載信息
free
顯示內存信息 free [-h]
who
查看當前登入主機的用戶終端信息
last
查看全部系統登入信息
history [-c]
顯示執行過的命令 /etc/profile 中 HISTSIZE爲大小
sosreport
收集系統配置及架構信息並輸出診斷文檔
pwd
當前目錄
cd
切換目錄 -
上一次的目錄,~
家目錄
ls
顯示當前目錄文件信息,-a
查看全部,-l
查看屬性/大小,-d
目錄屬性,用例ls -ld /etc
cat
[選項] [文件] , -n
顯示行號
more
head
前n頁 tail
後n頁(持續刷新) ,-f
tr
[原始] [目標] 替換文本,用例cat anaconda-ks.cfg | tr [a-z] [A-Z]
wc
word count,-l
行數,-w
單詞數,-c
字節數
stat
文件的具體存儲信息和時間等信息
cut
[參數] 文本,提取文本字符 -f
列數,-d
間隔符號,用例cut -d: -f1 /etc/passwd
diff
[參數] 文本,-c
具體不一樣,--brief
僅判斷
touch
[選項] [文件],建立空白文件或設置文件的時間,-a
修改atime,-m
修改mtime,-d
都修改
mkdir
[選項] 目錄,-p
嵌套,用例mkdir -p a/b/c/d
cp
[選項] 源 目標,-p
保留屬性,-d
保留連接屬性(?),-r
遞歸,-i
詢問覆蓋,-a
等於-pdr
mv
剪切/重命名
rm
刪除,-f
強制刪除.-r
刪除目錄
dd
,if
輸入文件,of
輸出,bs
塊大小,count
塊數量,用例dd if=/dev/zero of=560_file count=1 bs=560M
dd刻錄isodd if=/dev/cdrom of=RHEL-server-7.0-x86_64.iso
file
查看文件類型
tar
-c 建立壓縮文件
-x 解開壓縮文件
-t 查看壓縮包內有哪些文件
-z 用 Gzip 壓縮或解壓
-j 用 bzip2 壓縮或解壓
-v 顯示壓縮或解壓的過程
-f 目標文件名
-p 保留原始的權限與屬性
-P 使用絕對路徑來壓縮
-C 指定解壓到的目錄
通常用-czvf
和xzvf
示例tar -czvf etc.tar.gz /etc
.mkdir /root/etc
,tar xzvf etc.tar.gz -C /root/etc
grep
關鍵詞搜索
-b 將可執行文件(binary)看成文本文件(text)來搜索
-c 僅顯示找到的行數
-i 忽略大小寫
-n 顯示行號
-v 反向選擇—僅列出沒有「關鍵詞」的行
Linux中的進程分爲5個狀態,
R(運行) 進程正在運行或在運行隊列中等待
S(中斷) 進程處於休眠中,當某個條件造成後或者接收到信號時,則脫離該狀態。
D(不可中斷) 進程不響應系統異步信號,即使用 kill 命令也不能將其中斷
Z(僵死), 進程已經終止,但進程描述符依然存在, 直到父進程調用 wait4()系統函數後將進程釋放
T(中止) 進程收到中止信號後中止運行
輸入重定向符號
命令 < 文件
命令 << 分界符
從STDIN讀入,直到遇到分界符中止
命令 < 文件1 > 文件2
輸出重定向符號
命令 > 文件
命令 2> 文件
STDERR
命令 >> 文件
追加模式
命令 2>> 文件
追加
命令 >> 文件 2>&1
或者 命令 &>> 文件
STDOUT和STDERR追加到同一文件
其中描述符 0 是STDIN 1是STDOUT 2是STDERR
管道命令符|
,a|b
做用爲把前一個命令看成是後一個命令的標準輸入
通配符*
表示0個或多個,?
匹配單個,[0-9]
匹配0-9之間的單個數,可用於文件操做
轉義字符\
後面一個變量變爲字符串,"
全部變量變爲字符串,""
保留變量屬性不專義,``
執行命令並返回
last update:2019/02/13
如下爲The Linux Command Line筆記
ls命令有兩個選項,「l」選項產生長格式輸出,「t」選項按文件 修改時間的前後來排序。
加上長選項 「–reverse」,則結果會以相反的順序輸出
[me@linuxbox ~]$ ls -lt --reverse
ls 命令有大量的選項。表4-1列出了最常使用的選項。
表 4-1: ls 命令選項
選項 | 長選項 | 描述 |
---|---|---|
-a | --all | 列出全部文件,甚至包括文件名以圓點開頭的默認會被隱藏的隱藏文件。 |
-d | --directory | 一般,若是指定了目錄名,ls 命令會列出這個目錄中的內容,而不是目錄自己。 把這 個選項與 -l 選項結合使用,能夠看到所指定目錄的詳細信息,而不是目錄中的內容。 |
-F | --classify | 這個選項會在每一個所列出的名字後面加上一個指示符。例如,若是名字是 目錄名,則會 加上一個'/'字符。 |
-h | --human-readable | 當以長格式列出時,以人們可讀的格式,而不是以字節數來顯示文件的大小。 |
-l | 以長格式顯示結果。 | |
-r | --reverse | 以相反的順序來顯示結果。一般,ls 命令的輸出結果按照字母升序排列。 |
-S | 命令輸出結果按照文件大小來排序。 | |
-t | 按照修改時間來排序。 |
-rw-r--r-- 1 root root 32059 2007-04-03 11:05 oo-cd-cover.odf
字段 | 含義 |
---|---|
-rw-r--r-- | 對於文件的訪問權限。第一個字符指明文件類型。在不一樣類型之間, 開頭的「-」說明是一 個普通文件,「d」代表是一個目錄。其後三個字符是文件全部者的 訪問權限,再其後的三個字符是文件 所屬組中成員的訪問權限,最後三個字符是其餘所 有人的訪問權限。這個字段的完整含義將在第十章討 論。 |
1 | 文件的硬連接數目。參考隨後討論的關於連接的內容。 |
root | 文件屬主的用戶名。 |
root | 文件所屬用戶組的名字。 |
32059 | 以字節數表示的文件大小。 |
2007-04-03 11:05 | 上次修改文件的時間和日期。 |
oo-cd-cover.odf | 文件名。 |
有些可執行文件的執行位是s(setuid)而不是x,表示你將以文件擁有者的身份運行該文件,而不是你本身
file picture.jpg picture.jpg: JPEG image data, JFIF standard 1.01
less 命令是一個用來瀏覽文本文件的程序。less filename
命令 | 行爲 |
---|---|
Page UP or b | 向上翻滾一頁 |
Page Down or space | 向下翻滾一頁 |
UP Arrow | 向上翻滾一行 |
Down Arrow | 向下翻滾一行 |
G | 移動到最後一行 |
1G or g | 移動到開頭一行 |
/charaters | 向前查找指定的字符串 |
n | 向前查找下一個出現的字符串,這個字符串是以前所指定查找的 |
h | 顯示幫助屏幕 |
q | 退出 less 程序 |
你能夠在less命令的輸出結果中進行搜索。例如:使用/word從當前位置向前搜索word這個詞,使用? word從當前位置向後搜索。當找到一個匹配的時候,按N鍵能夠跳到下一個匹配。
表 4-4: Linux 系統中的目錄
| 目錄 | 評論 |
|-----|---------|
| / | 根目錄,萬物起源。 |
| /bin | 包含系統啓動和運行所必須的二進制程序。 |
| /boot | 包含 Linux 內核,最初的 RMA 磁盤映像(系統啓動時,由驅動程序所需),和 啓動加載程序。有趣的文件: /boot/grub/grub.conf or menu.lst, 被用來配置啓動加載程序。 /boot/vmlinuz,Linux 內核。 |
| /dev | 這是一個包含設備結點的特殊目錄。「一切都是文件」,也使用於設備。 在這個目錄裏,內核維護着它支持的設備。 |
| /etc | 這個目錄包含全部系統層面的配置文件。它也包含一系列的 shell 腳本, 在系統啓動時,這些腳本會運行每一個系統服務。這個目錄中的任何文件應該是可讀的文本文件。有意思的文件:雖然/etc 目錄中的任何文件都有趣,但這裏只列出了一些我一直喜歡的文件: /etc/crontab, 定義自動運行的任務。 /etc/fstab,包含存儲設備的列表,以及與他們相關的掛載點。/etc/passwd,包含用戶賬號列表。 |
| /home | 在一般的配置環境下,系統會在/home 下,給每一個用戶分配一個目錄。普通只能 在他們本身的目錄下建立文件。這個限制保護系統免受錯誤的用戶活動破壞。 |
| /lib | 包含核心系統程序所需的庫文件。這些文件與 Windows 中的動態連接庫類似。 |
| /lost+found | 每一個使用 Linux 文件系統的格式化分區或設備,例如 ext3文件系統, 都會有這個目錄。當部分恢復一個損壞的文件系統時,會用到這個目錄。除非文件系統 真正的損壞了,那麼這個目錄會是個空目錄。 |
| /media | 在如今的 Linux 系統中,/media 目錄會包含可移除媒體設備的掛載點, 例如 USB 驅動器,CD-ROMs 等等。這些設備鏈接到計算機以後,會自動地掛載到這個目錄結點下。 |
| /mnt | 在早些的 Linux 系統中,/mnt 目錄包含可移除設備的掛載點。 |
| /opt | 這個/opt 目錄被用來安裝「可選的」軟件。這個主要用來存儲可能 安裝在系統中的商業軟件產品。 |
| /proc | 這個/proc 目錄很特殊。從存儲在硬盤上的文件的意義上說,它不是真正的文件系統。 反而,它是一個由 Linux 內核維護的虛擬文件系統。它所包含的文件是內核的窺視孔。這些文件是可讀的, 它們會告訴你內核是怎樣監管計算機的。 |
| /root | root 賬戶的家目錄。 |
| /sbin | 這個目錄包含「系統」二進制文件。它們是完成重大系統任務的程序,一般爲超級用戶保留。 |
| /tmp | 這個/tmp 目錄,是用來存儲由各類程序建立的臨時文件的地方。一些配置,致使系統每次 從新啓動時,都會清空這個目錄。 |
| /usr | 在 Linux 系統中,/usr 目錄多是最大的一個。它包含普通用戶所須要的全部程序和文件。 |
| /usr/bin | /usr/bin 目錄包含系統安裝的可執行程序。一般,這個目錄會包含許多程序。 |
| /usr/lib | 包含由/usr/bin 目錄中的程序所用的共享庫。 |
| /usr/local | 這個/usr/local 目錄,是非系統發行版自帶,卻打算讓系統使用的程序的安裝目錄。 一般,由源碼編譯的程序會安裝在/usr/local/bin 目錄下。新安裝的 Linux 系統中,會存在這個目錄, 但倒是空目錄,直到系統管理員放些東西到它裏面。 |
| /usr/sbin | 包含許多系統管理程序。 |
| /usr/share | /usr/share 目錄包含許多由/usr/bin 目錄中的程序使用的共享數據。 其中包括像默認的配置文件,圖標,桌面背景,音頻文件等等。 |
| /usr/share/doc | 大多數安裝在系統中的軟件包會包含一些文檔。在/usr/share/doc 目錄下, 咱們能夠找到按照軟件包分類的文檔。 |
| /var | 除了/tmp 和/home 目錄以外,相對來講,目前咱們看到的目錄是靜態的,這是說, 它們的內容不會改變。/var 目錄是可能須要改動的文件存儲的地方。各類數據庫,假脫機文件, 用戶郵件等等,都駐紮在這裏。 |
| /var/log | 這個/var/log 目錄包含日誌文件,各類系統活動的記錄。這些文件很是重要,而且 應該時時監測它們。其中最重要的一個文件是/var/log/messages。注意,爲了系統安全,在一些系統中, 你必須是超級用戶才能查看這些日誌文件。 |
完整的 Linux 文件系統層次體系標準可經過如下連接找到:
Q.什麼是軟連接/硬連接
通配符 | 意義 |
---|---|
* | 匹配任意多個字符(包括零個或一個) |
? | 匹配任意一個字符(不包括零個) |
[characters] | 匹配任意一個屬於字符集中的字符 |
[!characters] | 匹配任意一個不是字符集中的字符 |
[[:class:]] | 匹配任意一個屬於指定字符類中的字符 |
shell通配符不匹配dot文件,除非明確指定.*
在通配符中使用.*
可能會致使一些問題,由於.*
匹配.
和..
(當前目錄和上級目錄)。你可使用正則表達式.[^.]*
或.??*
來排除這兩個目錄
表5-2: 廣泛使用的字符類
字符類 | 意義 |
---|---|
[:alnum:] | 匹配任意一個字母或數字 |
[:alpha:] | 匹配任意一個字母 |
[:digit:] | 匹配任意一個數字 |
[:lower:] | 匹配任意一個小寫字母 |
[:upper] | 匹配任意一個大寫字母 |
mkdir directory...
(可重複,如mkdir dir1 dir2 dir3
)
cp item1 item2
和cp item... directory
表5-4: cp 選項
| 選項 | 意義 |
|--------|-------|
| -a, --archive | 複製文件和目錄,以及它們的屬性,包括全部權和權限。 一般,複本具備用戶所操做文件的默認屬性。 |
| -i, --interactive | 在重寫已存在文件以前,提示用戶確認。若是這個選項不指定, cp 命令會默認重寫文件。 |
| -r, --recursive | 遞歸地複製目錄及目錄中的內容。當複製目錄時, 須要這個選項(或者-a 選項)。 |
| -u, --update | 當把文件從一個目錄複製到另外一個目錄時,僅複製 目標目錄中不存在的文件,或者是文件內容新於目標目錄中已經存在的文件。 |
| -v, --verbose | 顯示翔實的命令操做信息 |
表5-5: cp 實例
| 命令 | 運行結果 |
|--------|-------|
| cp file1 file2 | 複製文件 file1 內容到文件 file2。若是 file2 已經存在, file2 的內容會被 file1 的內容重寫。若是 file2 不存在,則會建立 file2。 |
| cp -i file1 file2 | 這條命令和上面的命令同樣,除了若是文件 file2 存在的話,在文件 file2 被重寫以前, 會提示用戶確認信息。 |
| cp file1 file2 dir1 | 複製文件 file1 和文件 file2 到目錄 dir1。目錄 dir1 必須存在。 |
| cp dir1/* dir2 | 使用一個通配符,在目錄 dir1 中的全部文件都被複制到目錄 dir2 中。 dir2 必須已經存在。 |
| cp -r dir1 dir2 | 複製目錄 dir1 中的內容到目錄dir2。若是目錄 dir2 不存在, 建立目錄 dir2,操做完成後,目錄 dir2 中的內容和 dir1 中的同樣。 若是目錄 dir2 存在,則目錄 dir1 (和目錄中的內容)將會被複制到 dir2 中。 |
mv item1 item2
和mv item... directory
表5-6: mv 選項
| 選項 | 意義 |
|--------|-------|
| -i --interactive | 在重寫一個已經存在的文件以前,提示用戶確認信息。 若是不指定這個選項,mv 命令會默認重寫文件內容。 |
| -u --update | 當把文件從一個目錄移動另外一個目錄時,只是移動不存在的文件, 或者文件內容新於目標目錄相對應文件的內容。 |
| -v --verbose | 當操做 mv 命令時,顯示翔實的操做信息。 |
表5-7: mv 實例
|||
|--------|-------|
| mv file1 file2 | 移動 file1 到 file2。若是 file2 存在,它的內容會被 file1 的內容重寫。 若是 file2 不存在,則建立 file2。 每種狀況下,file1 再也不存在。 |
| mv -i file1 file2 | 除了若是 file2 存在的話,在 file2 被重寫以前,用戶會獲得 提示信息外,這個和上面的選項同樣。 |
| mv file1 file2 dir1 | 移動 file1 和 file2 到目錄 dir1 中。dir1 必須已經存在。 |
| mv dir1 dir2 | 若是目錄 dir2 不存在,建立目錄 dir2,而且移動目錄 dir1 的內容到 目錄 dir2 中,同時刪除目錄 dir1。若是目錄 dir2 存在,移動目錄 dir1(及它的內容)到目錄 dir2。 |
touch命令用來建立文件。若是文件已經存在,則該命令會更新文件的時間戳
rm item...
表5-8: rm 選項
| 選項 | 意義 |
|--------|-------|
| -i, --interactive | 在刪除已存在的文件前,提示用戶確認信息。 若是不指定這個選項,rm 會默默地刪除文件 |
| -r, --recursive | 遞歸地刪除文件,這意味着,若是要刪除一個目錄,而此目錄 又包含子目錄,那麼子目錄也會被刪除。要刪除一個目錄,必須指定這個選項。 |
| -f, --force | 忽視不存在的文件,不顯示提示信息。這選項顛覆了「--interactive」選項。 |
| -v, --verbose | 在執行 rm 命令時,顯示翔實的操做信息。 |
表5-9: rm 實例
| 命令 | 運行結果 |
|--------|-------|
| rm file1 | 默默地刪除文件 |
| rm -i file1 | 除了在刪除文件以前,提示用戶確認信息以外,和上面的命令做用同樣。 |
| rm -r file1 dir1 | 刪除文件 file1, 目錄 dir1,及 dir1 中的內容。 |
| rm -rf file1 dir1 | 同上,除了若是文件 file1,或目錄 dir1 不存在的話,rm 仍會繼續執行。 |
小貼士。 不管何時,rm 命令用到通配符(除了仔細檢查輸入的內容外!), 用 ls 命令來測試通配符。這會讓你看到要刪除的文件列表。而後按下上箭頭按鍵,從新調用 剛剛執行的命令,用 rm 替換 ls。
ln file link
使用ln -s命令建立符號連接
$ ln -s target linkname
linkname參數是符號連接名稱,target參數是要指向的目標路徑,-s選項表示這是一個符號連接
type command
[me@linuxbox ~]$ type type type is a shell builtins [me@linuxbox ~]$ type ls ls is aliased to `ls --color=tty` [me@linuxbox ~]$ type cp cp is /bin/cp
[me@linuxbox ~]$ which ls /bin/ls
注意which
只對可執行程序有效
cd [-L|-P] [dir]
(一個豎槓字符 表示互斥選項)
事實上,若是咱們須要刪除一個文件內容(或者建立一個 新的空文件),可使用這樣的技巧:
[me@linuxbox ~]$ > ls-output.txt
怎樣才能把重定向結果追加到文件內容後面,而不是從開頭重寫文件?爲了這個目的, 咱們使用>>重定向符
[me@linuxbox ~]$ ls -l /bin/usr > ls-output.txt 2>&1
使用這種方法,咱們完成兩個重定向
重定向文件描述符2(標準錯誤)到文件描述符1(標準輸出)使用表示法2>&1。
如今的 bash 版本提供了第二種方法,更精簡合理的方法來執行這種聯合的重定向。
[me@linuxbox ~]$ ls -l /bin/usr &> ls-output.txt
在這個例子裏面,咱們使用單單一個表示法 &> 來重定向標準輸出和錯誤到文件 ls-output.txt
經過重定向輸出結果 到一個特殊的叫作」/dev/null」的文件。這個文件是系統設備,叫作位存儲桶,它能夠 接受輸入,而且對輸入不作任何處理。爲了隱瞞命令錯誤信息,咱們這樣作:
[me@linuxbox ~]$ ls -l /bin/usr 2> /dev/null
cat 命令讀取一個或多個文件,而後複製它們到標準輸出
cat [file]
你可使用 cat 來顯示 文件而沒有分頁,例如:
[me@linuxbox ~]$ cat ls-output.txt
將會顯示文件 ls-output.txt 的內容。cat 常常被用來顯示簡短的文本文件
咱們能用這個命令把它們鏈接起來:
cat movie.mpeg.0* > movie.mpeg
由於通配符老是以有序的方式展開,因此這些參數會以正確順序安排。
若是 cat 沒有給出任何參數,它會從標準輸入讀入數據,由於標準輸入,默認狀況下,鏈接到鍵盤。
[me@linuxbox ~]$ cat > lazy_dog.txt The quick brown fox jumped over the lazy dog. ^d
使用「<」重定向操做符,咱們把標準輸入源從鍵盤改到文件 lazy_dog.tx。咱們看到結果 和傳遞單個文件名做爲參數的執行結果同樣(cat lazy_dog.txt)
[me@linuxbox ~]$ cat < lazy_dog.txt The quick brown fox jumped over the lazy dog.
命令能夠從標準輸入讀取數據,而後再把數據輸送到標準輸出,命令的這種能力被 一個 shell 特性所利用,這個特性叫作管道線|
。
一個命令的 標準輸出能夠管道到另外一個命令的標準輸入:
command1 | command2
咱們用 less 來一頁一頁地顯示任何命令的輸出,命令把 它的運行結果輸送到標準輸出:
[me@linuxbox ~]$ ls -l /usr/bin | less
想象一下,咱們想把目錄/bin 和/usr/bin 中 的可執行程序都聯合在一塊兒,再把它們排序,而後瀏覽執行結果:
[me@linuxbox ~]$ ls /bin /usr/bin | sort | less
爲了確信 咱們的列表中不包含重複句子(這是說,出如今目錄/bin 和/usr/bin 中重名的程序),咱們添加 uniq 到咱們的管道線中:
[me@linuxbox ~]$ ls /bin /usr/bin | sort | uniq | less
若是咱們想看到重複的數據列表,讓 uniq 命令帶上」-d」選項,就像這樣:
[me@linuxbox ~]$ ls /bin /usr/bin | sort | uniq -d | less
若是 wc 不帶命令行參數,它接受標準輸入。」-l」選項限制命令輸出只能 報道行數。添加 wc 到管道線來統計數據,是個很便利的方法。查看咱們的有序列表中程序個數, 咱們能夠這樣作:
[me@linuxbox ~]$ ls /bin /usr/bin | sort | uniq | wc -l 2728
grep 是個很強大的程序,用來找到文件中的匹配文本。這樣使用 grep 命令:
grep pattern [file...]
當 grep 遇到一個文件中的匹配」模式」,它會打印出包含這個類型的行
咱們想在咱們的程序列表中,找到文件名中包含單詞」zip」的全部文件
[me@linuxbox ~]$ ls /bin /usr/bin | sort | uniq | grep zip bunzip2 bzip2 gunzip ...
-i
致使 grep 忽略大小寫當執行搜索時(一般,搜索是大小寫 敏感的)
-v
選項會告訴 grep 只打印不匹配的行
head / tail - 打印文件開頭部分/結尾部分,兩個命令都打印十行文本,可是能夠經過」-n」選項來調整命令打印的行數。
[me@linuxbox ~]$ head -n 5 ls-output.txt total 343496 ... [me@linuxbox ~]$ tail -n 5 ls-output.txt ... [me@linuxbox ~]$ ls /usr/bin | tail -n 5 znew ...
使用-f
選項,tail 命令繼續監測這個文件,當新的內容添加到文件後,它們會當即 出如今屏幕上。這會一直繼續下去直到你輸入 Ctrl-c
tee - 從 Stdin 讀取數據,並同時輸出到 Stdout 和文件
在 grep 過濾管道線的內容以前,來捕捉整個目錄列表到文件 ls.txt
[me@linuxbox ~]$ ls /usr/bin | tee ls.txt | grep zip bunzip2 bzip2 ....
shell 把「*
」展開成了 另外的東西,在 echo 命令被執行前。當回車鍵被按下時,shell 在命令被執行前在命令行上自動展開任何符合條件的字符, 因此 echo 命令從不會發現「*
」,只把它展開成結果,這種通配符工做機制叫作路徑名展開
[me@linuxbox ~]$ echo * Desktop Documents ls-output.txt Music Pictures Public Templates Videos
給出一個家目錄,它看起來像這樣
[me@linuxbox ~]$ ls Desktop ls-output.txt Pictures Templates ....
咱們可以執行如下參數展開模式:
[me@linuxbox ~]$ echo D* Desktop Documents
和:
[me@linuxbox ~]$ echo *s Documents Pictures Templates Videos
甚至是:
[me@linuxbox ~]$ echo [[:upper:]]* Desktop Documents Music Pictures Public Templates Videos
波浪號展開:
若是有用戶」foo」這個賬號,而後:
[me@linuxbox ~]$ echo ~foo /home/foo
算術表達式只支持整數(所有是數字,不帶小數點),可是能執行不少不一樣的操做。這裏是 一些它支持的操做符:
表 8-1: 算術操做符
操做符 | 說明 |
---|---|
+ | 加 |
- | 減 |
* | 乘 |
/ | 除(可是記住,由於展開只是支持整數除法,因此結果是整數。) |
% | 取餘,只是簡單的意味着,「餘數」 |
** | 取冪 |
花括號展開
[me@linuxbox ~]$ mkdir Pics [me@linuxbox ~]$ cd Pics [me@linuxbox Pics]$ mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12} [me@linuxbox Pics]$ ls 2007-01 2007-07 2008-01 2008-07 2009-01 2009-07 2007-02 2007-08 2008-02 2008-08 2009-02 2009-08 2007-03 2007-09 2008-03 2008-09 2009-03 2009-09 2007-04 2007-10 2008-04 2008-10 2009-04 2009-10 2007-05 2007-11 2008-05 2008-11 2009-05 2009-11 2007-06 2007-12 2008-06 2008-12 2009-06 2009-12
參數展開$
查看有效的變量列表,試試這個:
[me@linuxbox ~]$ printenv | less
命令替換
[me@linuxbox ~]$ ls -l $(which cp) -rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp
這裏咱們把 which cp 的執行結果做爲一個參數傳遞給 ls 命令,所以要想獲得 cp 程序的 輸出列表,沒必要知道它完整的路徑名
咱們不僅限制於簡單命令。也可使用整個管道線 (只展現部分輸出):
[me@linuxbox ~]$ file $(ls /usr/bin/* | grep zip) /usr/bin/bunzip2: symbolic link to `bzip2' ....
單詞分割機制會致使這個文件名被看做兩個獨自的參數,而不是所指望 的單個參數:
[me@linuxbox ~]$ ls -l two words.txt ls: cannot access two: No such file or directory ls: cannot access words.txt: No such file or directory
使用雙引號,咱們能夠阻止單詞分割,獲得指望的結果;進一步,咱們甚至能夠修復 破損的文件名。
[me@linuxbox ~]$ ls -l "two words.txt" -rw-rw-r-- 1 me me 18 2008-02-20 13:03 two words.txt [me@linuxbox ~]$ mv "two words.txt" two_words.txt
環境變量能夠經過export命令來設置。例如,若是想將shell變量$STUFF
變成環境變量,能夠執行以下 命令:
$ STUFF=blah $ export STUFF
使用如下命令能夠將路徑dir加入到PATH 的最前面,這樣shell會先查找dir路徑,而後再查找其餘路徑,你也能夠將路徑加入到PATH變量的最後面,這樣shell會最後查找dir路徑:
$ PATH=dir:$PATH $ PATH=$PATH:dir
clear - 清空屏幕
history - 顯示歷史列表內容
表9-1: 光標移動命令
| 按鍵 | 行動 |
|--------|-------|
| Ctrl-a | 移動光標到行首。 |
| Ctrl-e | 移動光標到行尾。 |
| Ctrl-f | 光標前移一個字符;和右箭頭做用同樣。 |
| Ctrl-b | 光標後移一個字符;和左箭頭做用同樣。 |
| Alt-f | 光標前移一個字。 |
| Alt-b | 光標後移一個字。 |
| Ctrl-l | 清空屏幕,移動光標到左上角。clear 命令完成一樣的工做。 |
表9-2: 文本編輯命令
| 按鍵 | 行動 |
|--------|-------|
| Ctrl-d | 刪除光標位置的字符。 |
| Ctrl-t | 光標位置的字符和光標前面的字符互換位置。 |
| Alt-t | 光標位置的字和其前面的字互換位置。 |
| Alt-l | 把從光標位置到字尾的字符轉換成小寫字母。 |
| Alt-u | 把從光標位置到字尾的字符轉換成大寫字母。 |
剪切下來的本文被存儲在一個叫作剪切環(kill-ring)的緩衝區中
表9-3: 剪切和粘貼命令
按鍵 | 行動 |
---|---|
Ctrl-k | 剪切從光標位置到行尾的文本。 |
Ctrl-u | 剪切從光標位置到行首的文本。 |
Alt-d | 剪切從光標位置到詞尾的文本。 |
Alt-Backspace | 剪切從光標位置到詞頭的文本。若是光標在一個單詞的開頭,剪切前一個單詞。 |
Ctrl-y | 把剪切環中的文本粘貼到光標位置。 |
表9-4: 自動補全命令
| 按鍵 | 行動 |
|--------|-------|
| Alt-? | 顯示可能的自動補全列表。在大多數系統中,你也能夠完成這個經過按 兩次 tab 鍵,這會更容易些。 |
| Alt-* | 插入全部可能的自動補全。當你想要使用多個可能的匹配項時,這個頗有幫助。 |
咱們想要找到列出目錄 /usr/bin 內容的命令。一種方法,咱們能夠這樣作:
[me@linuxbox ~]$ history | grep /usr/bin
咱們的搜索結果之中,咱們獲得一行,包含了有趣的命令,像這樣;
88 ls -l /usr/bin > ls-output.txt
數字 「88」 是這個命令在歷史列表中的行號。隨後在使用另外一種展開類型時,叫作 歷史命令展開,咱們會用到這個數字。咱們能夠這樣作,來使用咱們所發現的行:
[me@linuxbox ~]$ !88
bash 會把 「!88」 展開成爲歷史列表中88行的內容。
表10-1: 文件類型
| 屬性 | 文件類型 |
| ---- | ------------------------------------------------------------ |
| - | 一個普通文件 |
| d | 一個目錄 |
| l | 一個符號連接。注意對於符號連接文件,剩餘的文件屬性老是"rwxrwxrwx",並且都是 虛擬值。真正的文件屬性是指符號連接所指向的文件的屬性。 |
| c | 一個字符設備文件。這種文件類型是指按照字節流,來處理數據的設備。 好比說終端機,或者調制解調器 |
| b | 一個塊設備文件。這種文件類型是指按照數據塊,來處理數據的設備,例如一個硬盤,或者 CD-ROM 盤。 |
表10-4: chmod 命令符號表示法
|||
|-----|-----------|
| u | "user"的簡寫,意思是文件或目錄的全部者。|
| g | 用戶組。 |
| o | "others"的簡寫,意思是其餘全部的人。 |
| a | "all"的簡寫,是"u", "g"和「o」三者的聯合。 |
若是沒有指定字符,則假定使用」all」。執行的操做多是一個「+」字符,表示加上一個權限, 一個「-」,表示刪掉一個權限,或者是一個「=」,表示只有指定的權限可用,其它全部的權限被刪除。
權限由 「r」,「w」,和 「x」 來指定。這裏是一些符號表示法的實例:
表10-5: chmod 符號表示法實例
|||
|-----|-----------|
| u+x | 爲文件全部者添加可執行權限。 |
| u-x | 刪除文件全部者的可執行權限。 |
| +x | 爲文件全部者,用戶組,和其餘全部人添加可執行權限。 等價於 a+x。 |
| o-rw | 除了文件全部者和用戶組,刪除其餘人的讀權限和寫權限。 |
| go=rw | 給羣組的主人和任意文件擁有者的人讀寫權限。若是羣組的主人或全局以前已經有了執行的權限,他們將被移除。 |
| u+x,go=rw | 給文件擁有者執行權限並給組和其餘人讀和執行的權限。多種設定能夠用逗號分開。 |
默認狀況下,ps 不會顯示不少進程信息,只是列出與當前終端會話相關的進程
[me@linuxbox ~]$ ps PID TTY TIME CMD 5198 pts/1 00:00:00 bash 10129 pts/1 00:00:00 ps
TTY 是 「Teletype」 的簡寫,是指進程的控制終端。這裏,Unix 展現它的年齡。TIME 字段表示 進程所消耗的 CPU 時間數量mm:ss。
表11-1: 進程狀態
| 狀態 | 意義 |
| --- | --- |
| R | 運行。這意味着,進程正在運行或準備運行。 |
| S | 正在睡眠。 進程沒有運行,而是,正在等待一個事件, 好比說,一個按鍵或者網絡數據包。 |
| D | 不可中斷睡眠。進程正在等待 I/O,比方說,一個磁盤驅動器的 I/O。 |
| T | 已中止. 已經指示進程中止運行。稍後介紹更多。 |
| Z | 一個死進程或「殭屍」進程。這是一個已經終止的子進程,可是它的父進程尚未清空它。 (父進程沒有把子進程從進程表中刪除) |
| < | 一個高優先級進程。這可能會授予一個進程更多重要的資源,給它更多的 CPU 時間。 進程的這種屬性叫作 niceness。具備高優先級的進程聽說是很差的(less nice), 由於它佔用了比較多的 CPU 時間,這樣就給其它進程留下不多時間。 |
| N | 低優先級進程。 一個低優先級進程(一個「好」進程)只有當其它高優先級進程執行以後,纔會獲得處理器時間。 |
表11-2: BSD 風格的 ps 命令列標題
| 標題 | 意思 |
| --- | --- |
| USER | 用戶 ID. 進程的全部者。 |
| %CPU | 以百分比表示的 CPU 使用率 |
| %MEM | 以百分比表示的內存使用率 |
| VSZ | 虛擬內存大小 |
| RSS | 進程佔用的物理內存的大小,以千字節爲單位。 |
| START | 進程運行的起始時間。若超過24小時,則用天表示。 |
爲了看到更多動態的信息,咱們使用 top 命令。top 程序連續顯示系統進程更新的信息(默認狀況下,每三分鐘更新一次)
表11-3: top 命令信息字段
| 行號 | 字段 | 意義 |
| --- | --- | --- |
| 1 | top | 程序名。 |
| | 14:59:20 |當前時間。|
| | up 6:30 |這是正常運行時間。它是計算機從上次啓動到如今所運行的時間。 在這個例子裏,系統已經運行了六個半小時。|
| | 2 users |有兩個用戶登陸系統。|
| | load average: |加載平均值是指,等待運行的進程數目,也就是說,處於運行狀態的進程個數, 這些進程共享 CPU。展現了三個數值,每一個數值對應不一樣的時間週期。第一個是最後60秒的平均值, 下一個是前5分鐘的平均值,最後一個是前15分鐘的平均值。若平均值低於1.0,則指示計算機 工做不忙碌。|
| 2 | Tasks: | 總結了進程數目和各類進程狀態。 |
| 3 | Cpu(s): | 這一行描述了 CPU 正在執行的進程的特性。 |
| | 0.7%us |0.7% of the CPU is being used for user processes.這意味着進程在內核以外。|
| | 1.0%sy |1.0%的 CPU 時間被用於系統(內核)進程。|
| | 0.0%ni |0.0%的 CPU 時間被用於"nice"(低優先級)進程。|
| | 98.3%id |98.3%的 CPU 時間是空閒的。|
| | 0.0%wa |0.0%的 CPU 時間來等待 I/O。|
| 4 | Mem: | 展現物理內存的使用狀況。 |
| 5 | Swap: | 展現交換分區(虛擬內存)的使用狀況。 |
控制進程暫留
終止進程
ctrl+c
等價於kill -INT pid
kill pid
默認信號爲TERM
發 送STOP信號可讓進程暫停kill -STOP pid
此時暫留的進程能夠經過CONT
信號繼續執行
Shell也支持任務控制(Job Control),是經過不一樣的按鍵和命令向進程發送TSTP(相似STOP)和CONT 信號的一種方式。例如,你可使用CTRL-Z發送TSTP信號來中止進程,而後鍵入fg(將進程置於前 臺)或者bg(將進程移入後臺,見下一小節)繼續運行進程
若是使用CTRL-Z而不是CTRL-C,而後置之不理,最終會 造成大量處於暫停狀態的進程。
你可使用&操做符將進程設置爲後臺運行
例如,若是你要 解壓縮一個很大的文件(咱們將在2.18節介紹),同時又不想幹等執行結果,你就可使用下面的命令:
$ gunzip file.gz &
後臺交互最好的方式是將輸出重定向(輸入也能夠),好比重定向到文件或別的地方(咱們已經在2.14節介紹 過),這樣屏幕上就不會出現雜亂無章的輸出數據
表13-1: 光標移動按鍵
| 按鍵 | 移動光標 |
| ------------------- | -------------------------------------- |
| l or 右箭頭 | 向右移動一個字符 |
| h or 左箭頭 | 向左移動一個字符 |
| j or 下箭頭 | 向下移動一行 |
| k or 上箭頭 | 向上移動一行 |
| 0 (零按鍵) | 移動到當前行的行首。 |
| ^ | 移動到當前行的第一個非空字符。 |
| $ | 移動到當前行的末尾。 |
| w | 移動到下一個單詞或標點符號的開頭。 |
| W | 移動到下一個單詞的開頭,忽略標點符號。 |
| b | 移動到上一個單詞或標點符號的開頭。 |
| B | 移動到上一個單詞的開頭,忽略標點符號。 |
| Ctrl-f or Page Down | 向下翻一頁 |
| Ctrl-b or Page Up | 向上翻一頁 |
| numberG | 移動到第 number 行。例如,1G 移動到文件的第一行。 |
| G | 移動到文件末尾。 |
vi 中的許多命令均可以在前面加上一個數字,比方說上面提到的」G」命令。在命令以前加上一個 數字,咱們就能夠指定命令執行的次數。例如,命令」5j」致使 vi 向下移動5行。
u撤回
a追加
A
表13-2: 文本行打開按鍵
| 命令 | 打開行 |
|-------|---------|
| o | 當前行的下方打開一行。 |
| O | 當前行的上方打開一行。 |
表13-3: 文本刪除命令
| 命令 | 刪除的文本 |
| ---- | ---------------------------------------- |
| x | 當前字符 |
| 3x | 當前字符及其後的兩個字符。 |
| dd | 當前行。 |
| 5dd | 當前行及隨後的四行文本。 |
| dW | 從光標位置開始到下一個單詞的開頭。 |
| d$ | 從光標位置開始到當前行的行尾。 |
| d0 | 從光標位置開始到當前行的行首。 |
| d^ | 從光標位置開始到文本行的第一個非空字符。 |
| dG | 從當前行到文件的末尾。 |
| d20G | 從當前行到文件的第20行。 |
表13-4: 複製命令
| 命令 | 複製的內容 |
| ---- | ---------------------------------------- |
| yy | 當前行。 |
| 5yy | 當前行及隨後的四行文本。 |
| yW | 從當前光標位置到下一個單詞的開頭。 |
| y$ | 從當前光標位置到當前行的末尾。 |
| y0 | 從當前光標位置到行首。 |
| y^ | 從當前光標位置到文本行的第一個非空字符。 |
| yG | 從當前行到文件末尾。 |
| y20G | 從當前行到文件的第20行。 |
J鏈接行
f 命令查找一行,移動光標到下一個所指定的字符上。例如,命令 fa 會把光標定位到同一行中 下一個出現的」a」字符上。在一行中執行了字符的查找命令以後,經過輸入分號來重複這個查找。
目前進度30%
壓縮文件
gzip命令只壓縮單個文件,要壓縮和歸檔多個文件和目錄,可使用tar命令
$ tar cvf archive.tar file1 file2 ...
選項v用來顯示詳細的命令執行信息(好比正在歸檔的文件和目錄名),再加一個v選項能夠顯示文件大 小和權限等信息
選項f表明文件,後面須要指定一個歸檔文件名(如<archive>.tar
)。若是不指定歸檔文件名,則歸檔到磁帶設備,若是文件名爲-,則是歸檔到標準輸入或者輸出。
解壓 選項x表明解壓模式
$ tar xvf archive.tar
fork():當進程調用fork()時,內核建立一個和該進程幾乎如出一轍的副本。 exec():當進程調用exec(program)時,內核啓動program來替換當前的進程。
No such file or directory 這多是咱們最常遇到的錯誤:訪問一個不存在的文件或目錄。因爲Unix的I/O系統對文件和目錄不作區 分,因此當你試圖訪問一個不存在的文件,進入一個不存在的目錄,或將文件寫入一個不存在的目錄 時,都會出現這個錯誤。
File exists
若是新建文件的名稱和現有的文件或者目錄重名,就會出現這個錯誤。
Not a directory, Is a directory
這個錯誤出如今當你把文件看成目錄或者反之,把目錄看成文件。例如:
$ touch a $ touch a/b touch: a/b: Not a directory
錯誤出在第二個命令這裏,將文件a看成了目錄
No space left on device
說明硬盤空間不足。
Permission denied
當你試圖讀或寫一個沒有訪問權限的文件或目錄時,會遇到這個錯誤。當你試圖執行一個你無權執行 (即便你有讀的權限)的文件時也會出現這個錯誤。咱們會在2.17節詳細介紹。
Operation not permitted
當你試圖終止一個你無權終止的進程時,會出現這個錯誤。
Segmentation fault, Bus error
分段故障,總線錯誤。分段故障這個錯誤一般是告訴你,你運行的程序出了問題。可能你的程序試圖訪問它無權訪問的內存空間,這時操做系統就會將其終止。總線錯誤說明你的程序訪問內存的方式有問 題。遇到這類錯誤一般是由於程序的輸入數據有問題。
ls -l首字母(表明文件模式):字符b(block)、c(character)、p(pipe)和 s(socket)表明設備文件。下面是詳細介紹。
塊設備
程序從塊設備中按固定的塊大小讀取數據。前面的例子中,sda1是一個磁盤設備,它是塊設備的 一種。咱們可以輕鬆地將磁盤劃分紅數據區塊。由於磁盤的容量是固定的,索引發來也很方便, 因此進程可以經過內核訪問磁盤上的任意區塊。
字符設備
字符設備處理流數據。你只能對字符設備讀取和寫入字符數據,如前面例子中的/dev/null。字符設 備沒有固定容量,當你對字符設備進行讀寫時,內核對相應的設備進行讀寫操做。字符設備的一 個例子是打印機,值得注意的是,內核在流數據送達設備和進程後不會備份和再次驗證。
管道設備
命名管道設備和字符設備相似,不一樣的是輸入輸出端不是內核驅動程序,而是另一個進程。
套接字設備
套接字設備是跨進程通訊常常用到的特殊接口。它們常常會存放於/dev目錄以外。套接字文件代 表Unix域套接字
Linux內核經過一個文件和目錄系統提供sysfs界面,旨在基於硬件屬性統一顯示設備的相關信息
/dev目錄中的文件是供用戶進程使用設備的,而/sys/devices中的文件是用來查看 設備信息和管理設備用的
/sys/block目錄中包含系統中的全部塊設備文件,不過它們都是符號連接。運行命令ls -l /sys/block能夠顯示指向sysfs的實際路徑。
在/dev目錄中查看設備文件的sysfs路徑不太方便,可使用udevadm命令來查看路徑和其餘屬性
$ udevadm info --query=all --name=/dev/sda
dd命令對於塊設備和字符設備很是有用,它的主要功能是從輸入文件和輸入流讀取數據而後寫入輸出文件和輸出流,在此過程當中可能涉及到編碼轉換
dd命令複製固定大小的數據塊,它使用等號=而不是減號-來設定選項和參數值
$ dd if=/dev/zero of=new_file bs=1024 count=1
如下是dd命令的一些重要選項。
if=file:表明輸入文件,默認是標準輸入。
of=file:表明輸出文件,默認是標準輸出。
bs=size:表明數據塊大小。dd命令一次讀取或者寫入數據的大小。對於海量數據,你能夠在數 字後設置b和k來分別表明512字節和1024字節。如:bs=1k和bs=1024同樣。
ibs=size,obs=size:表明輸入和輸出塊大小。若是輸入輸出塊大小相同,你可使用bs選 項,若是不相同的話,可使用ibs和obs分別指定。
count=num:表明複製塊的總數。在處理大文件或者無限數據流(/dev/zero)的時候,你可能會須要在某個地方中止dd複製,否則的話將會消耗大量硬盤空間和CPU時間。這時你可使用count和skip選項從大文件或設備中複製一小部分數據。
skip=num:表明跳過前面的num個塊,不將它們複製到輸出。
其他暫留