Linux命令分為內(nèi)部命令(shell自帶的命令)和外部命令(不是shell自帶的命令,由用戶安裝),怎么鑒別是內(nèi)部命令和外部命令呢?可以通過type命令來鑒別
十多年的憑祥網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整憑祥建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“憑祥網(wǎng)站設(shè)計”,“憑祥網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
什么是shell呢?shell是一個程序,常用的有bash shell,平時我們通過用戶名和密碼登錄到linux,其實就是登錄到bash shell程序,通過bash shell來操作linux內(nèi)核
命令執(zhí)行流程
那豈不是說使用外部命令效率會很慢嗎?
其實一點都不慢,它會去PATH環(huán)境變量設(shè)置的一堆目錄中查找
cd is a shell builtin 表示內(nèi)部命令
ifconfig is hashed (/usr/sbin/ifconfig) 表示外部命令
cd命令切換文件夾
現(xiàn)在我們cd /usr/sbin
通過cat命令查看文件內(nèi)容
通過cat ifconfig來查看ifconfig,發(fā)現(xiàn)是亂碼文件
file命令查看文件類型
輸入file ifconfig
從輸出信息可以看出它是一個二進(jìn)制可執(zhí)行文件
whereis命令查看文件位置
find / -name jdk
echo命令用戶打印信息,相當(dāng)于java中的system.out.println
可以使用回車查看下一行、空格查看下一頁、q退出
一般使用man查看外部命令,help查看內(nèi)部命令
查看linux下的應(yīng)用和應(yīng)用的進(jìn)程號
當(dāng)我們在這個窗口中輸入kill -9 1593的話,另外一個正在編輯文件的進(jìn)程就會退出
在前面我們已經(jīng)講過,bash shell程序在執(zhí)行命令的一個過程及原理,對于外部命令,它會去PATH這個環(huán)境變量中查找執(zhí)行命令所在的路徑,當(dāng)然在去PATH中尋找之前會先去hash表中查找這個命令有沒有執(zhí)行過,執(zhí)行過的話會記錄在hash表中,則此次查找只需從hash表中就可以很方便的找到
查看分區(qū)信息 -h 表示文件大小后面會顯示文件大小
查看文件的使用情況
使用man ls 查看ls命令的相關(guān)介紹
-a:可以查看隱藏文件
-l:以長列表的形式展示文件列表信息
第一位 -:表示文件,d表示文件夾,b表示塊設(shè)備文件,c表示字符設(shè)備文件,p表示命令管道文件,s表示套接字文件, 從第二位開始往后數(shù)九位表示屬主權(quán)限(每三位一組 rwx:讀、寫、執(zhí)行),第11位表示的點表示分隔符,點后面的數(shù)字表示文件有幾個硬連接,第一個root代表屬主名,第二個root代表這個第一個root所在的組織,接下來的5表示文件大小,5后面的日期表示文件最后一次修改的時間, 1.txt代表的文件或文件夾的名稱
小結(jié):
切換文件目錄
cd 文件路徑
cd:切換到家目錄
cd ~:回到家目錄(也就是家目錄)
cd ..:回到上一級目錄
創(chuàng)建目錄
mkdir 目錄名
mkdir -p 目錄名,級聯(lián)創(chuàng)建目錄
cp 被拷貝的文件(可以是路徑加文件名) 拷貝到哪個位置
復(fù)制目錄使用
cp -r 被拷貝的目錄 目標(biāo)位置
移動命令
mv 被移動的文件 目標(biāo)位置+目標(biāo)文件名
rm 文件名(此中方式的刪除需要再輸入 yes)
rm -f 文件名,無提示直接刪除
rm -rf 文件夾
ln命令默認(rèn)創(chuàng)建的是硬連接
ln profile a:將a硬連接到profile文件上,他們底層共用一個文件,刪除他們之中任何一個
對另外一個沒有影響,同時你也可以使用 ll -i命令查看文件編號
ln -s profile a:將a軟連接到profile文件,當(dāng)你訪問a的時候會去訪問profile,profile再訪問底層文件,當(dāng)將profile刪除了之后a就無法訪問了
一致時間、創(chuàng)建新文本
touch 已存在的文件:會將文件的訪問時間、更新時間、改變時間(即上面stat中介紹的三個時間)變成一致
touch 不存在的文件:會創(chuàng)建一個新的文本
cat命令查看文件內(nèi)容
cat 1.txt:查看單個文件內(nèi)容
cat 1.txt 2.txt:查看多個文件
more 1.txt:以分頁的形式查看文件內(nèi)容,按空格:下一頁,回車:下一行(注意它不能回看,回看的話只能用鼠標(biāo)回輪)
less 1.txt:使用空格下一頁, b看上一頁, 回車看下一行
注意less的話會把整個文件內(nèi)容加載到內(nèi)存,如果文件比較大的話,建議使用more命令查看
head命令默認(rèn)查看文件前10行內(nèi)容, head 1.txt
head -5 1.txt:查看文件前5行的內(nèi)容
tail命令默認(rèn)查看文件后10行的內(nèi)容 tail 1.txt
tail -5 1.txt:查看文件后5行內(nèi)容
tail -f 1.txt:實時查看文件增量內(nèi)容
cat b.txt | head -3:管道左邊的命令會以輸出流的形式交給管道右邊的命令,管道右邊以輸入流的形式接收并且拼到命令的右邊
注意:ls -l 不能接受前面的輸出流,這個怎么辦呢?可以通過xargs命令
vi文本編輯器末行模式的操作
set nu(number的縮寫): 設(shè)置行號
set nonu(nonumber的縮寫):取消行號
set readonly:設(shè)置為只讀
n:往下查找
N:往上查找
n:往上查找
N:往下查找
一般我們會在/etc/profile文件中設(shè)置一些環(huán)境變量,但是在設(shè)置的時候可能沒有記住目錄,這時候我們可以使用如下方式
效果
格式 :s/str1/str2/gi
/ : 臨近s命令的第一個字符邊界字符,也可以是 @或#
g : 一行內(nèi)全部替換
i : 忽略大小寫
范圍
n:行號
. :當(dāng)前光標(biāo)行
+n :偏移n行
-3
%:全文
全部刪除 1,$d
刪除前三行
刪除倒數(shù)第2行
光標(biāo)挪到最后一行 按下小寫的p
效果圖
正則表達(dá)式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特殊字符、及這些特定字符的組合組成一個"規(guī)則字符串",這個"規(guī)則字符串"用來表達(dá)對字符串的一種過濾邏輯。
\ :轉(zhuǎn)義字符
. :匹配任意單個字符
[1249a] :匹配中括號中任意字符
[^12] :匹配中括號中任意非1和2的字符
[a-k] :匹配中括號中任意a~k中的一個字符
^ :行首
$ :行尾
abc :單詞首尾邊界(匹配單詞abc)
| :連接操作符
(,) : 選擇操作符
\n :反向引用
? :匹配0到1次
在Linux中通過grep命令使用正則表達(dá)式來匹配信息
f :選擇顯示的列
s :不顯示沒有分隔符的行
d :自定義分隔符
n :按數(shù)值排序
r :倒序
t :自定義分隔符
K :選擇排序列
u :合并相同行
f :忽略大小寫
sed:行編輯器,以行為單位進(jìn)行處理,可以將數(shù)據(jù)進(jìn)行替換、刪除、新增、選取等特定工作
sed [options] 'Command' file ...
-n :靜默模式,不再默認(rèn)顯示模式空間(內(nèi)存)中的內(nèi)容
-i :直接修改原文件
-e SCRIPT :可以同時執(zhí)行多個腳本
-f /PATH/TO/SED_SCRIPT
-r :表示使用擴(kuò)展正則表達(dá)式
d :刪除符合條件的行
p :顯示符號條件的行
a \string :在指定的行后面追加新行,內(nèi)容為string
\n :可以用于換行
i \string :在指定的行前面添加新行,內(nèi)容為string
c :取代,c的后面可以接字符串
s /pattern/string/修飾符:查找并替換。默認(rèn)只替換每行中第一次被模式匹配到的字符串
g :行內(nèi)全局替換
i :忽略字符大小寫
s///:s###,s@@@
(),\1,\2
sed "2p" ctxt
但是在執(zhí)行下面的操作的時候文本中的內(nèi)容都顯示出來了,它的原理是,打印匹配的行,以及文本中所有的內(nèi)容
注意:它刪的是內(nèi)存中的數(shù)據(jù),而不是目標(biāo)文件
sed -i "3d" ctxt
它的原理是先把內(nèi)存中的第3行數(shù)據(jù)刪除,然后再把內(nèi)存中的數(shù)據(jù)寫回原文件,這時原文件中的第三行就沒有了
使用變量的形式
awk是一個強(qiáng)大的文本分析工具。
相對于grep的查找,sed的編輯,awk在其對數(shù)據(jù)分析并生成報告時,顯得尤為強(qiáng)大。
簡單來說awk就是把文件逐行的讀入,(空格,制表符)為默認(rèn)分隔符將每行切片,切開的部分再進(jìn)行各種分析處理。
awk -F '{pattern + action}' {filenames}
支持自定義分隔符,默認(rèn)是以空格分隔的
支持正則表達(dá)式匹配
支持自定義變量,數(shù)組 a[1] a[tom] map(key)
支持內(nèi)置變量
ARGC 命令行參數(shù)個數(shù)
ARGV 命令行參數(shù)排列
ENVIRON 支持隊列中系統(tǒng)環(huán)境變量的使用
FILENAME awk瀏覽的文件名
FNR 瀏覽文件的記錄數(shù)
FS 設(shè)置輸入域分隔符,等價于命令行 -F選項
NF 瀏覽記錄的域的個數(shù)
NR 已讀的記錄數(shù)
OFS 輸出域分隔符
ORS 輸出記錄分隔符
RS 控制記錄分隔符
支持函數(shù)
print、split、substr、sub、gsub
支持流程控制語句
if、while、do/while、for、break、continue
練習(xí)題
passwd文件內(nèi)容解讀:
passwd文件中每行由7個字段組成,字段與字段之間由:分隔,第一個字段代表用戶名,第二個字段表示用戶對應(yīng)的加密后的密碼,第三個字段表示userId,第四個字段表示groupId,第五個字段表示對用戶的描述,第六個字段表示用戶的家目錄,第七個字段表示的是這個用戶默認(rèn)使用的shell
其中$0表示整行
統(tǒng)計報表:合計每人1月工資, 0:manager,1:worker
將awk后面的內(nèi)容封裝到一個文件中(封裝的腳本要遵循一定的格式)
qqq文件的內(nèi)容格式
Linux中命令格式為:
command [options] [arguments] //中括號代表是可選的,即有些命令不需要選項也不需要參數(shù),但有的命令在運行時需要多個選項或參數(shù)。
選項options:
選項是調(diào)整命令執(zhí)行行為的開關(guān),即,選項不同決定了命令的顯示結(jié)果不同。
選項分為長選項和短選項。
短選項:比如-h,-l,-s等。(- 后面接單個字母)
l短選項都是使用‘-’引導(dǎo),當(dāng)有多個短選項時,各選項之間使用空格隔開。
l有些命令的短選項可以組合,比如-l –h 可以組合為–lh
l有些命令的短選項可以不帶-,這通常叫作BSD風(fēng)格的選項,比如ps aux
l有些短選項需要帶選項本身的參數(shù),比如-L 512M
長選項:比如--help,--list等。(-- 后面接單詞)
l長選面都是完整的單詞
l長選項通常不能組合
l如果需要參數(shù),長選項的參數(shù)通常需要‘=’,比如--size=1G
參數(shù)arguments:
參數(shù)是指命令的作用對象。
如ls命令,不加參數(shù)的時候顯示是當(dāng)前目錄,也可以加參數(shù),如ls /dev, 則輸出結(jié)果是/dev目錄。
以上簡要說明了選項及參數(shù)的區(qū)別,但具體Linux中哪條命令有哪些選項及參數(shù),需要我們靠經(jīng)驗積累或者查看Linux的幫助了?!禠inux就該這么學(xué)》一起學(xué)習(xí)
總結(jié):
選項是限定結(jié)果的顯示結(jié)果
短選項(- 一個橫杠):只能修飾一個字符的選項,比如: ls -a,當(dāng)然多個短選項可以合并,比如tar -cvf
長選項(-- 兩個橫杠):可以修飾單個字符,也可以修飾一個單詞,比如:(1) chkconfig --list (2)chkconfig --add xxx (3)service --status-all
參數(shù)是傳遞到腳本中的真實的參數(shù)
linux的命令操作對象叫參數(shù),選項是對操作的過程做個修飾。
就像我們說,殺豬,殺是命令,豬就是參數(shù),而選項是個修飾,比如兇狠的殺,還是溫柔的殺。
比如刪除文件 rm file,rm是命令,file是參數(shù),我們沒給選項,可以加個選項,執(zhí)行rm -f file,這里-f就是選項,代表force,強(qiáng)制刪除,就是修飾這個刪除動作的過程的。