(windows10) ubuntu config --default-user root 指定子系統的登錄賬號
(windows10) wsl 進入子系統
命令&權限
- 快捷鍵
按鍵 | 行動 |
---|---|
Ctrl-a | 移動光標到行首。 |
Ctrl-e | 移動光標到行尾。 |
Ctrl-k | 剪切從光標位置到行尾的文本。 |
Ctrl-u | 剪切從光標位置到行首的文本。 |
Ctrl-y | 把剪切環中的文本粘貼到光標位置。 |
Ctrl-l | 清空屏幕,移動光標到左上角。clear 命令完成同樣的工作。 |
Alt-f | 光標前移一個字。 |
Alt-b | 光標后移一個字。 |
Alt-l | 把從光標位置到字尾的字符轉換成小寫字母。 |
Alt-u | 把從光標位置到字尾的字符轉換成大寫字母。 |
- 通配符
接受文件名作為參數的命令,支持下列通配符
字符類 | 意義 |
---|---|
* | 匹配任意多個字符(包括零個或一個) |
? | 匹配任意一個字符(不包括零個) |
[characters] | 匹配任意一個屬于字符集中的字符 |
[!characters] | 匹配任意一個不是字符集中的字符 |
[:lower:] | 匹配任意一個小寫字母 |
[:upper] | 匹配任意一個大寫字母 |
---- | ---- |
* | 所有文件 |
g* | 文件名以“g”開頭的文件 |
b*.txt | 以”b” 開頭,中間有零個或任意多個字符,并以”.txt” 結尾的文件 |
Data??? | 以“Data”開頭,其后緊接著 3 個字符的文件 |
[abc]* | 文件名以”a”,”b”, 或”c” 開頭的文件 |
B.[0-9][0-9][0-9] | 以”B.” 開頭,并緊接著 3 個數字的文件 |
[[:upper:]]* | 以大寫字母開頭的文件 |
[![:digit:]]* | 不以數字開頭的文件 |
*[[:lower:]123] | 文件名以小寫字母結尾,或以“1”,“2”,或“3”結尾的文件 |
創建軟連接
ln -s src link
當源文件被刪除時,軟鏈接失效,而硬鏈接還可以繼續用來訪問源文件。去掉[-s] 參數可創建硬鏈接。查看命令類型
type ls
命令有四種類型:
1. 是一個可執行程序,就像我們所看到的位于目錄/usr/bin 中的文件一樣。屬于這一類的程序,可以編譯成二進制文件,諸如用 C 和 C++ 語言寫成的程序, 也可以是由腳本語言寫成的程序,比如說 shell,perl,python,ruby,等等。
2. 是一個內建于 shell 自身的命令。bash 支持若干命令,內部叫做 shell 內部命令(builtins)。例如,cd 命令,就是一個 shell 內部命令。
3. 是一個 shell 函數。這些是小規模的 shell 腳本,它們混合到環境變量中。在后續的章節里,我們將討論配置環境變量以及書寫 shell 函數。但是現在,僅僅意識到它們的存在就可以了。
4. 是一個命令別名。我們可以定義自己的命令,建立在其它命令之上。
別名命令
alias m='mkdir m' 創建
unalias m 刪除重定向
ls -al aa 1>>ls-output.txt 2>&1
ls -al aa &>>ls-output.txt(等價)
將標準輸入重定向至文件,標準錯誤重定向至標準輸出(即文件)
2> /dev/null 隱藏標準錯誤顯示文件
tail -f /var/log/messages 實時顯示最后10行,這個文件是記錄系統的一舉一動歷史記錄
history | grep mv
!88 歷史記錄展開,再次鍵入該條歷史記錄文件類型
屬性 | 文件類型 |
---|---|
- | 一個普通文件 |
d | 一個目錄 |
l | 一個符號鏈接。注意對于符號鏈接文件,剩余的文件屬性總是”rwxrwxrwx”,而且都是虛擬值。真正的文件屬性是指符號鏈接所指向的文件的屬性。 |
c | 一個字符設備文件。這種文件類型是指按照字節流,來處理數據的設備。比如說終端機,或者調制解調器 |
b | 一個塊設備文件。這種文件類型是指按照數據塊,來處理數據的設備,例如一個硬盤,或者 CD-ROM 盤。 |
文件權限
chmod u+x,go=rw 1.txt 給文件擁有者執行權限并給組和其他人讀和執行的
權限。多種設定可以用逗號分開。
chown [owner][:[group]] 1.txt 更改文件或目錄的所有者和用戶組添加用戶
adduser unual 創建用戶
passwd unual 修改用戶的密碼
進程
- 查看進程快照信息
ps aux
USER | PID | %CPU | %MEM | VSZ | RSS | TTY | STAT | START | TIME | COMMAND |
---|---|---|---|---|---|---|---|---|---|---|
root | 1 | 0.0 | 0.0 | 8324 | 152 | ? | Ss | 21:38 | 0:00 | /init |
root | 3 | 0.0 | 0.0 | 8328 | 156 | tty1 | Ss | 21:38 | 0:00 | /init |
unual | 4 | 0.0 | 0.0 | 16892 | 3428 | tty1 | S | 21:38 | 0:00 | -bash |
unual | 21 | 0.0 | 0.0 | 17380 | 1920 | tty1 | R | 21:43 | 0:00 | ps aux |
字段 | 含義 |
---|---|
USER | 用戶 ID. 進程的所有者。 |
%CPU | 以百分比表示的 CPU 使用率 |
%MEM | 以百分比表示的內存使用率 |
VSZ | 虛擬內存大小 |
RSS | 進程占用的物理內存的大小,以千字節為單位。 |
START | 進程運行的起始時間。若超過 24 小時,則用天表示。 |
STAT字段 | 含義 |
---|---|
R | 運行。這意味著,進程正在運行或準備運行。 |
S | 正在睡眠。進程沒有運行,而是,正在等待一個事件,比如說,一個按鍵或者網絡數據包。 |
D | 不可中斷睡眠。進程正在等待 I/O,比方說,一個磁盤驅動器的 I/O。 |
T | 已停止. 已經指示進程停止運行。稍后介紹更多。 |
Z | 一個死進程或“僵尸”進程。這是一個已經終止的子進程,但是它的父進程還沒有清空它。(父進程沒有把子進程從進程表中刪除) |
< | 一個高優先級進程。這可能會授予一個進程更多重要的資源,給它更多的 CPU 時間。進程的這種屬性叫做 niceness。具有高優先級的進程據說是不好的(less nice),因為它占用了比較多的 CPU 時間,這樣就給其它進程留下很少時間。 |
N | 低優先級進程。一個低優先級進程(一個“好”進程)只有當其它高優先級進程執行之后,才會得到處理器時間。 |
- 查看計算機運行狀態和進程
top
top - 21:56:19 up 17 min, 0 users, load average: 0.52, 0.58, 0.59
Tasks: 4 total, 1 running, 3 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 1.1 sy, 0.0 ni, 98.5 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
KiB Mem : 8295652 total, 5215984 free, 2850316 used, 229352 buff/cache
KiB Swap: 25165824 total, 25150436 free, 15388 used. 5311604 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22 unual 20 0 17620 2036 1504 R 0.3 0.0 0:00.07 top
1 root 20 0 8324 152 128 S 0.0 0.0 0:00.06 init
3 root 20 0 8328 156 120 S 0.0 0.0 0:00.00 init
4 unual 20 0 16892 3428 3324 S 0.0 0.0 0:00.06 bash
行號 | 字段 | 含義 |
---|---|---|
1 | top | 程序名。 |
21:56:19 | 當前時間。 | |
up 17min | 這是正常運行時間。它是計算機從上次啟動到現在所運行的時間。在這個例子里,系統已經運行了17分鐘。 | |
load average:0.52, 0.58, 0.59 | 加載平均值是指,等待運行的進程數目,也就是說,處于運行狀態的進程個數,這些進程共享 CPU。展示了三個數值,每個數值對應不同的時間周期。第一個是前 60 秒的平均值,下一個是前 5 分鐘的平均值,最后一個是前 15 分鐘的平均值。若平均值低于 1.0,則指示計算機工作不忙碌。 | |
2 | Tasks: | 總結了進程數目和各種進程狀態。 |
3 | Cpu(s): | 這一行描述了 CPU 正在執行的進程的特性。 |
0.2us | 0.2% of the CPU is being used for user processes. 這意味著進程在內核之外。 | |
1.1sy | 1.1% 的 CPU 時間被用于系統(內核)進程。 | |
0.0ni | 0.0% 的 CPU 時間被用于”nice”(低優先級)進程。 | |
98.5id | 98.5% 的 CPU 時間是空閑的。 | |
0.0wa | 0.0% 的 CPU 時間來等待 I/O。 | |
4 | Mem: | 展示物理內存的使用情況。 |
5 | Swap: | 展示交換分區(虛擬內存)的使用情況。 |
后臺任務
xlogo &以列出從終端中啟動的任務
jobs
[1]+ Running xlogo &將后臺任務返回前臺
fg %1暫停任務
ctrl + z將任務移到后臺
bg %1通過 kill 命令給進程發送信號
kill [-signal] PID
編號 | 名字 | 含義 |
---|---|---|
1 | HUP | 掛起。這是美好往昔的痕跡,那時候終端機通過電話線和調制解調器連接到遠端的計算機。這個信號被用來告訴程序,控制的終端機已經“掛起”。通過關閉一個終端會話,可以說明這個信號的作用。發送這個信號到終端機上的前臺程序,程序會終止。許多守護進程也使用這個信號,來重新初始化。這意味著,當發送這個信號到一個守護進程后,這個進程會重新啟動,并且重新讀取它的配置文件。Apache 網絡服務器守護進程就是一個例子。 |
2 | INT | 中斷。實現和 Ctrl-c 一樣的功能,由終端發送。通常,它會終止一個程序。 |
9 | KILL | 殺死。這個信號很特別。鑒于進程可能會選擇不同的方式,來處理發送給它的信號,其中也包含忽略信號,這樣呢,從不發送 Kill 信號到目標進程。而是內核立即終止這個進程。當一個進程以這種方式終止的時候,它沒有機會去做些“清理”工作,或者是保存勞動成果。因為這個原因,把 KILL 信號看作殺手锏,當其它終止信號失敗后,再使用它。 |
15 | TERM | 終止。這是 kill 命令發送的默認信號。如果程序仍然“活著”,可以接受信號,那么這個程序將終止。 |
18 | CONT | 繼續。在停止一段時間后,進程恢復運行。 |
19 | STOP | 停止。這個信號導致進程停止運行,而沒有終止。像KILL 信號,它不被發送到目標進程,因此它不能被忽略。 |
eg: kill -9 108
[1] Killed top
樹型結構的進程列表
pstree系統資源使用快照
vmstat
輸出一個系統資源使用快照,包括內存,交換分區和磁盤I/O。為了看到連續的顯示結果,則在命令名后加上延時的時間(以秒為單位)。例如,“vmstat 5”。終止輸出,按下Ctrl-c 組合鍵。
SHELL
- shell環境變量
登錄 shell 會話會提示用戶輸入用戶名和密碼;例如,我們啟動一個虛擬控制臺會話。當我們在 GUI 模式下運行終端會話時,非登錄 shell 會話會出現。
類別 | 文件 | 內容 |
---|---|---|
登錄shell | /etc/profile | 應用于所有用戶的全局配置腳本。 |
?/.bash_profile | 用戶私人的啟動文件。可以用來擴展或重寫全局配置腳本中的設置。 | |
?/.bash_login | 如果文件 ?/.bash profile 沒有找到,bash 會嘗試讀取這個腳本。 | |
?/.profile | 如果文件 ?/.bash profile 或文件 ?/.bash login 都沒有找到,bash 會試圖讀取這個文件。這是基于 Debian 發行版的默認設置,比方說 Ubuntu。 | |
非登錄shell | /etc/bash.bashrc | 應用于所有用戶的全局配置文件。 |
?/.bashrc | 用戶私有的啟動文件。可以用來擴展或重寫全局配置腳本中的設置。 |
-
登錄shell:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) ->( ~/.bashrc -> /etc/bashrc) -> ~/.bash_logout
- profile(由Bourne Shell和Korn Shell使用)和.bash_login(由C Shell使用)兩個文件是.bash_profile的同義詞,目的是為了兼容其它Shell
- bash_profile中一般會執行.bashrc
交互式非登陸shell: ~/.bashrc -> /etc/bashrc
在普通用戶看來,文件 ~/.bashrc 可能是最重要的啟動文件,因為它幾乎總是被讀取。
VI編輯器
按鍵 | 移動光標 |
---|---|
l or 右箭頭 | 向右移動一個字符 |
h or 左箭頭 | 向左移動一個字符 |
j or 下箭頭 | 向下移動一行 |
k or 上箭頭 | 向上移動一行 |
0 | (零按鍵) 移動到當前行的行首。 |
? | 移動到當前行的第一個非空字符。 |
$ | 移動到當前行的末尾。 |
w | 移動到下一個單詞或標點符號的開頭。 |
W | 移動到下一個單詞的開頭,忽略標點符號。 |
b | 移動到上一個單詞或標點符號的開頭。 |
B | 移動到上一個單詞的開頭,忽略標點符號。 |
Ctrl-f or Page Down | 向下翻一頁 |
Ctrl-b or Page Up | 向上翻一頁 |
nG | 移動到第 n行。例如,1G 移動到文件的第一行。 |
G | 移動到文件末尾。 |
按鍵 | 效果 |
---|---|
a | 當前光標后插入 |
A | 當前行末尾插入 |
o | 當前行的下方打開一行,進入編輯模式 |
O | 當前行的上方打開一行,進入編輯模式 |
- | - |
x | 刪除當前字符 |
3x | 刪除當前字符及其后的兩個字符。 |
dd | 刪除當前行。 |
5dd | 刪除當前行及隨后的四行文本。 |
dW | 刪除從光標位置開始到下一個單詞的開頭。 |
d$ | 刪除從光標位置開始到當前行的行尾。 |
d0 | 刪除從光標位置開始到當前行的行首。 |
d? | 刪除從光標位置開始到文本行的第一個非空字符。 |
dG | 刪除從當前行到文件的末尾。 |
d20G | 刪除從當前行到文件的第 20 行。 |
- | - |
yy | 復制當前行。 |
5yy | 復制當前行及隨后的四行文本。 |
yW | 復制從當前光標位置到下一個單詞的開頭。 |
y$ | 復制從當前光標位置到當前行的末尾。 |
y0 | 復制從當前光標位置到行首。 |
y? | 復制從當前光標位置到文本行的第一個非空字符。 |
yG | 復制從當前行到文件末尾。 |
y20G | 復制從當前行到文件的第 20 行。 |
p | 在下方新開一行,粘貼復制內容 |
P | 在上方新開一行,粘貼復制內容 |
J | 將下一行拼接到當前行末尾 |
u | 撤銷之前的修改 |
fx | 移動光標到當前行下一個x的字符上 |
- | - |
/word | 查找word,n查找下一個 |
- | - |
:%s/Line/line/gc | |
: | 冒號字符運行一個 ex 命令。 |
% | 指定要操作的行數。% 是一個快捷方式,表示從一行到最后一行。另外,操作范圍也可以用 1,5 來代替(因為我們的文件只有 5 行文本),或者用 1,$ 來代替,意是“從第一行到文件的最后一行。”如果省略了文本行的范圍,那么操作只對當前行生效。 |
s | 指定操作。在這種情況下是,替換(查找與替代)。 |
/Line/line | 查找類型與替代文本。 |
g | 這是“全局”的意思,意味著對文本行中所有匹配的字符串執行查找和替換操作。如果省略 g,則只替換每個文本行中第一個匹配的字符串。 |
c | 需要用戶確認每一個替換 |
:r file1.txt | 復制整個file1.txt到當前文件 |
vi file1.txt file2.txt
可以同時編輯兩個文件,通過:n/:N切換顯示文件
- 命令提示符
PS1 環境變量定義了命令提示符的格式,默認為[\u@\h \W]$
符號 | 顯示值 |
---|---|
\a | 以 ASCII 格式編碼的鈴聲. 當遇到這個轉義序列時,計算機會發出嗡嗡的響聲。 |
\d | 以日,月,天格式來表示當前日期。例如,“Mon May 26.” |
\h | 本地機的主機名,但不帶末尾的域名。 |
\H | 完整的主機名。 |
\j | 運行在當前 shell 會話中的工作數。 |
\l | 當前終端設備名。 |
\n | 一個換行符。 |
\r | 一個回車符。 |
\s | shell 程序名。 |
\t | 以 24 小時制,hours:minutes:seconds 的格式表示當前時間. |
\T | 以 12 小時制表示當前時間。 |
@ | 以 12 小時制,AM/PM 格式來表示當前時間。 |
\A | 以 24 小時制,hours:minutes 格式表示當前時間。 |
\u | 當前用戶名。 |
\v | shell 程序的版本號。 |
\V | Version and release numbers of the shell. |
\w | 當前工作目錄名。 |
\W | 當前工作目錄名的最后部分。 |
! | 當前命令的歷史號。 |
# | 當前 shell 會話中的命令數。 |
$ | 這會顯示一個”$” 字符,除非你擁有超級用戶權限。在那種情況下,它會顯示一個”#” 字符。 |
[ | 標志著一系列一個或多個非打印字符的開始。這被用來嵌入非打印的控制字符,這些字符以某種方式來操作終端仿真器,比方說移動光標或者是更改文本顏色。 |
] | 標志著非打印字符序列結束。 |
- 包管理工具
發行版 | 底層工具 | 上層工具 |
---|---|---|
Debian-Style | dpkg | apt-get, aptitude |
Fedora, Red Hat Enterprise Linux, CentOS | rpm | yum |
風格 | 命令 | 含義 |
---|---|---|
Debian | apt-get update; apt-get install package_name | 安裝 |
Debian | dpkg --install package_file | 安裝.deb |
Debian | apt-get remove package_name | 卸載 |
Debian | apt-get update; apt-get upgrade | 更新全部軟件 |
Debian | dpkg --install package_file | .deb更新 |
Debian | dpkg --list | 列出所安裝的軟件包 |
Debian | dpkg --status package_name | 是否安裝 |
Debian | apt-cache show package_name | 顯示安裝包的信息 |
Debian | dpkg --search file_name | 查看某個文件是誰安裝 |
Red Hat | yum install package_name | 安裝 |
Red Hat | rpm -i package_file | 安裝.rpm |
Red Hat | yum erase package_name | 卸載 |
Red Hat | yum update | 更新全部軟件 |
Red Hat | rpm -U package_file | .rpm更新 |
Red Hat | rpm -qa | 列出所安裝的軟件包 |
Red Hat | rpm -q package_name | 是否安裝 |
Red Hat | yum info package_name | 顯示安裝包的信息 |
Red Hat | rpm -qf file_name | 查看某個文件是誰安裝 |
網絡命令
ping linuxcommand.org
traceroute(tracepath) slashdot.org
netstat -ie 查看系統中的網絡接口
netstat -r 顯示內核的網絡路由表ssh軟件包
ssh user@ssh_server 登錄
ssh remote-sys 'ls *' > dirlist.txt 執行單個命令
scp remote-sys:document.txt . 復制文件查找文件
find ~ -type f -name "*.JPG" -size +1M | wc -l
文件類型 | 描述 |
---|---|
b | 塊設備文件 |
c | 字符設備文件 |
d | 目錄 |
f | 普通文件 |
l | 符號鏈接 |
壓縮和歸檔
gzip foo.txt
gunzip foo.txt.gz
tar cf playground.tar playground
tar xf playground.tar
zip -r playground.zip playground 打包
unzip playground.zip 解壓
- 同步
rsync options source destination
這里 source 和 destination 是下列選項之一,兩者之一必須是本地文件:
? 一個本地文件或目錄
? 一個遠端文件或目錄,以 [user@]host:path 的形式存在
? 一個遠端 rsync 服務器,由 rsync://[user@]host[:port]/path 指定
? rsync unual@192.168.2.140:~/Desktop/1.txt /mnt/c/unual/code/1.txt 遠程文件復制到本地
? rsync /mnt/c/unual/code/linux.pdf unual@192.168.2.140:~ 本地文件復制到遠程
備份別名
alias backup='sudo rsync -av --delete /etc /home /usr/local /media/BigDisk/backup'
sudo rsync -av --delete --rsh=ssh /etc /home /usr/local remote-sys:/backup 本地備份到遠程主機
rsync -av -delete rsync://rsync.gtlib.gatech.edu/fedora-linux-core/development/i386/os fedora-devel 從遠程服務獲取更新
- grep (global regular expression print)
grep [options] regex [file...]
選項 | 描述 |
---|---|
-i | 忽略大小寫。不會區分大小寫字符。也可用 --ignore-case 來指定。 |
-v | 不匹配。通常,grep 程序會打印包含匹配項的文本行。這個選項導致 grep 程序只會不包含匹配項的文本行。也可用--invert-match 來指定。 |
-c | 打印匹配的數量(或者是不匹配的數目,若指定了 -v 選項),而不是文本行本身。也可用 --count 選項來指定。 |
-l | 打印包含匹配項的文件名,而不是文本行本身,也可用--files-with-matches 選項來指定。 |
-L | 相似于 -l 選項,但是只是打印不包含匹配項的文件名。也可用 --files-without-match 來指定。 |
-n | 在每個匹配行之前打印出其位于文件中的相應行號。也可用--line-number 選項來指定。 |
-h | 應用于多文件搜索,不輸出文件名。也可用 --no-filename選項來指定。 |
grep bzip dirlist*.txt
多文件搜索,從一批文件的內容之中,查找匹配字符串
- 正則表達式
^ $ . [ ] { } - ? * + ( ) | \
符號 | 用法 |
---|---|
^ | 行首匹配 (額外,和[]配合表示否定,[^bg]表示不包含b或者g) |
$ | 行尾匹配 |
. | 用來匹配任意字符 |
[] | 從一個指定的字符集合中匹配一個單個的字符 |
- | 連接符,或表示一個范圍,A-Z表示大寫字母 |
| | 表示或,grep需要使用-E選項,或者在表達式中使用轉義 |
( ) | 隔離作用 |
? | 可有可無,表示匹配0次或者1次 |
* | 匹配零個或多個元素 |
+ | 類似*,但要求至少匹配一次 |
{n} | 匹配n次 |
- grep -h '[^bg]zip' dirlist*.txt
匹配zip三個字符前一個并非b/g字符 - grep -h '^[A-Za-z0-9]' dirlist*.txt
匹配字符或數字開頭 - grep -Eh '^(bz|gz|zip)' dirlist*.txt
匹配以“bz”,或“gz”,或“zip”開頭的文件名 - grep -E '^([[:alpha:]]+ ?)+$'
匹配一個或多個字母開頭,可以跟隨一個空格,可重復多次。 - ^(?[0-9]{3})? [0-9]{3}-[0-9]{4}$
匹配電話號碼 - find . -regex '.[^-_./0-9a-zA-Z].'
find是精確匹配,要求路徑名全匹配
- sort
選項 | 長選項 | 描述 |
---|---|---|
-b | --ignore-leading-blanks | 默認情況下,對整行進行排序,從每行的第一個字符開始。這個選項導致 sort 程序忽略每行開頭的空格,從第一個非空白字符開始排序。 |
-f | --ignore-case | 讓排序不區分大小寫。 |
-n | --numeric-sort | 基于字符串的長度來排序。使用此選項允許根據數字值執行排序,而不是字母值。 |
-r | --reverse | 按相反順序排序。結果按照降序排列,而不是升序。 |
-k | --key=field1[,field2] | 對從 field1 到 field2 之間的字符排序,而不是整個文本行。看下面的討論。 |
-m | --merge | 把每個參數看作是一個預先排好序的文件。把多個文件合并成一個排好序的文件,而沒有執行額外的排序。 |
-o | --output=file | 把排好序的輸出結果發送到文件,而不是標準輸出。 |
-t | --field-separator=char | 定義域分隔字符。默認情況下,域由空格或制表符分隔。 |
- ls -al /usr/bin | sort -nr -k 5 | head
- sort --key=1,1 --key=2n distros.txt
指定了 1,1,意味著“始于并且結束于第一個字段。”在第二個實例中,我們指定了 2n,意味著第二個字段是排序的鍵值,并且按照數值排序。
- cut
選項 | 說明 |
---|---|
-c | char list從文本行中抽取由 char list 定義的文本。這個列表可能由一個或多個逗號分隔開的數值區間組成。 |
-f | field list從文本行中抽取一個或多個由 field list 定義的字段。這個列表可能包括一個或多個字段,或由逗號分隔開的字段區間。 |
-d | delim char當指定 -f 選項之后,使用 delim char 做為字段分隔符。默認情況下,字段之間必須由單個 tab 字符分隔開。 |
--complement | 抽取整個文本行,除了那些由 -c 和/或 -f 選項指定的文本。 |
- cut -d ':' -f 1 /etc/passwd
查看所有賬號
shell 腳本
$?
查看shell命令退出狀態流程控制:
1.if 分支結構
if commands; then commands
[elif commands; then commands...]
[else commands]
fi
2.while
while commands; do commands; done
3.until
和while區別為,until滿足條件,退出循環
until commands; do commands; done
4.case
case word in
[pattern [| pattern]...) commands ;;]...
esac
5.for
for variable [in words]; do
commands
done
省略掉 for 命令的可選項 words 部分,for 命令會默認處理位置參數
- 計算文件狀態:
表達式 | 如果為真 |
---|---|
file1 -ef file2 | file1 和 file2 擁有相同的索引號(通過硬鏈接兩個文件名指向相同的文件)。 |
file1 -nt file2 | file1 新于 file2。 |
file1 -ot file2 | file1 早于 file2。 |
-b file | file存在并且是一個塊(設備)文件。 |
-c file | file存在并且是一個字符(設備)文件。 |
-d file | file存在并且是一個目錄。 |
-e file | file存在。 |
-f file | file存在并且是一個普通文件。 |
-g file | file存在并且設置了組 ID。 |
-G file | file存在并且由有效組 ID 擁有。 |
-k file | file存在并且設置了它的“sticky bit”。 |
-L file | file存在并且是一個符號鏈接。 |
-O file | file存在并且由有效用戶 ID 擁有。 |
-p file | file存在并且是一個命名管道。 |
-r file | file存在并且可讀(有效用戶有可讀權限)。 |
-s file | file存在且其長度大于零。 |
-S file | file存在且是一個網絡 socket。 |
-t fd | fd是一個定向到終端/從終端定向的文件描述符。這可以被用來決定是否重定向了標準輸入/輸出錯誤。 |
-u file | file存在并且設置了 setuid 位。 |
-w file | file存在并且可寫(有效用戶擁有可寫權限)。 |
-x file | file存在并且可執行(有效用戶有執行/搜索權限)。 |
- | - |
string | string 不為 null。 |
-n string | 字符串 string 的長度大于零。 |
-z string | 字符串 string 的長度為零。 |
string1 = string2 string1 == string2 | string1 和 string2 相同. 單或雙等號都可以,不過雙等號更受歡迎。 |
string1 != string2 | string1 和 string2 不相同。 |
string1 ">" string2 | sting1 排列在 string2 之后。 |
string1 "<" string2 | string1 排列在 string2 之前。 |
- | - |
integer1 -eq integer2 | integer1 等于 integer2. |
integer1 -ne integer2 | integer1 不等于 integer2. |
integer1 -le integer2 | integer1 小于或等于 integer2. |
integer1 -lt integer2 | integer1 小于 integer2. |
integer1 -ge integer2 | integer1 大于或等于 integer2. |
integer1 -gt integer2 | integer1 大于 integer2. |
test_file () {
# test-file: Evaluate the status of a file
FILE=~/.bashrc
if [ -e "$FILE" ]; then
if [ -f "$FILE" ]; then
echo "$FILE is a regular file."
fi
if [ -d "$FILE" ]; then
echo "$FILE is a directory."
fi
if [ -r "$FILE" ]; then
echo "$FILE is readable."
fi
if [ -w "$FILE" ]; then
echo "$FILE is writable."
fi
if [ -x "$FILE" ]; then
echo "$FILE is executable/searchable."
fi
else
echo "$FILE does not exist"
return 1
fi
}
[[ ]]支持以上所有表達式,并且
1.支持正則表達式
if [[ "\$INT" =~ ^-?[0-9]+$ ]]; then
echo "INT is an integer."
else
echo "INT is not an integer." >&2
exit 1
fi
2.支持類型匹配
FILE=foo.bar
if [[ $FILE == foo.* ]]; then
echo "$FILE matches pattern 'foo.*'"
fi
- read
read [-options] [variable...]
如果 read 命令接受到變量值數目少于期望的數字,那么額外的變量值為空,而多余的輸入數據則會被包含到最后一個變量中。如果 read 命令之后沒有列出變量名,則一個 shell 變量,REPLY,將會包含所有的輸入。
選項 | 說明 |
---|---|
-a array | 把輸入賦值到數組 array 中,從索引號零開始。我們將第36 章中討論數組問題。 |
-d delimiter | 用字符串 delimiter 中的第一個字符指示輸入結束,而不是一個換行符。 |
-e | 使用 Readline 來處理輸入。這使得與命令行相同的方式編輯輸入。 |
-n num | 讀取 num 個輸入字符,而不是整行。 |
-p prompt | 為輸入顯示提示信息,使用字符串 prompt。 |
-r | Raw mode. 不把反斜杠字符解釋為轉義字符。 |
-s | Silent mode. 不會在屏幕上顯示輸入的字符。當輸入密碼和其它確認信息的時候,這會很有幫助。 |
-t seconds | 超時. 幾秒鐘后終止輸入。read 會返回一個非零退出狀態,若輸入超時。 |
-u fd | 使用文件描述符 fd 中的輸入,而不是標準輸入。 |
#!/bin/bash
# read-ifs: read fields from a file
FILE=/etc/passwd
read -p "Enter a user name > " user_name
file_info=$(grep "^$user_name:" $FILE)
if [ -n "$file_info" ]; then
IFS=":" read user pw uid gid name home shell <<< "$file_info"
echo "User = '$user'"
echo "UID = '$uid'"
echo "GID = '$gid'"
echo "Full Name = '$name'"
echo "Home Dir. = '$home'"
echo "Shell = '$shell'"
else
echo "No such user '$user_name'" >&2
exit 1
fi
有用的命令
sudo apt update
是從/etc/apt/source.list文件中定義的源中去同步包的索引文件du命令
選項 | 說明 |
---|---|
h | 以人類可讀的方式顯示 |
a | 顯示目錄占用的磁盤空間大小,還要顯示其下目錄和文件占用磁盤空間的大小 |
s | 顯示目錄占用的磁盤空間大小,不要顯示其下子目錄和文件占用的磁盤空間大小 |
c | 顯示幾個目錄或文件占用的磁盤空間大小,還要統計它們的總和 |
apparent-size | 顯示目錄或文件自身的大小 |
l | 統計硬鏈接占用磁盤空間的大小 |
L | 統計符號鏈接所指向的文件占用的磁盤空間大小 |
1.du -sh : 查看當前目錄總共占的容量。而不單獨列出各子項占用的容量
2.du -sh --max-depth=1 : 查看當前目錄下一級子文件和子目錄占用的磁盤容量。
3.du -sh * | sort -n 統計當前文件夾(目錄)大小,并按文件大小排序
4.du -sk filename 查看指定文件大小