嵌入式 Linux入 門第三課,熟悉掌握 Linux 常用 Shell 命令 ...... 矜辰所致
前言
認(rèn)識了 Linux 文件系統(tǒng),了解了文件結(jié)構(gòu)和類型,那么就要學(xué)習(xí)對文件的操作了。學(xué)習(xí) Linux ,必須要熟練的掌握 Linux 下的 Shell 命令。
本文我們就來學(xué)習(xí)說明一下 Linux 中的 Shell 及常用命令。
嵌入式 Linux 入門系列博文:
一、Shell 基本說明
1.1 Shell 是什么
在 Linux 中,Shell 是一個(gè)應(yīng)用程序 ,他是用戶與 Linux 內(nèi)核溝通的橋梁。
它負(fù)責(zé)接收用戶輸入的命令,根據(jù)用戶的輸入找到其他程序并運(yùn)行,Shell負(fù)責(zé)將應(yīng)用層或者用戶輸入的命令傳遞給系統(tǒng)內(nèi)核,由操作系統(tǒng)內(nèi)核來完成相應(yīng)的工作,然后將結(jié)果反饋給應(yīng)用層或者用戶。
比如我們輸入“l(fā)s” 并回車時(shí),Shell 程序找到 “l(fā)s” 程序并運(yùn)行,把結(jié)果打印出來。
Shell 有很多種實(shí)現(xiàn),我們最常用為 bash ,在上一篇文章我們介紹用戶的時(shí)候,查看用戶的信息時(shí)候可以看到,他們的默認(rèn) Shell 都是 /bin/bash :
如何理解這個(gè) Shell 有很多種實(shí)現(xiàn)方式呢?
就好比在 Windows 開發(fā)環(huán)境下面,我使用的 Vscode 中,不同的終端對應(yīng)的其實(shí)是不同的 Shell 一樣,如下圖:
1.2 Shell 與 終端(terminal)
在 linux下我們使用組合鍵 ctrl+alt+T 終端 輸入命令,那么 Shell 是不是就是終端呢 ?
它們是兩個(gè)東西 ,終端的作用是提供一個(gè)命令的輸入輸出環(huán)境 。 Shell 是一個(gè)命令行解釋器。
只不過當(dāng)我我們打開一個(gè) terminal 的時(shí)候,通過用戶默認(rèn)的 Shell 設(shè)置,系統(tǒng)會(huì)將 terminal 和 Shell關(guān)聯(lián)起來,當(dāng)我們在 terminal 中輸入命令后,Shell 就負(fù)責(zé)解釋命令。
1.3 Shell 與 圖形化界面
在我們使用 Windows 的時(shí)候,基本上都是通過圖形化界面來進(jìn)行操作運(yùn)行,圖形話界面的特點(diǎn)是簡單,通俗易懂,用鼠標(biāo)指哪打哪。 使用圖形化界面能讓用戶獲得很好的體驗(yàn)。
在現(xiàn)在發(fā)型版本的 Linux 系統(tǒng)中,基本上圖形化界面也做得越來越好,程序也越來越豐富,我們虛擬機(jī)安裝的 Ubuntu 完全可以按照 Windows 的習(xí)慣進(jìn)行圖形化鼠標(biāo)操作,基本上不用額外的學(xué)習(xí),就可以正常的使用把 Ubuntu 系統(tǒng)使用起來。
既然圖形化界面這么好了,為什么我們還要花費(fèi)時(shí)間和力氣去記住各式各樣的命令?
為什么 Linux 一定要學(xué)命令行?
雖然 圖形化界面 很友好易學(xué),但是作為開發(fā)者我們在以后學(xué)習(xí)工作中并不是永遠(yuǎn)有圖形化界面。
比如現(xiàn)在很多服務(wù)器都是 Linux 操作系統(tǒng),但是基本上都不會(huì)配置顯示器,維護(hù)人員都是通過遠(yuǎn)程登錄進(jìn)行維護(hù)操作。
比如我們做嵌入式,很多嵌入式產(chǎn)品并沒有帶顯示屏,那么在其上面運(yùn)行的 Linux 我們調(diào)試也是需要命令行。
再者,在 Linux 中幾乎所有的程序都可以使用命令行執(zhí)行,而且不是所有的應(yīng)用程序都提供了圖形化界面。
1.4 Linux 命令的提示符
我們打開終端,可以看到如下的提示符:
qzh@ubuntu:~$
我們每行的命令前面都會(huì)有這樣的提示符,我們簡單說明一下這個(gè)提示符:
我們簡單來測試看一下:
1.5 絕對路徑與相對路徑
在介紹命令之前,介紹一下 Linux 中的絕對路徑 和相對路徑,一個(gè)文件所處的位置可以用路徑表示,在 Windows 下,我們可以通過屬性來看到文件的路徑,如下圖:
絕對路徑 :
在 Linux 中,從根目錄下出發(fā)可以找到任意目錄、任意文件,Linux下的根目錄為“/”。
從根目錄開始表示目錄或文件的方法稱為“絕對路徑”。
比如:
/home/qzh
/bin/pwd
相對路徑 :
相對路徑需要理解,是相對而言來說的,路徑的寫法不是由根目錄 / 寫起,需要有一個(gè)參考路徑,怎么理解呢?
就是比如,當(dāng)前正在某個(gè)目錄下面,我們可以直接進(jìn)入該目錄下的某個(gè)文件夾:
在 Linux 中,使用 "." 表示當(dāng)前路徑," .." 表示上一級路徑, "../.." 表示上上級目錄:
二、Linux 常用命令
☆ 對于初學(xué)者,命令能記住最好,記不住也沒關(guān)系,關(guān)鍵在于多用多體驗(yàn),多得多了自然就記住了。 命令行不是背出來的而是用出來的!☆
我們只需掌握常用的命令,剩下的不知道的我們在遇到的時(shí)候可以查看 系統(tǒng)幫助,或者前輩們的文章筆記之類。
本文也不是把全部常用命令列出來,現(xiàn)在只是把常用的列舉,在后期應(yīng)該會(huì)對本文進(jìn)行維護(hù)更新。
2.1 目錄與文件操作命令
2.1.1 pwd
pwd
pwd 命令,顯打印當(dāng)前工作目錄的絕對路徑,不需要任何參數(shù):
2.1.2 ls
ls 命令,顯示指定目錄下的內(nèi)容,可帶參數(shù)可不帶參數(shù)。
ls [選項(xiàng)] [路徑]
它的主要參數(shù)有:
-a 顯示所有的文件以及子目錄,包括以“.”開頭的隱藏文件。
-l 顯示文件的詳細(xì)信息,比如文件的形態(tài)、權(quán)限、所有者、大小等信息。
-t 將文件按照創(chuàng)建時(shí)間排序列出。
-A 和-a一樣,但是不列出“.”(當(dāng)前目錄)和“..”(父目錄)。
-R 遞歸列出所有文件,包括子目錄中的文件。
Shell命令里面的參數(shù)是可以組合在一起用的,比如組合“-al”就是顯示所有文件的詳細(xì)信息,包括以“.”開頭的隱藏文件。
2.1.3 cd
cd 命令,切換路徑。
cd [路徑]
我們最常用的一個(gè)命令,在文章前面“ 1.5 絕對路徑與相對路徑” 中我們已經(jīng)有過示例,我們可以使用絕對路徑或者相對路徑進(jìn)行操作。
要記錄的幾個(gè)路徑:
" / " 根目錄
" ~ " 當(dāng)前用戶主目錄
" . " 表示當(dāng)前路徑
" .. " 表示上一級路徑
" ../.. " 表示上上級目錄
2.1.4 mkdir
mkdir 命令,創(chuàng)建目錄。
mkdie [-p] [目錄]
主要參數(shù)如下:
-p 如所要?jiǎng)?chuàng)建的目錄其上層目錄目前還未創(chuàng)建,那么會(huì)一起創(chuàng)建上層目錄。
2.1.5 touch
touch 命令,修改文件時(shí)間,如果文件不存在則創(chuàng)建空文件。
touch [參數(shù)] [文件名]
使用touch創(chuàng)建文件的時(shí)候,如果[文件名]的文件不存在,那就直接創(chuàng)建一個(gè)以[文件名]命名的文件,如果[文件名]文件存在的話就僅僅修改一下此文件的最后修改日期。
它的主要參數(shù)有:
-a 只更改存取時(shí)間。
-c 不建立任何文件。
-d<日期> 使用指定的日期,而并非現(xiàn)在日期。
-t<時(shí)間> 使用指定的時(shí)間,而并非現(xiàn)在時(shí)間。
一般使用來說,我們用它基本都是是用來創(chuàng)建一個(gè)新文件。
2.1.6 rmdir
rmdir 命令,刪除目錄。
rmdir [參數(shù)] [文件夾(目錄)]
它的主要參數(shù)有:
-p 刪除指定的文件夾(目錄)以后,若上層文件夾(目錄)為空文件夾(目錄)的話就將其一起刪除。
2.1.7 rm
rm命令,刪除文件或目錄。
rm [參數(shù)] [目的文件或文件夾目錄名]
此命令可以完成刪除一個(gè)文件或者多個(gè)文件及文件夾,它可以實(shí)現(xiàn)遞歸刪除。對于鏈接文件,只刪除鏈接,原文件保持不變。鏈接文件其實(shí)就類似 Windows 下的快捷方式文件。
它的主要參數(shù)有:
-d 直接把要?jiǎng)h除的目錄的硬連接數(shù)據(jù)刪成 0,刪除該目錄。
-f 強(qiáng)制刪除文件和文件夾(目錄)。
-i 刪除文件或者文件夾(目錄)之前先詢問用戶。
-r 遞歸刪除,指定文件夾(目錄)下的所有文件和子文件夾全部刪除掉。
-v 顯示刪除過程。
2.1.8 cp
cp 命令,復(fù)制文件或目錄。
cp [參數(shù)] [源地址] [目的地址]
它的主要參數(shù)有:
-a 此參數(shù)和同時(shí)指定“-dpR”參數(shù)相同
-d 在復(fù)制有符號連接的文件時(shí),保留原始的連接。
-f 強(qiáng)行復(fù)制文件,不管要復(fù)制的文件是否已經(jīng)存在于目標(biāo)目錄。
-I 覆蓋現(xiàn)有文件之前詢問用戶。
-p 保留源文件或者目錄的屬性。
-r或-R 遞歸處理,將指定目錄下的文件及子目錄一并處理
要想用好這個(gè)命令需要多測試測試。
2.1.9 mv
mv 命令,文件移動(dòng)命令。
mv [參數(shù)] [源地址] [目的地址]
它的主要參數(shù)有:
-b 如果要覆蓋文件的話覆蓋前先進(jìn)行備份。
-f 若目標(biāo)文件或目錄與現(xiàn)在的文件重復(fù),直接覆蓋目的文件或目錄。
-I 在覆蓋之前詢問用戶。
2.1.10 cat
cat 命令,串聯(lián)文件的內(nèi)容并打印出來。
cat [選項(xiàng)] [文件]
**雖然 cat 也有選項(xiàng)可加,但是我們一般使用都不加選型,直接使用 cat 文件名,
而且我們一般使用就把他當(dāng)成文本查看器就行了。**
2.1.11 find
find 命令,用于在目錄結(jié)構(gòu)中查找文件。
find [路徑] [參數(shù)] [查找條件]
它的主要參數(shù)有:
-name "filename" 按照文件名稱查找,查找與 filename匹配的文件,可使用通配符。
-depth 從指定目錄下的最深層的子目錄開始查找。
-gid<群組識別碼> 查找符合指定的群組識別碼的文件或目錄。
-group<群組名稱> 查找符合指定的群組名稱的文件或目錄。
-size<文件大小> 查找符合指定文件大小的文件。
-type<文件類型> 查找符合指定文件類型的文件。
-user<擁有者名稱> 查找符合指定的擁有者名稱的文件或目錄。
如果沒有指定查找目錄,則為當(dāng)前目錄。
2.1.12 grep
grep 命令,是查找文件中符合條件的字符串。
grep [選項(xiàng)] [查找模式] [文件名]
它的主要參數(shù)有:
-b 在顯示符合關(guān)鍵字的那一列前,標(biāo)記處該列第 1個(gè)字符的位編號。
-c 計(jì)算符合關(guān)鍵字的列數(shù)。
-d<進(jìn)行動(dòng)作> 當(dāng)指定要查找的是目錄而非文件時(shí),必須使用此參數(shù)!否則 grep指令
將回報(bào)信息并停止搜索。
-i 忽略字符大小寫。
-v 反轉(zhuǎn)查找,只顯示不匹配的行。
-r 在指定目錄中遞歸查找。
-n 顯示所在的行號。
grep命令一次只能查一個(gè)關(guān)鍵字, 這個(gè)查找字符串的命名得自己多多嘗試。
2.2 文件權(quán)限和屬性
文件權(quán)限和屬性,我們在上一篇文章
《嵌入式 Linux 入門(二、Linux 文件系統(tǒng)、文件類型及權(quán)限管理)》
我們已經(jīng)講過了 chmod 改變文件權(quán)限 和 chown 改變文件所有者,具體可以查看上一篇文章,我們這里再次簡單做個(gè)記錄。
2.2.1 chmod
chmod 命令,改變文件權(quán)限。
chmod [參數(shù)] [文件名/目錄名]
2.2.2 chown
chown 命令,改變文件所有者。
chown [參數(shù)] [用戶名.< 組名 >] [文件名/目錄]
2.2.3 chgrp
chgrp 命令,改變文件所屬用戶組。
chgrp [參數(shù)] [所屬群組] [文件名/目錄]
☆ 改變文件所有者和用戶組的這兩個(gè)命令的應(yīng)用場景:復(fù)制文件,由于復(fù)制行為會(huì)復(fù)制執(zhí)行者的屬性和權(quán)限,因此復(fù)制后需要改變文件所屬用戶、用戶組等。
2.2.4 sudo
sudo 命令,以系統(tǒng)管理者的身份執(zhí)行指令。
這個(gè)我們在前面文章多多少少也遇到過,就是在進(jìn)行某些操作權(quán)限不夠的時(shí)候,在命令前面加上sudo ,以管理員身份運(yùn)行。
系統(tǒng)會(huì)提示你輸入密碼,你輸入密碼是不會(huì)顯示的。
2.3 壓縮與解壓縮
2.3.1 zip
zip 命令,用于將一個(gè)或者多個(gè)文件壓縮成一個(gè).zip 結(jié)尾的文件,命令格式如下:
zip [參數(shù)] [壓縮文件名.zip] [被壓縮的文件]
它的主要參數(shù)有:
-b<工作目錄> 指定暫時(shí)存放文件的目錄。
-d 從 zip 文件中刪除一個(gè)文件。
-F 嘗試修復(fù)已經(jīng)損毀的壓縮文件。
-g 將文件壓縮入現(xiàn)有的壓縮文件中,不需要新建壓縮文件。
-h 幫助。
-j 只保存文件的名,不保存目錄。
-m 壓縮完成以后刪除源文件。
-n<字尾符號> 不壓縮特定擴(kuò)展名的文件。
-q 不顯示壓縮命令執(zhí)行過程。
-r 遞歸壓縮,將指定目錄下的所有文件和子目錄一起壓縮。
-v 顯示指令執(zhí)行過程。
-num 壓縮率,為 1~9 的數(shù)值。
2.3.2 unzip
unzip 命令用于對 .zip壓縮文件進(jìn)行解壓。
unzip [參數(shù)] [壓縮文件名.zip]
2.3.3 gzip
gzip 命令,也是將壓縮和解壓縮集合在一起。
gzip [參數(shù)] [文件或者目錄]
它的主要參數(shù)有:
-l(list) 列出壓縮文件的內(nèi)容。
-k(keep) 在壓縮或解壓時(shí),保留輸入文件。
-d(decompress) 將壓縮文件進(jìn)行解壓縮。
如果gzip不加任何選項(xiàng),此時(shí)為壓縮,壓縮完該文件會(huì)生成后綴為.gz的壓縮文件,并刪除原來的文件,推薦使用gzip -k來壓縮源文件,這樣會(huì)保留原來的文件。
相同的文件內(nèi)容,如果文件名不同,壓縮后的大小也不同。
gzip只能壓縮單個(gè)文件,不能壓縮目錄。
2.3.4 tar
tar 命令,將壓縮和解壓縮集合在一起。
Linux下最常用的.bz2和.gz這兩種壓縮格式,可以使用 tar 命令壓縮與解壓。
tar [參數(shù)] [壓縮文件名] [被壓縮文件名]
它的主要參數(shù)有:
-c(create):表示創(chuàng)建用來生成文件包 。
-x:表示提取,從文件包中提取文件。
-t:可以查看壓縮的文件。
-z:使用gzip方式進(jìn)行處理,它與”c“結(jié)合就表示壓縮,與”x“結(jié)合就表示解壓縮。
-Z 用 tar生成壓縮文件,用 compress壓縮。
-j:使用bzip2方式進(jìn)行處理,它與”c“結(jié)合就表示壓縮,與”x“結(jié)合就表示解壓縮。
-v(verbose):詳細(xì)報(bào)告tar處理的信息。
-f(file):表示文件,后面接著一個(gè)文件名。 -C <指定目錄> 解壓到指定目錄。
-w 遭遇問題時(shí)先詢問用戶。
-k 解開備份文件時(shí),不覆蓋已有的文件。
-m 還原文件時(shí),不變更文件的更改時(shí)間。
-r 新增文件到已存在的備份文件的結(jié)尾部分。
在使用 tar 的時(shí)候,要記住兩條指令:
tar -vcjf 1file.tar.bz2 1file.c
tar -vczf 1file.tar.gz 1file.c
-vcjf 表示創(chuàng)建 bz2 格式的壓縮文件,-vczf 表示創(chuàng)建.gz 格式的壓縮文件。
壓縮:
解壓:
2.4 網(wǎng)絡(luò)命令
2.4.1 ifconfig
ifconfig 命令,查看網(wǎng)絡(luò)、設(shè)置IP。
它的主要參數(shù)有:
-a :顯示所有網(wǎng)卡接口
up:激活網(wǎng)卡接口
down:關(guān)閉網(wǎng)卡接口
address:xxx.xxx.xxx.xxx,IP地址
查看 IP 地址:
關(guān)閉打開網(wǎng)卡:
使用 ifconfig 網(wǎng)卡名字 down
關(guān)閉網(wǎng)卡,使用 ifconfig 網(wǎng)卡名字 up
打開網(wǎng)卡。
修改網(wǎng)卡 IP 地址:
2.4.2 ping
ping 命令,檢測主機(jī)聯(lián)網(wǎng)狀態(tài)。
這個(gè)命令我們比較熟悉,在 Windows 系統(tǒng)中我們也用這個(gè) ping 命令。
2.5 其他一些命令
2.5.1 echo
echo 命令,用于字符串的輸出,在終端上打印一段文字,也可以把終端的變量內(nèi)容打印出來。
echo string
echo " 字符串"
echo 字符串
echo $ 變量名
使用 echo 命令時(shí),帶雙引號和不帶雙引號的效果是一樣的,使用引號時(shí),要注意用英文符號。
2.5.2 clear
清除屏幕。
2.5.3 reboot
重啟系統(tǒng)。
2.5.4 poweroff
切斷電源,關(guān)機(jī)。
2.5.5 uname
顯示操作系統(tǒng)類型:
2.6 磁盤管理
磁盤管理的命令,會(huì)單獨(dú)使用一篇文章來說明,到時(shí)候完成磁盤管理講解的文章再來這里更新指令。
三、命令使用小技巧
上面記錄了一些 Shell 常用的命令,我們在使用命令行的過程中,其實(shí)還有幾個(gè)小技巧,學(xué)會(huì)這幾個(gè)小技巧可以使得我們在使用命令行的過程中更加方便快捷。
3.1 自動(dòng)補(bǔ)全功能
自動(dòng)補(bǔ)全功能就是,只需要輸入命令的前面一部分字母,然后按下 Tab 鍵,如果只有一個(gè)命令匹配的話就會(huì)自動(dòng)補(bǔ)全這個(gè)命令剩下的字母。
如果按一下 Tab 鍵沒有反應(yīng),說明有多個(gè)命令匹配,需要再按一下 Tab 鍵,系統(tǒng)會(huì)把所有匹配的命令列舉出來。
當(dāng)然,一個(gè)命令輸入的字母越多,越容易自動(dòng)補(bǔ)全,比如 ifconfig ,只輸入 i 就按下 Tab 鍵,這想都不用想,i 開頭的指令肯定很多,肯定不能自動(dòng)補(bǔ)全到 ifconfig ,如果輸入到 if 按 一下 Tab 鍵,也無法自動(dòng)補(bǔ)全,因?yàn)橐?if 開頭的指令也有多種,直到我們輸入 ifc ,然后再按一下 Tab 鍵,它就完全的會(huì)自動(dòng)補(bǔ)全到 ifconfig。
示例如圖:
自動(dòng)補(bǔ)全功能不僅對命令適用,對文件目錄也是一樣,其實(shí)想想也能明白,Linux 一切皆文件,命令也是文件,所以可以理解為自動(dòng)補(bǔ)全對 Linux 所有文件都適用。
舉個(gè)例子如圖:
3.2 重復(fù)輸入功能
我們在終端輸入指令的時(shí)候,有時(shí)候需要重復(fù)輸入 或者 輸入前面幾條輸入過的命令,可以使用鍵盤方向鍵,向上找到最近的輸入的指令:
我們在有些開發(fā)的時(shí)候,需要重復(fù)的輸入某些指令長指令,如果使用此技巧可以大大的節(jié)約時(shí)間。
當(dāng)然,除了鍵盤上的方向鍵,還有一種方式,可以重復(fù)上一次的指令,但是也只能重復(fù)上一次的指令,就是用兩個(gè)感嘆號命令 “!!”,示例如圖:
使用感嘆號,只能重復(fù)上一次指令,這樣看起來還不如我們使用方向鍵 快捷,那么它在什么時(shí)候比較合適呢?
就是在有些時(shí)候沒有權(quán)限的時(shí)候,需要加上 sudo 指令的情況下,使用:
sudo !!
舉個(gè)例子,如下圖:
使用此種方法,以后再系統(tǒng)中安裝軟件的時(shí)候,會(huì)很方便,因?yàn)榘惭b軟件大多需要獲取管理員權(quán)限。
結(jié)語
本文我們開始學(xué)習(xí)了很多的 Shell 指令,對于入門者來說,一下子記住這么多感覺會(huì)很不友好,正如我文中說過的,記不住沒有關(guān)系,linux 的學(xué)習(xí)一定要自己多動(dòng)手,Shell 命令自己多敲一敲,自然而然的就記住了。
文中也沒有把所有嵌入式開發(fā)需要的命令全部列舉,對于一些某些部分專用的命令,比如磁盤管理相關(guān),我們會(huì)在后面的對應(yīng)部分文章進(jìn)行說明講解。
☆ 最后還是再次強(qiáng)調(diào),命令行不是背出來的而是用出來的?!?/strong>
本文就到這里,謝謝大家!
審核編輯:湯梓紅
-
嵌入式
+關(guān)注
關(guān)注
5082文章
19104瀏覽量
304796 -
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209323 -
命令
+關(guān)注
關(guān)注
5文章
683瀏覽量
22011 -
Shell
+關(guān)注
關(guān)注
1文章
365瀏覽量
23356
發(fā)布評論請先 登錄
相關(guān)推薦
評論