Linux Shell筆記
命令
echo
打印
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”,則結果會以相反的順序輸出
[[email protected] ~]$ 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 | 文件名。 |
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 程序 |
表 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 文件系統層次體系標準可通過以下鏈接找到:
http://www.pathname.com/fhs/
Q.什麽是軟鏈接/硬鏈接
操作文件和目錄
- cp — 復制文件和目錄
- mv — 移動/重命名文件和目錄
- mkdir — 創建目錄
- rm — 刪除文件和目錄
- ln — 創建硬鏈接和符號鏈接
通配符
通配符 | 意義 |
---|---|
* | 匹配任意多個字符(包括零個或一個) |
? | 匹配任意一個字符(不包括零個) |
[characters] | 匹配任意一個屬於字符集中的字符 |
[!characters] | 匹配任意一個不是字符集中的字符 |
[[:class:]] | 匹配任意一個屬於指定字符類中的字符 |
表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。 |
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
- type – 說明怎樣解釋一個命令名
- which – 顯示會執行哪個可執行程序
- man – 顯示命令手冊頁
- apropos – 顯示一系列適合的命令
- info – 顯示命令 info
- whatis – 顯示一個命令的簡潔描述
- alias – 創建命令別名
type command
[[email protected] ~]$ type type
type is a shell builtins
[[email protected] ~]$ type ls
ls is aliased to `ls --color=tty`
[[email protected] ~]$ type cp
cp is /bin/cp
[[email protected] ~]$ which ls
/bin/ls
註意which
只對可執行程序有效
cd [-L|-P] [dir]
(一個豎杠字符 表示互斥選項)
重定向
- cat - 連接文件
- sort - 排序文本行
- uniq - 報道或省略重復行
- grep - 打印匹配行
- wc - 打印文件中換行符,字,和字節個數
- head - 輸出文件第一部分
- tail - 輸出文件最後一部分
事實上,如果我們需要刪除一個文件內容(或者創建一個 新的空文件),可以使用這樣的技巧:
[[email protected] ~]$ > ls-output.txt
怎樣才能把重定向結果追加到文件內容後面,而不是從開頭重寫文件?為了這個目的, 我們使用>>重定向符
[[email protected] ~]$ ls -l /bin/usr > ls-output.txt 2>&1
使用這種方法,我們完成兩個重定向
重定向文件描述符2(標準錯誤)到文件描述符1(標準輸出)使用表示法2>&1。
現在的 bash 版本提供了第二種方法,更精簡合理的方法來執行這種聯合的重定向。
[[email protected] ~]$ ls -l /bin/usr &> ls-output.txt
在這個例子裏面,我們使用單單一個表示法 &> 來重定向標準輸出和錯誤到文件 ls-output.txt
通過重定向輸出結果 到一個特殊的叫做”/dev/null”的文件。這個文件是系統設備,叫做位存儲桶,它可以 接受輸入,並且對輸入不做任何處理。為了隱瞞命令錯誤信息,我們這樣做:
[[email protected] ~]$ ls -l /bin/usr 2> /dev/null
cat 命令讀取一個或多個文件,然後復制它們到標準輸出
cat [file]
你可以使用 cat 來顯示 文件而沒有分頁,例如:
[[email protected] ~]$ cat ls-output.txt
將會顯示文件 ls-output.txt 的內容。cat 經常被用來顯示簡短的文本文件
我們能用這個命令把它們連接起來:
cat movie.mpeg.0* > movie.mpeg
因為通配符總是以有序的方式展開,所以這些參數會以正確順序安排。
如果 cat 沒有給出任何參數,它會從標準輸入讀入數據,因為標準輸入,默認情況下,連接到鍵盤。
[[email protected] ~]$ cat > lazy_dog.txt
The quick brown fox jumped over the lazy dog.
^d
使用“<”重定向操作符,我們把標準輸入源從鍵盤改到文件 lazy_dog.tx。我們看到結果 和傳遞單個文件名作為參數的執行結果一樣(cat lazy_dog.txt)
[[email protected] ~]$ cat < lazy_dog.txt
The quick brown fox jumped over the lazy dog.
命令可以從標準輸入讀取數據,然後再把數據輸送到標準輸出,命令的這種能力被 一個 shell 特性所利用,這個特性叫做管道線|
。
一個命令的 標準輸出可以管道到另一個命令的標準輸入:
command1 | command2
我們用 less 來一頁一頁地顯示任何命令的輸出,命令把 它的運行結果輸送到標準輸出:
[[email protected] ~]$ ls -l /usr/bin | less
想象一下,我們想把目錄/bin 和/usr/bin 中 的可執行程序都聯合在一起,再把它們排序,然後瀏覽執行結果:
[[email protected] ~]$ ls /bin /usr/bin | sort | less
為了確信 我們的列表中不包含重復句子(這是說,出現在目錄/bin 和/usr/bin 中重名的程序),我們添加 uniq 到我們的管道線中:
[[email protected] ~]$ ls /bin /usr/bin | sort | uniq | less
如果我們想看到重復的數據列表,讓 uniq 命令帶上”-d”選項,就像這樣:
[[email protected] ~]$ ls /bin /usr/bin | sort | uniq -d | less
如果 wc 不帶命令行參數,它接受標準輸入。”-l”選項限制命令輸出只能 報道行數。添加 wc 到管道線來統計數據,是個很便利的方法。查看我們的有序列表中程序個數, 我們可以這樣做:
[[email protected] ~]$ ls /bin /usr/bin | sort | uniq | wc -l
2728
grep 是個很強大的程序,用來找到文件中的匹配文本。這樣使用 grep 命令:
grep pattern [file...]
當 grep 遇到一個文件中的匹配”模式”,它會打印出包含這個類型的行
我們想在我們的程序列表中,找到文件名中包含單詞”zip”的所有文件
[[email protected] ~]$ ls /bin /usr/bin | sort | uniq | grep zip
bunzip2
bzip2
gunzip
...
-i
導致 grep 忽略大小寫當執行搜索時(通常,搜索是大小寫 敏感的)
-v
選項會告訴 grep 只打印不匹配的行
head / tail - 打印文件開頭部分/結尾部分,兩個命令都打印十行文本,但是可以通過”-n”選項來調整命令打印的行數。
[[email protected] ~]$ head -n 5 ls-output.txt
total 343496
...
[[email protected] ~]$ tail -n 5 ls-output.txt
...
[[email protected] ~]$ ls /usr/bin | tail -n 5
znew
...
使用-f
選項,tail 命令繼續監測這個文件,當新的內容添加到文件後,它們會立即 出現在屏幕上。這會一直繼續下去直到你輸入 Ctrl-c
tee - 從 Stdin 讀取數據,並同時輸出到 Stdout 和文件
在 grep 過濾管道線的內容之前,來捕捉整個目錄列表到文件 ls.txt
[[email protected] ~]$ ls /usr/bin | tee ls.txt | grep zip
bunzip2
bzip2
....
shell特技
shell 把“*
”展開成了 另外的東西,在 echo 命令被執行前。當回車鍵被按下時,shell 在命令被執行前在命令行上自動展開任何符合條件的字符, 所以 echo 命令從不會發現“*
”,只把它展開成結果,這種通配符工作機制叫做路徑名展開
[[email protected] ~]$ echo *
Desktop Documents ls-output.txt Music Pictures Public Templates Videos
給出一個家目錄,它看起來像這樣
[[email protected] ~]$ ls
Desktop ls-output.txt Pictures Templates
....
我們能夠執行以下參數展開模式:
[[email protected] ~]$ echo D*
Desktop Documents
和:
[[email protected] ~]$ echo *s
Documents Pictures Templates Videos
甚至是:
[[email protected] ~]$ echo [[:upper:]]*
Desktop Documents Music Pictures Public Templates Videos
波浪號展開:
如果有用戶”foo”這個帳號,然後:
[[email protected] ~]$ echo ~foo
/home/foo
算術表達式只支持整數(全部是數字,不帶小數點),但是能執行很多不同的操作。這裏是 一些它支持的操作符:
表 8-1: 算術操作符
操作符 | 說明 |
---|---|
+ | 加 |
- | 減 |
* | 乘 |
/ | 除(但是記住,因為展開只是支持整數除法,所以結果是整數。) |
% | 取余,只是簡單的意味著,“余數” |
** | 取冪 |
花括號展開
[[email protected] ~]$ mkdir Pics
[[email protected] ~]$ cd Pics
[[email protected] Pics]$ mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12}
[[email protected] 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
參數展開$
查看有效的變量列表,試試這個:
[[email protected] ~]$ printenv | less
命令替換
[[email protected] ~]$ ls -l $(which cp)
-rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp
這裏我們把 which cp 的執行結果作為一個參數傳遞給 ls 命令,因此要想得到 cp 程序的 輸出列表,不必知道它完整的路徑名
我們不只限制於簡單命令。也可以使用整個管道線 (只展示部分輸出):
[[email protected] ~]$ file $(ls /usr/bin/* | grep zip)
/usr/bin/bunzip2: symbolic link to `bzip2'
....
單詞分割機制會導致這個文件名被看作兩個獨自的參數,而不是所期望 的單個參數:
[[email protected] ~]$ ls -l two words.txt
ls: cannot access two: No such file or directory
ls: cannot access words.txt: No such file or directory
使用雙引號,我們可以阻止單詞分割,得到期望的結果;進一步,我們甚至可以修復 破損的文件名。
[[email protected] ~]$ ls -l "two words.txt"
-rw-rw-r-- 1 me me 18 2008-02-20 13:03 two words.txt
[[email protected] ~]$ mv "two words.txt" two_words.txt
鍵盤操作
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 內容的命令。一種方法,我們可以這樣做:
[[email protected] ~]$ history | grep /usr/bin
我們的搜索結果之中,我們得到一行,包含了有趣的命令,像這樣;
88 ls -l /usr/bin > ls-output.txt
數字 “88” 是這個命令在歷史列表中的行號。隨後在使用另一種展開類型時,叫做 歷史命令展開,我們會用到這個數字。我們可以這樣做,來使用我們所發現的行:
[[email protected] ~]$ !88
bash 會把 “!88” 展開成為歷史列表中88行的內容。
權限
- id – 顯示用戶身份號
- chmod – 更改文件模式
- umask – 設置默認的文件權限
- su – 以另一個用戶的身份來運行 shell
- sudo – 以另一個用戶的身份來執行命令
- chown – 更改文件所有者
- chgrp – 更改文件組所有權
- passwd – 更改用戶密碼
表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 – 報告當前進程快照
- top – 顯示任務
- jobs – 列出活躍的任務
- bg – 把一個任務放到後臺執行
- fg – 把一個任務放到前臺執行
- kill – 給一個進程發送信號
- killall – 殺死指定名字的進程
- shutdown – 關機或重啟系統
默認情況下,ps 不會顯示很多進程信息,只是列出與當前終端會話相關的進程
[[email protected] ~]$ ps
PID TTY TIME CMD
5198 pts/1 00:00:00 bash
10129 pts/1 00:00:00 ps
TTY 是 “Teletype” 的簡寫,是指進程的控制終端。這裏,Unix 展示它的年齡。TIME 字段表示 進程所消耗的 CPU 時間數量。
表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: | 展示交換分區(虛擬內存)的使用情況。 |
控制進程暫留
shell環境
- printenv - 打印部分或所有的環境變量
- set - 設置 shell 選項
- export — 導出環境變量,讓隨後執行的程序知道。
- alias - 創建命令別名
VI
表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%
Linux Shell筆記