『面試知識集錦』linux篇丨shell基礎命令全集!!
目錄
第一部分:基礎知識
一、Linux?文件基本屬性
二、Linux 磁盤管理
2.1 df命令
2.2 du命令
2.3 磁盤檢驗
三、Linux?文件與目錄管理
3.1 處理目錄的常用命令
ls (列出目錄)
cd (切換目錄)
pwd (顯示目前所在的目錄)
mkdir (創建新目錄)
rmdir (刪除空的目錄)
cp (復制文件或目錄)
rm (移除文件或目錄)
mv (移動文件與目錄,或修改名稱)
3.2 Linux 文件內容查看
cat(正序查看)
tac(倒序查看)
nl(顯示行號)
more(翻頁查看)
less(翻頁)
head(查看頭幾行)
tail(查看尾行)
四、Linux?用戶和用戶組管理
4.1 Linux系統用戶賬號的管理
添加用戶
刪除帳號
第二部分:面試真題
1、知道哪些常用高級命令?
2、shell常用工具及寫過的腳本?
3、shell中提交了一個腳本,進程號已經不知道了,但是需要kill掉這個進程,怎么操作?
4、shell中單引號和雙引號區別?
【課程介紹】
『面試知識集錦』系列課程包括以下20+個章節,超過100+篇文章,每篇文章的前半部分為「知識點」幫助你打牢基礎,后半部分為「面試真題」幫助你拿下面試。
如果覺得還不錯,求、求、關注專欄。
第一部分:基礎知識
一、Linux?文件基本屬性
Linux 系統是一種典型的多用戶系統,不同的用戶處于不同的地位,擁有不同的權限。
在 Linux 中我們通常使用以下兩個命令來修改文件或目錄的所屬用戶與權限:
chown (change ownerp) : 修改所屬用戶與組。
chmod (change mode) : 修改用戶的權限。
在 Linux 中我們可以使用?ll?或者?ls –l?命令來顯示一個文件的屬性以及文件所屬的用戶和組,如:
[root@www /]# ls -l total 64 dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot ……
例中,bin?文件的第一個屬性用?d?表示。d?在 Linux 中代表該文件是一個目錄文件。
在 Linux 中第一個字符代表這個文件是目錄、文件或鏈接文件等等。
當為?d?則是目錄
當為?-?則是文件;
若是?l?則表示為鏈接文檔(link file);
若是?b?則表示為裝置文件里面的可供儲存的接口設備(可隨機存取裝置);
若是?c?則表示為裝置文件里面的串行端口設備,例如鍵盤、鼠標(一次性讀取裝置)。
接下來的字符中,以三個為一組,且均為?rwx?的三個參數的組合。
其中,?r?代表可讀(read)、?w?代表可寫(write)、?x?代表可執行(execute)。
二、Linux 磁盤管理
Linux磁盤管理好壞直接關系到整個系統的性能問題。
Linux磁盤管理常用三個命令為df、du和fdisk。
df:列出文件系統的整體磁盤使用量
du:檢查磁盤空間使用量
fsck:磁盤
2.1 df命令
df命令參數功能:檢查文件系統的磁盤空間占用情況。可以利用該命令來獲取硬盤被占用了多少空間,目前還剩下多少空間等信息。
語法:
df [-ahikHTm] [目錄或文件名]
選項與參數:
-a :列出所有的文件系統,包括系統特有的 /proc 等文件系統;
-k :以 KBytes 的容量顯示各文件系統;
-m :以 MBytes 的容量顯示各文件系統;
-h :以人們較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示;
-H :以 M=1000K 取代 M=1024K 的進位方式;
-T :顯示文件系統類型, 連同該 partition 的 filesystem 名稱 (例如 ext3) 也列出;
-i :不用硬盤容量,而以 inode 的數量來顯示
將容量結果以易讀的容量格式顯示出來
[root@www ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/hdc2 9.5G 3.7G 5.4G 41% / /dev/hdc3 4.8G 139M 4.4G 4% /home /dev/hdc1 99M 11M 83M 12% /boot tmpfs 363M 0 363M 0% /dev/shm
2.2 du命令
Linux du命令也是查看使用空間的,但是與df命令不同的是Linux du命令是對文件和目錄磁盤使用的空間的查看,還是和df命令有一些區別的,這里介紹Linux du命令。
語法:
du [-ahskm] 文件或目錄名稱
選項與參數:
-a :列出所有的文件與目錄容量,因為默認僅統計目錄底下的文件量而已。
-h :以人們較易讀的容量格式 (G/M) 顯示;
-s :列出總量而已,而不列出每個各別的目錄占用容量;
-S :不包括子目錄下的總計,與 -s 有點差別。
-k :以 KBytes 列出容量顯示;
-m :以 MBytes 列出容量顯示;
只列出當前目錄下的所有文件夾容量(包括隱藏文件夾):
[root@www ~]# du 8 ./test4 <==每個目錄都會列出來 8 ./test2 ....中間省略.... 12 ./.gconfd <==包括隱藏文件的目錄 220 . <==這個目錄(.)所占用的總量
2.3 磁盤檢驗
fsck(file system check)用來檢查和維護不一致的文件系統。
若系統掉電或磁盤發生問題,可利用fsck命令對文件系統進行檢查。
語法:
fsck [-t 文件系統] [-ACay] 裝置名稱
選項與參數:
-t : 給定檔案系統的型式,若在 /etc/fstab 中已有定義或 kernel 本身已支援的則不需加上此參數
-s : 依序一個一個地執行 fsck 的指令來檢查
-A : 對/etc/fstab 中所有列出來的 分區(partition)做檢查
-C : 顯示完整的檢查進度
-d : 打印出 e2fsck 的 debug 結果
-p : 同時有 -A 條件時,同時有多個 fsck 的檢查一起執行
-R : 同時有 -A 條件時,省略 / 不檢查
-V : 詳細顯示模式
-a : 如果檢查有錯則自動修復
-r : 如果檢查有錯則由使用者回答是否修復
-y : 選項指定檢測每個文件是自動輸入yes,在不確定那些是不正常的時候,可以執行 # fsck -y 全部檢查修復。
三、Linux?文件與目錄管理
我們知道Linux的目錄結構為樹狀結構,最頂級的目錄為根目錄 /。
其他目錄通過掛載可以將它們添加到樹中,通過解除掛載可以移除它們。
在開始本教程前我們需要先知道什么是絕對路徑與相對路徑。
絕對路徑:
路徑的寫法,由根目錄?/?寫起,例如: /usr/share/doc 這個目錄。
相對路徑:
路徑的寫法,不是由?/?寫起,例如由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成:?cd ../man?這就是相對路徑的寫法。
3.1 處理目錄的常用命令
接下來我們就來看幾個常見的處理目錄的命令吧:
ls(英文全拼:list files): 列出目錄及文件名
cd(英文全拼:change directory):切換目錄
pwd(英文全拼:print work directory):顯示目前的目錄
mkdir(英文全拼:make directory):創建一個新的目錄
rmdir(英文全拼:remove directory):刪除一個空的目錄
cp(英文全拼:copy file): 復制文件或目錄
rm(英文全拼:remove): 刪除文件或目錄
mv(英文全拼:move file): 移動文件與目錄,或修改文件與目錄的名稱
你可以使用?man [命令]?來查看各個命令的使用文檔,如 :man cp。
ls (列出目錄)
在Linux系統當中, ls 命令可能是最常被運行的。
語法:
[root@www ~]# ls [-aAdfFhilnrRSt] 目錄名稱 [root@www ~]# ls [--color={never,auto,always}] 目錄名稱 [root@www ~]# ls [--full-time] 目錄名稱
選項與參數:
-a :全部的文件,連同隱藏文件( 開頭為 . 的文件) 一起列出來(常用)
-d :僅列出目錄本身,而不是列出目錄內的文件數據(常用)
-l :長數據串列出,包含文件的屬性與權限等等數據;(常用)
將家目錄下的所有文件列出來(含屬性與隱藏檔)
[root@www ~]# ls -al ~
cd (切換目錄)
cd是Change Directory的縮寫,這是用來變換工作目錄的命令。
語法:
cd [相對路徑或絕對路徑]
#使用 mkdir 命令創建 runoob 目錄 [root@www ~]# mkdir runoob #使用絕對路徑切換到 runoob 目錄 [root@www ~]# cd /root/runoob/ #使用相對路徑切換到 runoob 目錄 [root@www ~]# cd ./runoob/ # 表示回到自己的家目錄,亦即是 /root 這個目錄 [root@www runoob]# cd ~ # 表示去到目前的上一級目錄,亦即是 /root 的上一級目錄的意思; [root@www ~]# cd ..
接下來大家多操作幾次應該就可以很好的理解 cd 命令的。
pwd (顯示目前所在的目錄)
pwd 是?Print Working Directory?的縮寫,也就是顯示目前所在目錄的命令。
[root@www ~]# pwd [-P]
選項與參數:
-P?:顯示出確實的路徑,而非使用連結 (link) 路徑。
實例:單純顯示出目前的工作目錄:
[root@www ~]# pwd /root <== 顯示出目錄啦~
實例顯示出實際的工作目錄,而非連結檔本身的目錄名而已。
[root@www ~]# cd /var/mail <==注意,/var/mail是一個連結檔 [root@www mail]# pwd /var/mail <==列出目前的工作目錄 [root@www mail]# pwd -P /var/spool/mail <==怎么回事?有沒有加 -P 差很多~ [root@www mail]# ls -ld /var/mail lrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail -> spool/mail # 看到這里應該知道為啥了吧?因為 /var/mail 是連結檔,連結到 /var/spool/mail # 所以,加上 pwd -P 的選項后,會不以連結檔的數據顯示,而是顯示正確的完整路徑啊!
mkdir (創建新目錄)
如果想要創建新的目錄的話,那么就使用mkdir (make directory)吧。
語法:
mkdir [-mp] 目錄名稱
選項與參數:
-m :配置文件的權限喔!直接配置,不需要看默認權限 (umask) 的臉色~
-p :幫助你直接將所需要的目錄(包含上一級目錄)遞歸創建起來!
實例:請到/tmp底下嘗試創建數個新目錄看看:
[root@www ~]# cd /tmp [root@www tmp]# mkdir test <==創建一名為 test 的新目錄 [root@www tmp]# mkdir test1/test2/test3/test4 mkdir: cannot create directory `test1/test2/test3/test4': No such file or directory <== 沒辦法直接創建此目錄啊! [root@www tmp]# mkdir -p test1/test2/test3/test4
加了這個 -p 的選項,可以自行幫你創建多層目錄!
實例:創建權限為?rwx--x--x?的目錄。
[root@www tmp]# mkdir -m 711 test2 [root@www tmp]# ls -l drwxr-xr-x 3 root root 4096 Jul 18 12:50 test drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1 drwx--x--x 2 root root 4096 Jul 18 12:54 test2
上面的權限部分,如果沒有加上 -m 來強制配置屬性,系統會使用默認屬性。
如果我們使用 -m ,如上例我們給予 -m 711 來給予新的目錄 drwx--x--x 的權限。
rmdir (刪除空的目錄)
語法:
rmdir [-p] 目錄名稱
選項與參數:
-p :連同上一級『空的』目錄也一起刪除
刪除 runoob 目錄
[root@www tmp]# rmdir runoob/
將 mkdir 實例中創建的目錄(/tmp 底下)刪除掉!
[root@www tmp]# ls -l <==看看有多少目錄存在? drwxr-xr-x 3 root root 4096 Jul 18 12:50 test drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1 drwx--x--x 2 root root 4096 Jul 18 12:54 test2 [root@www tmp]# rmdir test <==可直接刪除掉,沒問題 [root@www tmp]# rmdir test1 <==因為尚有內容,所以無法刪除! rmdir: `test1': Directory not empty [root@www tmp]# rmdir -p test1/test2/test3/test4 [root@www tmp]# ls -l <==您看看,底下的輸出中test與test1不見了! drwx--x--x 2 root root 4096 Jul 18 12:54 test2
利用 -p 這個選項,立刻就可以將 test1/test2/test3/test4 一次刪除。
不過要注意的是,這個 rmdir 僅能刪除空的目錄,你可以使用 rm 命令來刪除非空目錄。
cp (復制文件或目錄)
cp 即拷貝文件和目錄。
語法:
[root@www ~]# cp [-adfilprsu] 來源檔(source) 目標檔(destination) [root@www ~]# cp [options] source1 source2 source3 .... directory
選項與參數:
-a:相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)
-d:若來源檔為連結檔的屬性(link file),則復制連結檔屬性而非文件本身;
-f:為強制(force)的意思,若目標文件已經存在且無法開啟,則移除后再嘗試一次;
-i:若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)
-l:進行硬式連結(hard link)的連結檔創建,而非復制文件本身;
-p:連同文件的屬性一起復制過去,而非使用默認屬性(備份常用);
-r:遞歸持續復制,用於目錄的復制行為;(常用)
-s:復制成為符號連結檔 (symbolic link),亦即『捷徑』文件;
-u:若 destination 比 source 舊才升級 destination !
用 root 身份,將 root 目錄下的 .bashrc 復制到 /tmp 下,并命名為 bashrc
[root@www ~]# cp ~/.bashrc /tmp/bashrc [root@www ~]# cp -i ~/.bashrc /tmp/bashrc cp: overwrite `/tmp/bashrc'? n <==n不覆蓋,y為覆蓋
rm (移除文件或目錄)
語法:
rm [-fir] 文件或目錄
選項與參數:
-f :就是 force 的意思,忽略不存在的文件,不會出現警告信息;
-i :互動模式,在刪除前會詢問使用者是否動作
-r :遞歸刪除啊!最常用在目錄的刪除了!這是非常危險的選項!!!
將剛剛在 cp 的實例中創建的 bashrc 刪除掉!
[root@www tmp]# rm -i bashrc rm: remove regular file `bashrc'? y
如果加上 -i 的選項就會主動詢問喔,避免你刪除到錯誤的檔名!
mv (移動文件與目錄,或修改名稱)
語法:
[root@www ~]# mv [-fiu] source destination [root@www ~]# mv [options] source1 source2 source3 .... directory
選項與參數:
-f :force 強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋;
-i :若目標文件 (destination) 已經存在時,就會詢問是否覆蓋!
-u :若目標文件已經存在,且 source 比較新,才會升級 (update)
復制一文件,創建一目錄,將文件移動到目錄中
[root@www ~]# cd /tmp [root@www tmp]# cp ~/.bashrc bashrc [root@www tmp]# mkdir mvtest [root@www tmp]# mv bashrc mvtest
3.2 Linux 文件內容查看
Linux系統中使用以下命令來查看文件的內容:
cat? 由第一行開始顯示文件內容
tac? 從最后一行開始顯示,可以看出 tac 是 cat 的倒著寫!
nl ??顯示的時候,順道輸出行號!
more 一頁一頁的顯示文件內容
less 與 more 類似,但是比 more 更好的是,他可以往前翻頁!
head 只看頭幾行
tail 只看尾巴幾行
你可以使用?man [命令]來查看各個命令的使用文檔,如 :man cp。
cat(正序查看)
由第一行開始顯示文件內容
語法:
cat [-AbEnTv]
選項與參數:
-A :相當於 -vET 的整合選項,可列出一些特殊字符而不是空白而已;
-b :列出行號,僅針對非空白行做行號顯示,空白行不標行號!
-E :將結尾的斷行字節 $ 顯示出來;
-n :列印出行號,連同空白行也會有行號,與 -b 的選項不同;
-T :將 [tab] 按鍵以 ^I 顯示出來;
-v :列出一些看不出來的特殊字符
檢看 /etc/issue 這個文件的內容:
[root@www ~]# cat /etc/issue CentOS release 6.4 (Final) Kernel \r on an \m
tac(倒序查看)
tac與cat命令剛好相反,文件內容從最后一行開始顯示,可以看出 tac 是 cat 的倒著寫!如:
[root@www ~]# tac /etc/issue Kernel \r on an \m CentOS release 6.4 (Final)
nl(顯示行號)
語法:
nl [-bnw] 文件
選項與參數:
-b :指定行號指定的方式,主要有兩種:
-b a :表示不論是否為空行,也同樣列出行號(類似 cat -n);
-b t :如果有空行,空的那一行不要列出行號(默認值);
-n :列出行號表示的方法,主要有三種:
-n ln :行號在熒幕的最左方顯示;
-n rn :行號在自己欄位的最右方顯示,且不加 0 ;
-n rz :行號在自己欄位的最右方顯示,且加 0 ;
-w :行號欄位的占用的位數。
實例一:用 nl 列出 /etc/issue 的內容
[root@www ~]# nl /etc/issue 1 CentOS release 6.4 (Final) 2 Kernel \r on an \m
more(翻頁查看)
[root@www ~]# more /etc/man_db.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中間省略).... --More--(28%) <== 重點在這一行喔!你的光標也會在這里等待你的命令
在 more 這個程序的運行過程中,你有幾個按鍵可以按的:
空白鍵 (space):代表向下翻一頁;
Enter???????? :代表向下翻『一行』;
/字串???????? :代表在這個顯示的內容當中,向下搜尋『字串』這個關鍵字;
:f??????????? :立刻顯示出檔名以及目前顯示的行數;
q???????????? :代表立刻離開 more ,不再顯示該文件內容。
b 或 [ctrl]-b :代表往回翻頁,不過這動作只對文件有用,對管線無用。
less(翻頁)
一頁一頁翻動,以下實例輸出/etc/man.config文件的內容:
[root@www ~]# less /etc/man.config # # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.6d ....(中間省略).... : <== 這里可以等待你輸入命令!
less運行時可以輸入的命令有:
空白鍵????:向下翻動一頁;
[pagedown]:向下翻動一頁;
[pageup]??:向上翻動一頁;
/字串?????:向下搜尋『字串』的功能;
?字串?????:向上搜尋『字串』的功能;
n???????? :重復前一個搜尋 (與 / 或 ? 有關!)
N???????? :反向的重復前一個搜尋 (與 / 或 ? 有關!)
q???????? :離開 less 這個程序;
head(查看頭幾行)
取出文件前面幾行
語法:
head [-n number] 文件
選項與參數:
-n :后面接數字,代表顯示幾行的意思
[root@www ~]# head /etc/man.config
默認的情況中,顯示前面 10 行!若要顯示前 20 行,就得要這樣:
[root@www ~]# head -n 20 /etc/man.config
tail(查看尾行)
取出文件后面幾行
語法:
tail [-n number] 文件
選項與參數:
-n :后面接數字,代表顯示幾行的意思
-f :表示持續偵測后面所接的檔名,要等到按下[ctrl]-c才會結束tail的偵測
[root@www ~]# tail /etc/man.config # 默認的情況中,顯示最后的十行!若要顯示最后的 20 行,就得要這樣: [root@www ~]# tail -n 20 /etc/man.config
四、Linux?用戶和用戶組管理
Linux系統是一個多用戶多任務的分時操作系統,任何一個要使用系統資源的用戶,都必須首先向系統管理員申請一個賬號,然后以這個賬號的身份進入系統。
用戶的賬號一方面可以幫助系統管理員對使用系統的用戶進行跟蹤,并控制他們對系統資源的訪問;另一方面也可以幫助用戶組織文件,并為用戶提供安全性保護。
每個用戶賬號都擁有一個唯一的用戶名和各自的口令。
用戶在登錄時鍵入正確的用戶名和口令后,就能夠進入系統和自己的主目錄。
實現用戶賬號的管理,要完成的工作主要有如下幾個方面:
用戶賬號的添加、刪除與修改。
用戶口令的管理。
用戶組的管理。
4.1 Linux系統用戶賬號的管理
用戶賬號的管理工作主要涉及到用戶賬號的添加、修改和刪除。
添加用戶賬號就是在系統中創建一個新賬號,然后為新賬號分配用戶號、用戶組、主目錄和登錄Shell等資源。剛添加的賬號是被鎖定的,無法使用。
添加用戶
useradd 選項 用戶名
參數說明:
選項:
-c comment 指定一段注釋性描述。
-d 目錄 指定用戶主目錄,如果此目錄不存在,則同時使用-m選項,可以創建主目錄。
-g 用戶組 指定用戶所屬的用戶組。
-G 用戶組,用戶組 指定用戶所屬的附加組。
-s Shell文件 指定用戶的登錄Shell。
-u 用戶號 指定用戶的用戶號,如果同時有-o選項,則可以重復使用其他用戶的標識號。
用戶名:
實例1
# useradd –d /home/sam -m sam
此命令創建了一個用戶sam,其中-d和-m選項用來為登錄名sam產生一個主目錄 /home/sam(/home為默認的用戶主目錄所在的父目錄)。
刪除帳號
如果一個用戶的賬號不再使用,可以從系統中刪除。刪除用戶賬號就是要將/etc/passwd等系統文件中的該用戶記錄刪除,必要時還刪除用戶的主目錄。
刪除一個已有的用戶賬號使用userdel命令,其格式如下:
userdel 選項 用戶名
第二部分:面試真題
1、知道哪些常用高級命令?
序號
命令
命令解釋
1
top
查看內存
2
df -h
查看磁盤存儲情況
3
iotop
查看磁盤IO讀寫(yum install iotop安裝)
4
iotop -o
直接查看比較高的磁盤讀寫程序
5
netstat -tunlp | grep 端口號
查看端口占用情況
6
uptime
查看報告系統運行時長及平均負載
7
ps -aux
查看進程
2、shell常用工具及寫過的腳本?
1)awk、sed、cut、sort
2)用Shell寫過哪些腳本
(1)集群啟動,分發腳本
(2)數倉與mysql的導入導出
(3)數倉層級內部的導入
3、shell中提交了一個腳本,進程號已經不知道了,但是需要kill掉這個進程,怎么操作?
ssh $i "ps -ef | grep file-flume-kafka | grep -v grep |awk '{print \$2}' | xargs kill"
4、shell中單引號和雙引號區別?
(1)單引號不取變量值
(2)雙引號取變量值
(3)反引號`,執行引號中命令
(4)雙引號內部嵌套單引號,取出變量值
(5)單引號內部嵌套雙引號,不取出變量值
【求、求、關注專欄】
Linux Shell
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。