Linux基础学习(Ubuntu)
Linux非?;A(chǔ)的知識(shí)學(xué)習(xí)和總結(jié)
內(nèi)容參考:
1.man page;
2.鳥哥的Linux私房菜-基礎(chǔ)學(xué)習(xí)篇。
?
本文章PDF版(我懶得在這上面排版了。都是為了學(xué)習(xí),請(qǐng)支持原創(chuàng)):
鏈接: 百度云盤
提取碼: 7um8
?
一、Linux基本概念
1. 用戶與用戶組
在Linux里面,每個(gè)文件都有相當(dāng)多的屬性,其中最重要的可能就是文件的擁有者。任何一個(gè)文件都具有User,Group和Others三種身份的個(gè)別權(quán)限。
默認(rèn)情況下,所有系統(tǒng)上的賬號(hào)與一般身份使用者,還有root的相關(guān)信息,都是記錄在/etc/passwd這個(gè)文件內(nèi)的,至于個(gè)人密碼則是記錄在/etc/shadow這個(gè)文件下。此外,Linux所有的組名都記錄在/etc/group里,這三個(gè)文件是Linux系統(tǒng)內(nèi)賬號(hào)、密碼和群組信息的集中地
1) 文件擁有者
2) 群組
每個(gè)賬號(hào)可以有多個(gè)群組的支持。
3) 其他人
群組之外的人。
?
2. 權(quán)限
利用命令ls -l查看某個(gè)文件,文件前面一欄中第一欄-rwxrw-r--代表文件的類型與權(quán)限,第一個(gè)字符代表這個(gè)文件是目錄、文件或鏈接文件等。
接下來的字符中,三個(gè)為一組,且均為‘rwx’這三個(gè)參數(shù)的組合,其中 r 代表可讀(read), w 代表可寫(write), x代表可執(zhí)行(execute).這三個(gè)權(quán)限的位置不會(huì)改變,如果沒有權(quán)限,就會(huì)出現(xiàn)減號(hào)‘-’。
這三組中第一組為“文件擁有者的權(quán)限”;第二組為“同群組的權(quán)限”;第三組為”非其他本群組的權(quán)限“。root則位于這三者之上。
權(quán)限對(duì)文件的重要性:
文件是實(shí)際含有數(shù)據(jù)的地方,包括一般文本文件、數(shù)據(jù)庫內(nèi)容文件、二進(jìn)制可執(zhí)行文件(binary program)等等。因此權(quán)限對(duì)于文件來說,意義是這樣的:
r(read) : 可讀取這一文件的實(shí)際內(nèi)容,如讀取文本文件的文字內(nèi)容等
w(write) : 可以編輯、新增或是修改該文件的內(nèi)容(但不含刪除該文件)
x(execute) : 該文件具有可以被系統(tǒng)執(zhí)行的權(quán)限
在Windows下一個(gè)文件是否具有執(zhí)行能力是有“擴(kuò)展名”來判斷的,例如.exe,.bat,.com等等,但是在Linux下,文件是否能被執(zhí)行,是由是否具有“x“這個(gè)權(quán)限來決定的,而和文件名沒有絕對(duì)的關(guān)系。
對(duì)于文件的rwx來說,主要都是針對(duì)”文件內(nèi)容“而言,與文件名沒有關(guān)系,因?yàn)槲募涗浀氖菍?shí)際的數(shù)據(jù)。
權(quán)限對(duì)目錄的重要性:
目錄主要的內(nèi)容在記錄文件名列表,文件名與目錄有強(qiáng)烈的關(guān)系,對(duì)于目錄來說”rwx“的意義是:
r(read contentrs in directory) :
表示具有讀取目錄結(jié)構(gòu)列表的權(quán)限,當(dāng)你具有讀取(r)一個(gè)目錄的權(quán)限時(shí),表示你可以查詢?cè)撃夸浵碌奈募麛?shù)據(jù)??梢允褂胠s命令將該目錄的內(nèi)容列表顯示出來。
w(modify contents of directory) :
表示你具有改動(dòng)該目錄的權(quán)限,即:
1) 建立新的文件與目錄
2) 刪除已經(jīng)存在的文件與目錄(不論文件的權(quán)限為何)
3) 將已經(jīng)存在的文件或目錄更名
4) 移動(dòng)該目錄內(nèi)的文件與目錄的位置
x(access directory) :
代表用戶能否進(jìn)入目錄成為工作目錄。所謂工作目錄(work directory)就是你目前所在的目錄。變換目錄的指令是cd。
?
3. 文件系統(tǒng)
Linux最傳統(tǒng)的磁盤文件系統(tǒng)(filesystem)使用的是EXT2,而文件系統(tǒng)是創(chuàng)建在硬盤上面的。傳統(tǒng)的磁盤與文件系統(tǒng)的應(yīng)用中,一個(gè)分隔槽就是只能被格式化成為一個(gè)文件系統(tǒng),所以之前說一個(gè)filesystem就是一個(gè)partition。但是由于新技術(shù)的利用,例如LVM和磁盤列陣(software raid),這些技術(shù)可以將一個(gè)分隔槽格式化為多個(gè)文件系統(tǒng)(例如LVM),也就能都將多個(gè)分隔槽合成一個(gè)文件系統(tǒng)(LVM,RAID)。目前在格式化時(shí)已經(jīng)不再說針對(duì)partition格式化了,通常我們稱呼一個(gè)可被掛載的數(shù)據(jù)為一個(gè)文件系統(tǒng)而不是一個(gè)分隔槽。
文件系統(tǒng)的運(yùn)行與操作系統(tǒng)的文件數(shù)據(jù)有關(guān)。較新的操作系統(tǒng)的文件數(shù)據(jù)除了文件實(shí)際內(nèi)容之外,通常會(huì)含有非常多的屬性,例如Linux操作系統(tǒng)的文件權(quán)限(rwx)與文件屬性(擁有者、群組、時(shí)間參數(shù)等)。文件系統(tǒng)通常會(huì)將這兩部分的數(shù)據(jù)分別存放在不同的區(qū)塊,權(quán)限與屬性放置到inode中,至于實(shí)際數(shù)據(jù)則放置到data block區(qū)塊中。另外還會(huì)有一個(gè)超級(jí)區(qū)塊(superblock)會(huì)記錄整個(gè)文件系統(tǒng)的整體信息,包括inode與block的總量、使用量和剩余量等。
每個(gè)inode與block都有編號(hào),這三個(gè)數(shù)據(jù)的意義簡(jiǎn)略說明:
superblock : 記錄此filesystem的整體信息,包括inode/block的總量、使用量、剩余量、以及文件系統(tǒng)的格式和相關(guān)信息等
inode : 記錄文件的屬性,一個(gè)文件占用一個(gè)inode,同時(shí)記錄此文件的數(shù)據(jù)所在的block號(hào)碼
block : 實(shí)際記錄文件的內(nèi)容,若文件太大,會(huì)占用多個(gè)block
由于每個(gè)inode和block都有編號(hào),而每個(gè)文件都會(huì)占用一個(gè)inode,inode內(nèi)則有文件數(shù)據(jù)放置的block號(hào)碼,操作系統(tǒng)能夠依據(jù)號(hào)碼來排列磁盤的閱讀順序,一次性將這些block的內(nèi)容讀出來。這種數(shù)據(jù)的存取方法稱為索引式文件系統(tǒng)(indexed allocation)。另外,像閃存盤使用的文件系統(tǒng)一般為FAT格式,沒有inode存在,每個(gè)block號(hào)碼都記錄在前一個(gè)block當(dāng)中。
目錄:
當(dāng)在Linux下的ext2文件系統(tǒng)創(chuàng)建一個(gè)目錄時(shí),ext2會(huì)分配一個(gè)inode與至少一塊block給該目錄。其中,inode記錄該目錄的相關(guān)權(quán)限與屬性,并記錄分配到的那塊block號(hào)碼;而block則是記錄在這個(gè)目錄下的文件名與該文件名占用的inode號(hào)碼數(shù)據(jù)。
文件:
當(dāng)在Linux下的ext2創(chuàng)建一個(gè)一般文件時(shí),ext2會(huì)分配一個(gè)inode與相對(duì)于該文件大小的block數(shù)量給該文件。
目錄樹讀取:
目錄樹是由根目錄開始讀起,因此系統(tǒng)透過掛載的信息可以找到掛載點(diǎn)的inode號(hào)碼(通常一個(gè)filesystem的最頂層inode號(hào)碼會(huì)由2號(hào)開始),此時(shí)就能夠得到根目錄的inode內(nèi)容,并依據(jù)該inode讀取根目錄的block內(nèi)的文件名數(shù)據(jù),再一層一層的往下讀到正確的檔名。
?
4. 掛載
文件系統(tǒng)要能夠鏈接到目錄才能被我們使用,將文件系統(tǒng)與目錄樹結(jié)合的動(dòng)作我們成為“掛載”。掛載點(diǎn)一定是目錄,該目錄為進(jìn)入該文件系統(tǒng)的入口。因此并不是任何文件系統(tǒng)都能夠使用,必須要“掛載”到目錄樹的某個(gè)目錄后才能夠使用該文件系統(tǒng)。
?
5. 啟動(dòng)
當(dāng)按下電源按鍵后,計(jì)算機(jī)硬件會(huì)主動(dòng)讀取BIOS來加載硬件資訊以及進(jìn)行硬件系統(tǒng)的自我測(cè)試,之后系統(tǒng)會(huì)主動(dòng)的去讀取第一個(gè)可啟動(dòng)的裝置(由BIOS配置的),此時(shí)就可以讀入啟動(dòng)管理程序了。
啟動(dòng)管理程序可以指定哪個(gè)核心文件來啟動(dòng),并實(shí)際加載核心到內(nèi)存當(dāng)中解壓縮與運(yùn)行,此時(shí)核心就能夠開始在內(nèi)存內(nèi)活動(dòng),并偵測(cè)所有硬件資訊與加載適當(dāng)?shù)尿?qū)動(dòng)程序來使整部主機(jī)開始運(yùn)行,等到核心偵測(cè)硬件與加載驅(qū)動(dòng)程序完畢后,一個(gè)操作系統(tǒng)就開始在PC上跑了。
主機(jī)程序運(yùn)行后,此時(shí)Linux才會(huì)呼叫外部程序開始準(zhǔn)備軟件運(yùn)行的環(huán)境,并且實(shí)際的加載所有系統(tǒng)運(yùn)行所需要的軟件程序。最后系統(tǒng)開始等待你的登陸與操作。簡(jiǎn)單來說,系統(tǒng)啟動(dòng)的經(jīng)過可以匯成底下的流程的:
1) 加載BIOS的硬件資訊與進(jìn)行自我測(cè)試,并依據(jù)配置取得第一個(gè)可啟動(dòng)裝置;
2) 讀取并運(yùn)行第一個(gè)啟動(dòng)裝置內(nèi)的MBR的boot Loader(亦即是grub,spfdisk等程序);
3) 依據(jù)boot loader的配置加載Kernel,Kernel會(huì)開始偵測(cè)硬件與加載驅(qū)動(dòng)程序;
4) 在硬件驅(qū)動(dòng)成功后,Kernel會(huì)主動(dòng)呼叫init程序,而init會(huì)取得run-level資訊;
5) init 運(yùn)行/etc/rc.d/rc.sysinit文件來準(zhǔn)備軟件運(yùn)行的作業(yè)環(huán)境(如網(wǎng)絡(luò)、時(shí)區(qū)等);
6) init 運(yùn)行run-level的各個(gè)服務(wù)之啟動(dòng)(script方式);
7) init 運(yùn)行/etc/rc.d/rc/local文件;
8 )init運(yùn)行終端機(jī)模擬程序mingetty來啟動(dòng)login程序,最后等待使用者登陸。
Boot loader 的功能:
Loader的最主要的功能是要認(rèn)識(shí)操作系統(tǒng)的文件格式并據(jù)以加載核心到主內(nèi)存中去運(yùn)行。由于不同操作系統(tǒng)的文件格式不一致,因此每種操作系統(tǒng)都有自己的boot loader。
每個(gè)文件系統(tǒng)(filesystem 或 partition)都會(huì)保留一塊啟動(dòng)磁盤(boot sector)提供操作系統(tǒng)安裝boot loader,而通常操作系統(tǒng)默認(rèn)都會(huì)安裝一份loader到它根目錄所在的文件系統(tǒng)的boot sector上。
每個(gè)操作系統(tǒng)默認(rèn)是會(huì)安裝一套boot loader到它自己的文件系統(tǒng)中,而Linux系統(tǒng)在安裝時(shí),你可以選擇將boot loader安裝到MBR中,也可以選擇不安裝。如果選擇安裝到MBR的話,那理論上你在MBR和boot sector都會(huì)保留一份boot loader程序的。至于Windows安裝時(shí),它默認(rèn)會(huì)主動(dòng)的將MBR與boot sector都裝上一份boot loader,所以,你會(huì)發(fā)現(xiàn)安裝多重系統(tǒng)時(shí),你的MBR常常會(huì)被不同的操作系統(tǒng)的boot loader所覆蓋了。
各個(gè)操作系統(tǒng)都可以安裝一份boot loader到它們的boot sector中,這樣操作系統(tǒng)可以透過自己的boot loader來加載核心。系統(tǒng)的MBR只有一個(gè),要怎么運(yùn)行boot sector里面的loader呢?這時(shí)就要用到boot loader 的功能。boot loader的主要功能如下:
1) 提供菜單:使用者可以選擇啟動(dòng)不同的啟動(dòng)項(xiàng)目,這也是多重啟動(dòng)的重要功能;
2) 加載核心文件:直接指向可啟動(dòng)的程序區(qū)段來開始操作系統(tǒng);
3) 轉(zhuǎn)交其他loader:將啟動(dòng)管理功能轉(zhuǎn)交給其他loader負(fù)責(zé)。
由于具有菜單功能,因此我們可以選擇不同的核心來啟動(dòng)。由于具有控制權(quán)轉(zhuǎn)交功能,我們可以加載其他boot sector內(nèi)的loader。不過Windows的loader默認(rèn)不具有控制權(quán)轉(zhuǎn)交功能,因此不能使用Windows的loader來加載Linux的loader。這也是為什么先裝Windows再裝Linux的緣故。
而最終boot loader的功能就是加載kernel文件。
?
?
二、Linux常見命令
(一)指令與變量 alias, history, echo, env, locale
開始下達(dá)指令
command [-options] parameter1 parameter2... 指令 選項(xiàng) 參數(shù)(1) 參數(shù)(2)
注意:
1) 一行指令中第一個(gè)輸入的部分絕對(duì)是“指令”或“可執(zhí)行文件;
2) 指令太長的時(shí)候,可以用反斜線()來轉(zhuǎn)義[ENTER]符,使指令連續(xù)到下一行;
3)在Linux系統(tǒng)中,英文大小寫字母是不一樣的。
1. alias 定義或顯示別名
alias lm='ls -al':執(zhí)行l(wèi)m命令即執(zhí)行l(wèi)s -al。 若要要命令別名拿掉,即:unalias lm。
2. history 查詢?cè)?jīng)下達(dá)的指令
history n:列出最近的n條命令。
3. echo 取用變量
echo $variable(${variable})
4. env 列出目前shell環(huán)境下所有環(huán)境變量與內(nèi)容
5. locale 顯示有關(guān)當(dāng)前語言環(huán)境的信息
?
(二)Linux系統(tǒng)的在線求助 help, man, info
1. help
指令 --help
2. man
man 要了解的內(nèi)容
3. info
用法同man。info是將文件數(shù)據(jù)拆成一個(gè)一個(gè)的段落,每個(gè)段落都有自己的頁面,每個(gè)獨(dú)立的頁面也被稱為一個(gè)節(jié)點(diǎn)(node)。
?
(三)日期與時(shí)間 date, cal
date 顯示系統(tǒng)日期和時(shí)間;cal 顯示日歷。
?
(四)用戶 su, sudo, passwd
1. su 身份切換指令
su [-lm][-c 指令] [username] ? - : 單純使用 - 如“su - ”代表使用log-shell的變量文件讀取方式來登陸系統(tǒng);若使用者名稱沒有加上去,則代表切換為root身份 -l : 與 - 類似,但后面需要加欲切換的使用者賬號(hào)!也是log-shell的方式 -m : -m與-p是一樣的,表示“使用目前的環(huán)境設(shè)置,而不讀取新使用者的配置文件” -c : 僅進(jìn)行一次指令,所以-c后面可以加上指令2. sudo 使用其他身份執(zhí)行指令(通常是root)
sudo [-b] [-u 新使用者賬號(hào)] 要執(zhí)行的命令 -b : 將后續(xù)的指令放到背景中讓系統(tǒng)自行執(zhí)行,而不與目前的shell產(chǎn)生影響 -u : 后面可以接欲切換的使用者,若無此項(xiàng)則代表切換身份為root補(bǔ)充:
可以用visudo來修改/etc/sudoers使單一使用者可進(jìn)行root所有指令.
3. passwd 更改用戶賬戶的密碼
普通用戶通常只能更改自己賬戶的密碼,而超級(jí)用戶可以更改任何用戶的密碼。passwd也更改賬戶或相關(guān)的密碼有效期。
?
(五)文件屬性與權(quán)限 chown, chgrp,chmod
1. chown 修改文件擁有者
chown [-R] 賬號(hào)名稱 文件或目錄 chown [-R] 賬號(hào)名稱:用戶組名稱 文件或目錄 (可以順便直接修改用戶組的名稱) -R : 進(jìn)行遞歸修改,亦即連同子目錄下的所有文件、目錄都修改2. chgrp 修改文件所屬用戶組
chgrp [-R] 用戶組名稱 文件或目錄 -R : 進(jìn)行遞歸修改,亦即連同子目錄下的所有文件、目錄都修改3. chmod 修改文件的權(quán)限
數(shù)字類型修改文件權(quán)限:
各權(quán)限的數(shù)字對(duì)照表: r:4 ;w:2 ;x:1 ? rxw=4+2+1=7 chmod [-R] xyz 文件或目錄 xyz : 為rwx屬性數(shù)值的相加 -R : 進(jìn)行遞歸修改,亦即連同子目錄下的所有文件、目錄都修改符號(hào)類型修改文件權(quán)限:
chmod [ugoa][+-=][rwx] 文件或目錄 ugoa分別代表user,group,others和all(全部身份); +:加入; -:移除; =:設(shè)置?
(六)Linux文件與目錄管理
pwd, cd, ls ; mkdir, rmdir ; cp, rm, mv ;
cat, more, less, head, tail; which,locate, find;
touch; wget, curl; tar
1. pwd 顯示目前所在目錄,cd 切換目錄,ls 文件與目錄的查看
pwd
pwd [-P] -P : 顯示出真正的路徑,而非使用鏈接(link)路徑cd
cd ~heidi : 代表回到使用者的家目錄,即/home/heidi cd ? ? ? : 沒有加任何路徑,也是代表回到自己家目錄 cd .. ? ? : 表示去到目前的上層目錄 cd - ? ? : 表示回到剛剛那個(gè)目錄,就是上一個(gè)目錄 cd /var/spool/mail : 這個(gè)是絕對(duì)路徑的寫法,指定要去的完整路徑名稱 cd ../postfix ? ? ? : 這個(gè)是相對(duì)路徑的寫法,由/var/spool/mail到/var/spool/postfix就這樣寫ls
ls [-aAhilrRS...] 文件名或目錄名稱 -a : 不隱藏任何以.開始的項(xiàng)目 -A : 列出除.和..之外的任何項(xiàng)目 -h : 將文件容量以人類較易讀的方式(例如GB、KB等)列出來 -i : 列出inode號(hào)碼 -l : 使用較長格式列出信息,包含文件的屬性與權(quán)限等數(shù)據(jù) ? ? ? ? ? ? ? ? ? -r : 將排序結(jié)果反向輸出 -R : 連同子目錄內(nèi)容一起列出來,等于該目錄下所有內(nèi)容都會(huì)顯示出來 -S : 以文件容量大小排序 補(bǔ)充:ll='ls -al',ll是命令別名,這個(gè)很常用2. mkdir 創(chuàng)建目錄,rmdir 刪除“空”的目錄
mkdir
mkdir [-mp] 目錄名稱 -m : 設(shè)置文件的權(quán)限。直接設(shè)置,不使用默認(rèn)權(quán)限(umask) -p : 幫助你直接將所需要的目錄(包含上層目錄)遞歸創(chuàng)建rmdir
rmdir [-p] 目錄名稱 -p : 連同上層“空”的目錄也一起刪除 注意:目錄需要一層一層地刪除,并且被刪除的目錄里面必定不能存在其他的目錄或文件!3. cp 復(fù)制,rm 刪除,mv 移動(dòng)或重命名 三者均可對(duì)文件和目錄進(jìn)行操作
cp
cp [-adfilprsu] 源文件 目標(biāo)文件 -a : 相當(dāng)于-dr --preserve=all的意思 -d : 若文件為鏈接文件的屬性,則復(fù)制鏈接文件而非文件本身 -f : 即force,若目標(biāo)文件已經(jīng)存在且無法開啟,則刪除后再嘗試一次 -i : 若目標(biāo)文件已存在,在覆蓋時(shí)先詢問操作的進(jìn)行 -l : 進(jìn)行硬鏈接的鏈接文件建立,而非復(fù)制文件本身 -p : 連同文件的屬性(權(quán)限、用戶、時(shí)間)一起復(fù)制過去,而非使用默認(rèn)屬性(備份常用) -r : 遞歸復(fù)制,常用于目錄的復(fù)制操作 -s : 復(fù)制為符號(hào)鏈接文件,即“快捷方式”文件 -u : 目標(biāo)文件比源文件舊才更新目標(biāo)文件,或者目標(biāo)文件不存在的情況下才復(fù)制 --preserve=all : 除了-p的權(quán)限相關(guān)參數(shù)外,還加入SELinux的屬性,links,xattr等也復(fù)制 注意:如果源文件有兩個(gè)以上,則最后一個(gè)目標(biāo)文件一定要是“目錄”才行rm
rm [-fIr] 文件或目錄 -f : 即force,忽略不存在的文件,不會(huì)出現(xiàn)警告信息 -I : 交互模式,在刪除前會(huì)詢問使用者是否操作 -r : 遞歸刪除,最常用于目錄的刪除,這是非常危險(xiǎn)的選項(xiàng)!!刪除之后沒有基本方式可以復(fù)原!!小心使用!!mv
mv [-fiu] source destination mv [options] source1 source2 source3 ... directory -f : force強(qiáng)制的意思,如果目標(biāo)文件已經(jīng)存在,不會(huì)詢問直接覆蓋 -i : 若目標(biāo)文件(destination)已經(jīng)存在時(shí),就會(huì)詢問是否覆蓋 -u : 若目標(biāo)文件已經(jīng)存在,且source比較新,才會(huì)更新(update) 注意:如果有多個(gè)源文件或目錄,則最后一個(gè)目標(biāo)文件一定是“目錄”4. cat 查看文件內(nèi)容,more, less 翻頁查看,head, tail 數(shù)據(jù)截取
cat
cat [-AbEnTv] -A : 相當(dāng)于-vET的整合選項(xiàng),可列出一些特殊字符而不是空白而已 -b : 列出行號(hào),僅針對(duì)非空白行做行號(hào)顯示,空白行不標(biāo)行號(hào) -E : 將結(jié)尾的換行符$顯示出來 -n : 打印出行號(hào),連同空白行也會(huì)有行號(hào),與-b選項(xiàng)不同 -T : 將[Tab]鍵以^I顯示出來 -v : 列出一些看不出來的字符more, less
more 文件 ? 空格鍵(space) : 代表向下翻一頁 Enter : 代表向下翻一行 /字符串 : 代表在這個(gè)顯示的內(nèi)容當(dāng)中,向下查找字符串這個(gè)關(guān)鍵詞 :f : 立刻顯示文件名即目前顯示的行數(shù) q : 代表立刻離開more,不再顯示該文件內(nèi)容 b或Ctrl+b : 代表往回翻頁,只對(duì)文件有用,對(duì)管道無用less 文件 空格鍵(space) : 代表向下翻一頁 [pageup]/[pagedown] : 向上/向下翻動(dòng)一頁 /字符串 : 代表在這個(gè)顯示的內(nèi)容當(dāng)中,向下查找字符串這個(gè)關(guān)鍵詞 ?字符串 : 代表在這個(gè)顯示的內(nèi)容當(dāng)中,向上查找字符串這個(gè)關(guān)鍵詞 n : 重復(fù)前一個(gè)查找(和/或?有關(guān)) N : 反向重復(fù)前一個(gè)查找(和/或?有關(guān)) g : 前進(jìn)到這個(gè)數(shù)據(jù)的第一行 G : 前進(jìn)到這個(gè)數(shù)據(jù)的最后一行 q :離開less這個(gè)程序head, tail
head(取出前面幾行) head [-n number] 文件 ? -n : 后面接數(shù)字,代表顯示幾行的意思 注意:1) 默認(rèn)情況下只顯示10行;2) 如果后面接負(fù)數(shù),例如-20,代表列出前面所有行數(shù),但不包括后面20行tail(取出后面幾行) head [-n number] 文件 ? -n : 后面接數(shù)字,代表顯示幾行的意思 -f : 表示持續(xù)刷新顯示后面所接的文件中的內(nèi)容。實(shí)時(shí)查看文件,Ctrl+c退出5. which(查找“執(zhí)行文件”),locate , find 腳本文件的查找
which
which [-a] command -a : 將所有由PATH目錄中可以找到的命令均列出,而不只第一個(gè)被找到的命令 注意:這個(gè)命令是根據(jù)PATH這個(gè)環(huán)境變量所規(guī)范的路徑,去查找執(zhí)行文件的文件名,which后面接的是完整文件名locate
locate [-iclSr] keyword -i : 忽略大小寫的差異 -c : 不輸出文件名,僅計(jì)算找到的文件數(shù)量 -l : 僅輸出幾行的意思,后面接數(shù)字 -S : 輸出locate所使用的數(shù)據(jù)庫文件的相關(guān)信息 -r : 后面可接正則表達(dá)式的顯示方式 說明:locate直接在后面輸入文件部分名稱即可,在完整文件名(包含路徑名稱)中只要包含查找的名稱都會(huì)顯示出來find
find [PATH] [option] [action] 選項(xiàng)與參數(shù): 1) 與時(shí)間有關(guān)的選項(xiàng):共有-atime,-ctime與-mtime,以-mtime說明 -mtime n : n為數(shù)字,意義為在n天之前的“一天之內(nèi)”被更動(dòng)過內(nèi)容的文件 -mtime +n : 列出在n天之前(不含n天本身)被更改過內(nèi)容的文件文件名 -mtime -n : 列出在n天之內(nèi)(含n天本身)被更改過內(nèi)容的文件文件名 -newer file : file為一個(gè)存在的文件,列出bifile還要新的文件文件名 ? 2) 與使用者或群組名稱有關(guān) -uid n : n為數(shù)字,是使用者的賬號(hào)ID,亦即UID,這個(gè)UID是記錄在/etc/passwd里面與賬號(hào)名稱對(duì)應(yīng)的數(shù)字 -gid n : n為數(shù)字,是群組名稱的ID,亦即GID,這個(gè)GID是記錄在/etc/group -user name : name是使用者賬號(hào)名稱 -group name : name是是群組名稱 -nouser : 尋找文件的擁有者不存在于/etc/passwd里面的人 -nogroup : 尋找文件的擁有群組不存在于/etc/group里面的人 ? 3) 與文件權(quán)限及名稱有關(guān) -name filename : 搜尋文件名稱為filename的文件 -size [+-]SIZE : 搜尋比SIZE還要大(+)或小(-)的文件 -type TYPE : 搜尋文件類型為TYPE的,類型主要有:一般正規(guī)文件(f),裝置文件(b,c),目錄(d),連結(jié)檔(l),socket(s) -perm mode : 搜尋文件權(quán)限剛好等于mode的文件,屬性值類似chmod -perm -mode : 搜尋文件權(quán)限要必須包含mode的文件 -perm +mode : 搜尋文件權(quán)限包含任一mode的文件 ? 4) 額外 -exec command : command為其他指令,-exec后面可接額外的指令來處理搜尋到的結(jié)果,指令不支持命令別名 例如: -exec ls -l {} \; 其中{}表示find找到的內(nèi)容,"\;"表示額外命令的結(jié)束6. touch 修改文件時(shí)間或創(chuàng)建新文件
touch [-acdmt] 文件 -perm +mode : -a : 只更改訪問時(shí)間 -c : 只更改文件的時(shí)間,不創(chuàng)建任何文件 -d : 使用指定字符串表示時(shí)間而非當(dāng)前時(shí)間,也可以使用 --date=字符串 -m : 只更改修改時(shí)間 -t : 后面接時(shí)間而不用當(dāng)前時(shí)間,格式為[YYYYMMDDhhmm] 舉例:-d “2 days ago”可以將文件atime和mtime調(diào)到兩天之前,ctime不變7. wget, curl 文件下載
URL : Uniform Resource Locator的縮寫,即統(tǒng)一資源定位符,是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址,即網(wǎng)址。互聯(lián)網(wǎng)上每一個(gè)文件都有一個(gè)唯一的URL,它包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它。
Cookie:有時(shí)也用其復(fù)數(shù)形式Cookies,指某些網(wǎng)站為了辨別用戶身份、進(jìn)行session跟蹤而儲(chǔ)存在用戶本地終端上的數(shù)據(jù)(經(jīng)常經(jīng)過加密)。Cookie實(shí)際上是一小段文本信息??蛻舳苏?qǐng)求服務(wù)器,如果服務(wù)器需要記錄該用戶狀態(tài),就使用response向客戶端瀏覽器頒發(fā)一個(gè)Cookie??蛻舳藭?huì)把Cookie保存起來,當(dāng)瀏覽器再次請(qǐng)求該網(wǎng)站時(shí),把請(qǐng)求的網(wǎng)址連同該Cookie一同交給服務(wù)器。服務(wù)器檢查Cookie以此來辨認(rèn)用戶狀態(tài)。服務(wù)器還可以根據(jù)需要修改Cookie的內(nèi)容。
wget
wget:Linux/Unix命令行文件下載器,它是下載網(wǎng)站上文件的免費(fèi)的非交互下載工具,它支持HTTP、HTTPS和FTP協(xié)議,也支持通過HTTP代理檢索。wget是非交互的,這就是說它可以在用戶沒有登陸到系統(tǒng)時(shí)在后臺(tái)工作。 wget [] [URL] 常用選項(xiàng)與參數(shù): wget ? URL : 下載單個(gè)文件 wget -c URL : 續(xù)傳分段下載文件.下載一個(gè)大文件,中途中斷了,讓下載從端點(diǎn)續(xù)傳 wget -b URL : 后臺(tái)下載文件。下載進(jìn)程被捕獲到當(dāng)前目錄的'wget-log'文件中 wget -P 目錄 URL : 下載文件到該目錄下 wget -i [存有要下載的所有URL的文本文件] : 先創(chuàng)建一個(gè)文本文件,將所有的URL添加到該文件中,-i后接該文件名 wget --limit-tate=amount URL : 限制下載速率。amount為下載速率,默認(rèn)bytes/s,可以加單位 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? k(kilobytes)或m(megabytes) wget --tries=number : 增加重試次數(shù),默認(rèn)情況下wget命令會(huì)重試20次直到下載成功 wget -o filename URL: 重定向wget命令的文件到另一個(gè)文件 ? 補(bǔ)充示例:下載整個(gè)網(wǎng)站用于本地查看 wget --mirror -p -convert-links website-url --mirror : 開啟適用于鏡像的選項(xiàng) -p : 下載所有能正確顯示指定HTML網(wǎng)頁的全部必要文件 -convert-links : 下載完成后,轉(zhuǎn)檔文件中的鏈接以用于本地查curl
curl:curl is a tool to transfer data from or to a server. curr [] [URL] curl URL : 獲取頁面內(nèi)容。不加任何選項(xiàng)使用,默認(rèn)會(huì)發(fā)送GET請(qǐng)求來獲取鏈接內(nèi)容到標(biāo)準(zhǔn)輸出 curl -I URL : 只顯示HTTP頭而不顯示文件內(nèi)容 curl -i URL : 同時(shí)顯示http頭和文件內(nèi)容 curl -D URL :保存http的response里的header信息 curl -o 文件名 URL : 結(jié)果會(huì)保存到命令行中提供的文件名 也可以使用>符號(hào)將輸出重定向到本地文件中curl URL > 文件名 curl -O URL : URL中的文件名會(huì)被用作保存輸出的文件名,必須確保鏈接末尾包含文件名-o 和 -O 選項(xiàng)還可以用來同時(shí)指定多個(gè)鏈接 :-o 文件名1 URL1 -o 文件名2 URL2 ...-O URL1 -O URL2 ... curl -L URL : 跟隨鏈接重定向 curl -A "string" URL : 自定義用戶代理,例如下面的命令偽裝成安卓火狐瀏覽器對(duì)網(wǎng)頁進(jìn)行請(qǐng)求:curl -A "Mozilla/5.0(Android;Mobile;rv:35.0) Gecko/35.0 Firefox/35.0" URL curl -w %{http_code} linux.cn/ :測(cè)試網(wǎng)頁返回值 curl -c 文件名 URL : 保存http的response里的Cookie信息 curl -c 文件名 URL : 使用Cookie8. tar 打包命令
tar [-j|-z] [cv] [-f 創(chuàng)建的檔名] filename 打包與壓縮 tar [-j|-z] [tv] [-f 創(chuàng)建的檔名] ? ? ? ? ? 察看檔名 tar [-j|-z] [xv] [-f 創(chuàng)建的檔名] [-C 目錄] 解壓縮 -c : 創(chuàng)建打包文件,可搭配-v來察看過程中被打包的檔名(filename) -t : 察看打包文件的內(nèi)容含有哪些檔名,重點(diǎn)在于察看“檔名' -x : 解打包或解壓縮的功能,可以搭配-C(大寫)在特定目錄解開 注意:-c,-t,-x不能同時(shí)出現(xiàn)在一串命令列中 -j : 透過 bzip2 的支持進(jìn)行壓縮/解壓縮,此時(shí)檔名最好為 *.tar.bz2 -z : 透過 gzip 的支持進(jìn)行壓縮/解壓縮,此時(shí)檔名最好為 *.tar.gz -v : 在壓縮/解壓縮的過程中將正在處理的檔名顯示出來 -f filename : -f 后面要立刻接要被處理的檔名,建議-f 單獨(dú)寫一個(gè)選項(xiàng) -C 目錄 : 這個(gè)選項(xiàng)用在解壓縮,若要在特定目錄解壓縮,可以使用這個(gè)選項(xiàng) 其他: -P : 保留備份備份數(shù)據(jù)的原本權(quán)限與屬性,常用于備份(-c)重要的配置檔 -p : 保留絕對(duì)路徑,亦即允許備份數(shù)據(jù)中含有根目錄存在之意 --excl ude=FILE : 在壓縮的過程中,不要將FILE打包 ? 其實(shí)最簡(jiǎn)單的使用tar只要記憶下面的方式即可: 壓 縮:tar -jcv -f filename.tar.bz2 要被壓縮的文件或目錄名稱 查 詢:tar -jtv -f filename.tar.bz2 解壓縮:tar -jxv -f filename.tar.bz2 -C 欲解壓的目錄 其中filename.tar.bz2 是我們自己取的檔名,tar 并不會(huì)主動(dòng)的產(chǎn)生創(chuàng)建檔名,所以擴(kuò)展名就很重要,另外 ”-f filename“ 是緊連在一起的,最好將-f放在后面或單獨(dú)列出來?
(七)數(shù)據(jù)處理計(jì)算編輯工具 bc, nano, awk, vi&vim
1. bc 計(jì)算器
1) 做一些簡(jiǎn)單的加減乘除,+,-,*,/,^(指數(shù)),%(余數(shù));
2) bc僅默認(rèn)輸出整數(shù),如果要輸出小數(shù)點(diǎn)下位數(shù),必須要運(yùn)行scale=number,這個(gè)number就是小數(shù)點(diǎn)位數(shù);
3) 離開bc需要輸入qiut。
2. nano 文書編輯器
nano 編輯器被設(shè)計(jì)用來模仿華盛頓大學(xué) Pico 文本編輯器,且具有類似的功能性與易用性。
它包括四個(gè)主要部分:
頂行顯示程序版本、當(dāng)前被編輯的文件名以及該文件是否已被修改。 接著是主要編輯區(qū),顯示正在編輯的文件的狀態(tài)行位于倒數(shù)第三行,用來顯示重要的信息。底部的兩行顯示了編輯器中最常用的快捷鍵。
3. awk 數(shù)據(jù)處理
awk是一個(gè)數(shù)據(jù)處理工具,相較于sed常常作用于一整行的處理,awk則比較傾向于一行當(dāng)中分成數(shù)個(gè)“欄位”。因此,awk相當(dāng)?shù)倪m合處理小型的數(shù)據(jù)數(shù)據(jù)處理。
awk '條件類型1{動(dòng)作1} 條件類型2{動(dòng)作2} ... ' filename1) awk 后面接兩個(gè)單引號(hào)并加上大括號(hào){}來配置想要對(duì)數(shù)據(jù)進(jìn)行的處理動(dòng)作。awk 后面可以接后續(xù)接的文件,也可以讀取來自前個(gè)命令的 standard output。awk 主要處理“每一欄位的數(shù)據(jù)”,默認(rèn)的欄位分隔符為“空白鍵”或tab鍵;
2) awk 常搭配printf使用。所有的awk 動(dòng)作,即在{}里的動(dòng)作,如果需要多個(gè)命令輔助時(shí),可以利用分號(hào)“;”間隔,或者直接以Enter按鍵來隔開每個(gè)命令;
3) 命令中可以進(jìn)行邏輯運(yùn)算也支持if條件。
4. vi&vim 編輯器
vi是老式的字處理器,vim可以看作是vi的進(jìn)階版,vim可以用顏色或底線等方式來顯示一些特殊的信息,可以根據(jù)檔案擴(kuò)展名或者開頭信息判斷該檔案的內(nèi)容而自動(dòng)呼叫該程序的語法判斷式等等,還加入了其他很多功能,可以說是一個(gè)程序開發(fā)工具。
vi 共分為三種模式,分別是一般模式、編輯模式與指令命令模式
vi中的常用按鍵 :
第一部分:一般模式可用的按鍵
1) 移動(dòng)光標(biāo)的方法
n+[space] : n代表數(shù)字,按下數(shù)字之后再按空格鍵,光標(biāo)會(huì)右移這一行的n個(gè)字符
0或[Home] : 0是數(shù)字0,移動(dòng)到這一行的最前面字符處
$ 或 [end] : 移動(dòng)到這一行的最后面字符處
G : 移動(dòng)到這個(gè)檔案的最后一行
nG : n為數(shù)字。移動(dòng)到這個(gè)檔案的第n行
gg : 移動(dòng)到這個(gè)檔案的第一行,相當(dāng)于1G
n+Enter鍵 : n為數(shù)字,光標(biāo)向下移動(dòng)n行
2) 搜尋與取代
/word : 向光標(biāo)之下尋找一個(gè)名稱為word的字符串
?word : 向光標(biāo)之上尋找一個(gè)名稱為word的字符串
:n1,n2s/word1/word2/g(c) : n1和n2為數(shù)字。在第n1行與第n2行之間尋找word1這個(gè)字符串,并將該字符串取代
為word2。最后的c是可選選項(xiàng),加上會(huì)在取代前顯示提示字符給用戶確認(rèn)是否需要
取代。從第一行到最后一行可以這樣表示:1,$s
3) 刪除、復(fù)制與粘貼
x, X : 在一行字當(dāng)中,x 為向后刪除一個(gè)字符 ([del]),X 為向前刪除一個(gè)字符([backspace])
dd : 刪除光標(biāo)所在的一整列
ndd : n為數(shù)字,刪除光標(biāo)所在的向下n列
yy : 復(fù)制光標(biāo)所在的那一行
nyy : n為數(shù)字。復(fù)制光標(biāo)所在的向下n列
p,P : p 為將已復(fù)制的數(shù)據(jù)在光標(biāo)下一行貼上,P 則為貼在光標(biāo)上一行
u : 復(fù)原前一個(gè)動(dòng)作
Ctrl+r: 重做上一個(gè)動(dòng)作
. : 就是一個(gè)小數(shù)點(diǎn),作用是重復(fù)前一個(gè)動(dòng)作
第二部分:一般模式切換到編輯模式的按鍵
進(jìn)入插入或取代的編輯模式
i, I : 進(jìn)入插入模式。i為從目前光標(biāo)所在處插入,I為在目前所在行的第一個(gè)非空格出開始插入
a, A : 進(jìn)入插入模式。a為從目前光標(biāo)所在的下一個(gè)字符處開始插入,A為從光標(biāo)所在行的最后一個(gè)字符處開始插入
o, O: 進(jìn)入插入模式。是英文字母o的大小寫。o為在目前光標(biāo)所在的下一行處插入新的一行,O為在目前光標(biāo)所在
ip 處的上一行插入新的一行
r,R : 進(jìn)入取代模式。r只會(huì)取代光標(biāo)所在的那一個(gè)字符一次,R會(huì)一直取代光標(biāo)所在的文字,直到按下Esc
[Esc] ?退出編輯模式,回到一般模式中?
第三部分:一般模式切換到指令模式的按鍵
指令列的儲(chǔ)存、離開等指令
:w : 將編輯的數(shù)據(jù)寫入硬盤檔案中
:q : 離開vi
:q! : 若曾經(jīng)修改過檔案又不想儲(chǔ)存,使用!為強(qiáng)制離開不儲(chǔ)存檔案
:wq : 儲(chǔ)存后離開,若為:wq!則為強(qiáng)制儲(chǔ)存后離開
:!command : 暫時(shí)離開vi到指令列模式下執(zhí)行command的顯示結(jié)果
vim環(huán)境的變更
:set nu : 顯示行號(hào)
set noun : 取消顯示行號(hào)
?
(八)管道命令(pipe)
cut, grep; sort, uniq, wc; tr, col, join, paste, expand;
split; xargs
管線命令使用的界定符號(hào):|,管線命令僅能處理經(jīng)由前面一個(gè)命令傳來的正確信息,也就是standard output的信。每個(gè)管線后面接的第一個(gè)數(shù)據(jù)一定是一個(gè)命令,而且這個(gè)命令一定能夠接受standard input的數(shù)據(jù)才行。
這些管道命令并不會(huì)改變所處理的原文件信息!!!
關(guān)于減號(hào) - 的用途:
管線命令在bash的連續(xù)的處理程序中是相當(dāng)重要的。在管線命令當(dāng)中,常常會(huì)使用到前一個(gè)命令的stdout作為這次的stdin,某些命令需要用到文件名(例如tar)來進(jìn)行處理時(shí),該stdin與stdout可以用減號(hào)“-”來替代。例如:
tar -cvf - /home | tar -xvf -
上面的例子的意思是:將/home 里面的文件打包,但打包的數(shù)據(jù)不是記錄到文件,而是傳送到stdout,經(jīng)過管線后,將 tar -cvf - /home 傳送給后面的 tar -xvf -。后面的這個(gè)“-”是取用前一個(gè)命令的stdout,因此,我們就不需要使用file了
1. cut, grep 選取命令
將一段數(shù)據(jù)經(jīng)過分析后,選取出我們想要的?;蚴墙?jīng)由分析關(guān)鍵詞,取得我們想要的那一行。要注意的是,選取信息通常是針對(duì)“一行一行”來分析的,并不是整篇信息分析的。
cut
cut 可以將某一段信息“切”出來,處理的信息是以“行”為單位。將一行信息當(dāng)中取出某部分我們想要的。
cut -d '分隔字符' -f fields cut -c 字符區(qū)間 -d : 后面接分隔字符,與-f一起使用 -f : 依據(jù)-d的分隔字符將一段信息分割為數(shù)段,用-f取出第幾段的意思,后面可接多段,','號(hào)隔開 -c : 以字符的單位取出固定字符區(qū)間grep
grep 可以解析一行文字,取得關(guān)鍵字,若該行有存在關(guān)鍵詞,就會(huì)整行列出來。
grep [-acinv] [--color=auto] '搜尋字符串' filename -a : 將binary文件以text文件的方式搜尋數(shù)據(jù) -c : 計(jì)算找到'搜尋字符串'的次數(shù) -i : 忽略大小寫的不同,所以大小寫視為相同 -n : 順便輸出行號(hào) -v : 反向選擇,亦即顯示出沒有'搜尋字符串'內(nèi)容的那一行 --color=auto : 可以將找到關(guān)鍵詞的部分加上顏色的顯示2. sort, uniq, wc 排序命令
sort
sort 可以依據(jù)不同的數(shù)字型態(tài)進(jìn)行排序,例如數(shù)字和文字的排序就不一樣。
排序的字符與語系的編碼的有關(guān),需要排序時(shí)建議使用LANG=C來讓語系統(tǒng)一,數(shù)據(jù)排序比較好一些
stdin : standard input
sort [-fbMnrutk] [file or stdin] -f : 忽略大小寫的差異,例如A和a視為編碼相同 -b : 忽略最前面的空格符部分 -M : 以月份的名字來排序,例如 JAN,DEC等等的排序方法 -n : 使用“純數(shù)字”進(jìn)行排序,默認(rèn)是以文字型態(tài)來排序 -r : 反向排序 -u : 就是uniq,相同的數(shù)據(jù)中,僅出現(xiàn)一行代表 -t : 分隔符,默認(rèn)是用[Tab]鍵來分隔 -K : 以那個(gè)區(qū)間(field)來進(jìn)行排序的意思uniq
排序完成后,想要將重復(fù)的數(shù)據(jù)僅列出一個(gè)顯示。由于這個(gè)命令是在將重復(fù)的東西減少,要”配合排序過的文件“來處理!!!
uniq [-ic] -i : 忽略大小寫字符的不同 -c : 進(jìn)行計(jì)數(shù)wc
wc 可以計(jì)算輸出的信息的整體數(shù)據(jù),是很有用的計(jì)算文件內(nèi)容的一個(gè)工具組。
wc [-lwm] -l : 僅列出行 -w : 僅列出多少字(英文單字) -m : 多少字符 不加參數(shù)輸出三個(gè)數(shù)字分別代表:行、字?jǐn)?shù)、字符數(shù)3. tr, col, join, paste 字符轉(zhuǎn)換命令
tr
tr 可以用來刪除一段信息中的文字,或者是進(jìn)行文字信息的替換!
tr [-ds] SETI... -d : 刪除信息當(dāng)中的SET這個(gè)字符串 -s : 取代掉重復(fù)的字符 常用舉例: 1) tr '[a-z]' '[A-Z]'將輸出信息中的小寫變成大寫 2) tr -d '\r'去除DOS文件留下來的^M這個(gè)斷行的符號(hào),^M可以用\r來代替之col
col [-xb] -x : 將tab鍵轉(zhuǎn)換成對(duì)等的空格鍵 -b : 過濾掉所有的控制字符,包括RLF(Reverse Line Feed)和HRLF(Halt RLF)RLF,HRLF : 逆向換行符,半逆向換行符。逆向換行符會(huì)使光標(biāo)回到上一行的開頭,半逆向換行符會(huì)使得光標(biāo)回到上一行,但是不會(huì)到達(dá)開頭。join
join 處理兩個(gè)文件之間的數(shù)據(jù),而且,主要是在處理兩個(gè)文件當(dāng)中,有“相同數(shù)據(jù)”的那一行,才將他加在一起。
在使用join 之前,你所需要的文件應(yīng)該要事先經(jīng)過排序(sort)處理,否則有些比對(duì)的項(xiàng)目會(huì)被略過!!
join [-ti12] file1 file2 -t : join 默認(rèn)已空格符分隔數(shù)據(jù),并且比對(duì)“第一個(gè)字段”的數(shù)據(jù),如果兩個(gè)文件相同,則將兩筆數(shù)據(jù)聯(lián)成一行,且 第一個(gè)字段放在第一個(gè) -i : 忽略大小寫的差異 -1 : 這個(gè)是數(shù)字1,代表第一個(gè)文件要用那個(gè)字段來分析 -2 : 代表第二個(gè)文件要用那個(gè)字段來分析 實(shí)例: join -t ':' -1 4 file1 -2 3 file2 file1的第4個(gè)字段和file2的第3個(gè)字段來進(jìn)行比對(duì)paste
相對(duì)于join 必須要比對(duì)兩個(gè)文件的數(shù)據(jù)相關(guān)性,paste 就直接將兩行貼在一起,且中間以[tab]鍵隔開。
paste [-d] file1 file2 -d : 后面可以接分隔字符。默認(rèn)是以[tab]來分隔的 - : 如果file部分寫成"-",表示來自 standard input 的數(shù)據(jù)的意思expand
自動(dòng)將[tab]按鍵轉(zhuǎn)成空格鍵。擴(kuò)展:unexpand,將空白轉(zhuǎn)成[tab]
expand [-t] file -t : 后面可以接數(shù)字,一般來說,一個(gè)tab按鍵可以用8個(gè)空格鍵取代。我們也可以自定義一個(gè)tab按鍵代表幾個(gè)字符4. split 分割命令
將一個(gè)大文件依據(jù)文件大小或行數(shù)來分割。
split [-bl] file PREFIX -b : 后面可以接欲分割成的文件大小,可加單位,例如b,k,m等 -l : 以行數(shù)來進(jìn)行分隔 PREFIX : 代表前導(dǎo)符的意思,可作為分隔文件的前導(dǎo)文字將分隔后的文件合成一個(gè)文件 PREFIX* >> file
5. xargs 參數(shù)代換
就字面意義上來看,x是加減乘除的乘號(hào),args是arguments(參數(shù))的意思,所以說,這個(gè)命令就是在產(chǎn)生某個(gè)命令的參數(shù)的意思。xargs可以讀入stdin的數(shù)據(jù),并且以空格符或斷行字符作為分辨,將stdin的數(shù)據(jù)分隔成arguments。因?yàn)槭且钥崭穹鳛榉指?#xff0c;所以,如果有一些檔名或者是其他意義的名詞內(nèi)含有空格符的時(shí)候,xargs可能就會(huì)誤判了。
很多命令其實(shí)并不支持管線命令,可以通過xargs來提供該命令引用standard input之用!!!
例如:find /sbin |ls -l 結(jié)果只有列出root所在目錄下的文件,可以使用 find /sbin | xargs ls -l
xargs [-Oepn] command -O : 如果輸入的stdin含有特殊字符,例如`,\,空格鍵等等字符,這個(gè)-O參數(shù)可以將他還原成一般字符。這個(gè)參數(shù)可 以用于特殊狀態(tài) -e : EOF(end of file)的意思,后面可以接一個(gè)字符串,當(dāng)xargs分析到這個(gè)這個(gè)字符串時(shí),就會(huì)停止繼續(xù)工作 -e'STRING' -p : 在運(yùn)行每個(gè)命令的arguments時(shí),都會(huì)詢問使用者的意思 -n : 后面接次數(shù),每次command命令運(yùn)行時(shí),要使用幾個(gè)參數(shù)的意思。 當(dāng)xargs后面沒有接任何命令時(shí),默認(rèn)是以echo來進(jìn)行輸出?
(九)進(jìn)程管理 ps, top; kill, killall
1. ps, top (動(dòng)態(tài)) 觀察程序運(yùn)行狀態(tài)
ps
ps:將某個(gè)時(shí)間點(diǎn)的程序運(yùn)行情況擷取下來 (輸出有個(gè)別字符顯示不出來,可將語系暫時(shí)換為ASCII) 常用命令: ps -l:僅觀察自己的bash相關(guān)程序 (ps -lA 用相同的項(xiàng)目選項(xiàng)觀察所有程序) ps aux:觀察所有程序 ps axjf:列出類似程序樹的程序顯示選項(xiàng)與參數(shù): -A : 所有的 process 均顯示出來,與 -e 具有同樣的效用 -a : 不與 terminal 有關(guān)的所有 process -u : 有效使用者 (effective user) 相關(guān)的 process x : 通常與 a 這個(gè)參數(shù)一起使用,可列出較完整資訊。 輸出格式規(guī)劃:l : 較長、較詳細(xì)的將該 PID 的的資訊列出j : 工作的格式 (jobs format) -f : 做一個(gè)更為完整的輸出常用命令界面詳細(xì)說明: 1) ps -l:僅觀察自己的bash相關(guān)程序 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD F : 代表這個(gè)程序旗標(biāo) (process flags),說明這個(gè)程序的總結(jié)權(quán)限,常見號(hào)碼有:若為 4 表示此程序的權(quán)限為 root 若為 1 則表示此子程序僅進(jìn)行復(fù)制(fork)而沒有實(shí)際運(yùn)行(exec) S : 代表這個(gè)程序的狀態(tài) (STAT),主要的狀態(tài)有:R : Running,該程序正在運(yùn)行中S : Sleep,該程序目前正在睡眠狀態(tài)(idle),但可以被喚醒(signal)D : 不可被喚醒的睡眠狀態(tài),通常這支程序可能在等待 I/O 的情況(ex>列印)T : 停止?fàn)顟B(tài)(stop),可能是在工作控制(背景暫停)或除錯(cuò) (traced) 狀態(tài)Z : Zombie,僵尸狀態(tài),程序已經(jīng)終止但卻無法被移除至內(nèi)存外 UID/PID/PPID : 代表此程序被該 UID 所擁有/程序的 PID 號(hào)碼/此程序的父程序 PID 號(hào)碼 C : 代表 CPU 使用率,單位為百分比 PRI/NI : Priority/Nice,代表此程序被 CPU 所運(yùn)行的優(yōu)先順序,數(shù)值越小代表該程序越快被 CPU 運(yùn)行 ADDR/SZ/WCHAN : 都與內(nèi)存有關(guān),ADDR 是 kernel function,指出該程序在內(nèi)存的哪個(gè)部分,如果是個(gè) running 的程序,一般就會(huì)顯示'-' / SZ 代表此程序用掉多少內(nèi)存 / WCHAN 表示目前程序 是否運(yùn)行中,若為 - 表示正在運(yùn)行中 TTY : 登陸者的終端機(jī)位置,若為遠(yuǎn)程登陸則使用動(dòng)態(tài)終端介面 (pts/n) TIME : 使用掉的 CPU 時(shí)間,是此程序?qū)嶋H花費(fèi) CPU 運(yùn)行的時(shí)間,而不是系統(tǒng)時(shí)間 CMD : 就是 command 的縮寫,造成此程序的觸發(fā)程序之命令為何2) ps aux:觀察所有程序 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND USER : 該 process 屬于的使用者賬號(hào) PID : 該 process 的程序識(shí)別碼 %CPU : 該 process 使用掉的 CPU 資源百分比 %MEM : 該 process 所占用的實(shí)體內(nèi)存百分比 VSZ : 該 process 使用掉的虛擬內(nèi)存量 (Kbytes) RSS : 該 process 占用的固定的內(nèi)存量 (Kbytes) TTY : 該 process 是在那個(gè)終端機(jī)上面運(yùn)行,若與終端機(jī)無關(guān)則顯示'?',另外,tty1-ttyn 是本機(jī)上面的登陸 者程序,若為 pts/0 等等的,則表示為由網(wǎng)絡(luò)連接進(jìn)主機(jī)的程序。 STAT : 該程序目前的狀態(tài),狀態(tài)顯示與 ps -l 的 S 旗標(biāo)相同 (R/S/T/Z) START : 該 process 被觸發(fā)啟動(dòng)的時(shí)間 TIME : 該 process 實(shí)際使用 CPU 運(yùn)行的時(shí)間 COMMAND:該程序的實(shí)際命令 補(bǔ)充:一般來說,該命令會(huì)依照PID的順序來排序顯示top
top:動(dòng)態(tài)觀察程序變化 top [-d 數(shù)字] top [-bnp] -d : 后面接秒數(shù),就是整個(gè)程序畫面更新的秒數(shù)。默認(rèn)是 5 秒; -b : 以批處理方式運(yùn)行 top ,還有更多的參數(shù)可以使用,通常會(huì)搭配數(shù)據(jù)流重導(dǎo)向來將批量的結(jié)果輸出成為文件舉例:top -b -n 2 > /tmp/top.txt (注意當(dāng)前語系,可能輸出亂碼) -n : 與 -b 搭配,意義是,需要進(jìn)行幾次 top 的輸出結(jié)果 -p : 指定某些個(gè) PID 來進(jìn)行觀察監(jiān)測(cè)而已 在 top 運(yùn)行過程當(dāng)中可以使用的按鍵命令:? : 顯示在 top 當(dāng)中可以輸入的按鍵命令P : 以 CPU 的使用資源排序顯示M : 以 Memory 的使用資源排序顯示N : 以 PID 來排序T : 由該 Process 使用的 CPU 時(shí)間累積 (TIME+) 排序k : 給予某個(gè) PID 一個(gè)訊號(hào) (signal)r : 給予某個(gè) PID 重新制訂一個(gè) nice 值。q : 離開 top 命令界面說明: top - 19:46:15 up 1:31, 1 user, load average: 0.34, 0.40, 0.52 Tasks: 266 total, 2 running, 211 sleeping, 0 stopped, 1 zombie %Cpu(s): 0.6 us, 0.4 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 7907860 total, 3698804 free, 1680204 used, 2528852 buff/cache KiB Swap: 8000508 total, 8000508 free, 0 used. 5654468 avail Mem <=如果加入 k 或 r 時(shí),就會(huì)有相關(guān)的字樣出現(xiàn)在這里 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 上面的畫面為整個(gè)系統(tǒng)的資源使用狀態(tài),基本上總共有六行,顯示的內(nèi)容依序是: 第一行(top..) : 目前的時(shí)間;啟動(dòng)到目前所經(jīng)過的時(shí)間up..;已經(jīng)登陸系統(tǒng)的使用者人數(shù);系統(tǒng)在1,5,15分鐘的 平均工作負(fù)荷,系統(tǒng)平均要負(fù)責(zé)運(yùn)行幾個(gè)程序的意思,越小代表越閑置,高于1需要注意系統(tǒng)程序 是否太過繁復(fù) 第二行(Tasks..): 顯示的是目前程序的總量與個(gè)別程序的狀態(tài) 第三行(Cpus..) : 顯示的是 CPU 的整體負(fù)載us, user : time running un-niced user processessy, system : time running kernel processesni, nice : time running niced user processesid, idle : time spent in the kernel idle handlerwa, IO-wait : time waiting for I/O completionhi : time spent servicing hardware interruptssi : time spent servicing software interruptsst : time stolen from this vm by the hypervisor 第四行與第五行 : 表示目前的實(shí)體內(nèi)存與虛擬內(nèi)存 (Mem/Swap) 的使用情況下半部分的畫面,則是每個(gè) process 使用的資源情況: PID : 每個(gè) process 的 ID USER : 該 process 所屬的使用者 PR : Priority 的簡(jiǎn)寫,程序的優(yōu)先運(yùn)行順序,越小越早被運(yùn)行 NI : Nice 的簡(jiǎn)寫,與 Priority 有關(guān),也是越小越早被運(yùn)行 %CPU : CPU 的使用率 %MEM : 內(nèi)存的使用率 TIME+: CPU 使用時(shí)間的累加補(bǔ)充:top 默認(rèn)使用 CPU 使用率 (%CPU) 作為排序的重點(diǎn)2. kill, killall 程序管理(send a signal to a process)
程序相互管理是通過給程序一個(gè)訊號(hào)(signal)
kill
kill -signal PID 常用的signal: (其他signal可以查詢 man 7 signal) 1 : SIGHUP,啟動(dòng)被終止的程序,可讓該 PID 重新讀取自己的配置檔,類似重新啟動(dòng) 2 : SIGINT,相當(dāng)于用鍵盤輸入 Ctrl+c 來中斷一個(gè)程序 9 : SIGKILL,強(qiáng)制中斷一個(gè)程序的的進(jìn)行。若該程序進(jìn)行到一半,那么尚未完成的部分可能會(huì)有“半產(chǎn)品”產(chǎn)生例如 vim 會(huì)有 .filename.swp 保留下來 15: SIGTERM,以正常的結(jié)束程序來終止該程序,后續(xù)動(dòng)作也會(huì)將它完成如果該程序已經(jīng)發(fā)生問題,即無法使用正常的方法終止,則該signal無效 17: SIGSTOP,相當(dāng)于鍵盤輸入 Ctrl+z 來暫停一個(gè)程序的進(jìn)行經(jīng)常使用 ps 或 pstree 找到某個(gè)程序的PID后再使用kill傳送訊號(hào)killall
killall [-iIe] -signal [command name] -i : interactive,互動(dòng)式的,若需要?jiǎng)h除時(shí),會(huì)出現(xiàn)提示字節(jié)給使用者 -e : exact,表示后面接的'command name'要一致,但整個(gè)完整的命令不能超過15個(gè)字節(jié) -I : 命令名稱(可能含參數(shù))忽略大小寫 注意:killall會(huì)處理該命令名稱的全部程序?
(十)系統(tǒng)網(wǎng)絡(luò)資源與服務(wù)
netstat; demsg; ifconfig, ip; systemd, systemctl
1. netstat 追蹤網(wǎng)絡(luò)或插槽檔
網(wǎng)絡(luò)監(jiān)聽:是一種監(jiān)視網(wǎng)絡(luò)狀態(tài)、數(shù)據(jù)流程以及網(wǎng)絡(luò)上信息傳輸?shù)墓芾砉ぞ?#xff0c;它可以將網(wǎng)絡(luò)界面設(shè)定成監(jiān)聽模式,并且可以截獲網(wǎng)絡(luò)上所傳輸?shù)男畔ⅰ?/p>
套接字(socket):TCP用主機(jī)的IP地址加上主機(jī)上的端口號(hào)作為TCP連接的端點(diǎn),這種端點(diǎn)就叫做套接字
netstat 這個(gè)命令常用在網(wǎng)絡(luò)監(jiān)控方面。其輸出分為兩大部分,分別是網(wǎng)絡(luò)與系統(tǒng)自己的程序相關(guān)性部分。
netstat [-atunlp] -a : 將目前系統(tǒng)上所有的連線、監(jiān)聽、socket數(shù)據(jù)都列出來 -t : 列出 tcp 網(wǎng)絡(luò)封包的數(shù)據(jù) -u : 列出 udp 網(wǎng)絡(luò)封包的數(shù)據(jù) -n : 不以程序的服務(wù)名稱,以埠號(hào)(port number)來顯示 -l : 列出目前正在網(wǎng)絡(luò)監(jiān)聽(listen)的服務(wù) -p : 列出該網(wǎng)絡(luò)服務(wù)的程序PIDnetstat后面不接參數(shù),表示列出目前系統(tǒng)已創(chuàng)建的網(wǎng)絡(luò)連線與 unix socket 狀態(tài) Active Internet connections (w/o servers) (激活I(lǐng)nternet連接,是與網(wǎng)絡(luò)較相關(guān)的部分) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 linux:41836 203.23.128.100:https ESTABLISHED ... Active UNIX domain sockets (w/o servers) (活躍的UNIX域套接字,本機(jī)的程序自己的相關(guān)性(非網(wǎng)絡(luò))) Proto RefCnt Flags Type State I-Node Path列表說明: 網(wǎng)際網(wǎng)絡(luò)連線部分: Proto:網(wǎng)絡(luò)的封包協(xié)議,主要分為TCP與UDP封包 Recv-Q:非由使用者程序連結(jié)到此socket的復(fù)制總bytes數(shù) Send-Q:非由遠(yuǎn)程主機(jī)傳送過來的acknowledged總bytes數(shù) Locale Address:本地端的IP:port情況 Foreign Address:遠(yuǎn)程主機(jī)的IP:port情況 State:連線狀態(tài),主要有創(chuàng)建(ESTABLISHED)及監(jiān)聽(LISTEN) 除了網(wǎng)絡(luò)上的連線外,Linux系統(tǒng)上面的程序是可以接受不同程序發(fā)送來的資訊,那就是Linux上頭的插槽檔(socket file) Proto:一般就是 unix 啦; RefCnt:連接到此 socket 的程序數(shù)量; Flags:連線的旗標(biāo); Type:socket 存取的類型。主要有確認(rèn)連線的 STREAM 與不需確認(rèn)的 DGRAM 兩種; State:若為 CONNECTED 表示多個(gè)程序之間已經(jīng)連線創(chuàng)建。 Path:連接到此 socket 的相關(guān)程序的路徑!或者是相關(guān)數(shù)據(jù)輸出的路徑。常用舉例: 1) 找出目前系統(tǒng)上已在監(jiān)聽的網(wǎng)絡(luò)連線及其PID netstat -tlnp2. dmesg 分析核心產(chǎn)生的信息
dmesg | more : 輸出所有的核心啟動(dòng)時(shí)的資訊,因?yàn)樾畔⑻嗫梢约尤牍芫€命令”| more“來使畫面暫停 dmesg | grep -i hd : 搜尋啟動(dòng)的時(shí)候,硬盤的相關(guān)資訊 dmesg | grep -i eth : 查閱網(wǎng)絡(luò)卡相關(guān)資訊3. ifconfig, ip 顯示或設(shè)置網(wǎng)絡(luò)設(shè)備
ifconfig
1) ifconfig 不加參數(shù),表示顯示網(wǎng)絡(luò)設(shè)備信息 2) ifconfig [網(wǎng)絡(luò)設(shè)備] [down up] down : 關(guān)閉指定指定網(wǎng)卡,例如eth0 up : 啟動(dòng)指定網(wǎng)卡 3) ifconfig [網(wǎng)絡(luò)設(shè)備] [add del] [地址] add : 設(shè)置網(wǎng)絡(luò)設(shè)備IPv6地址 del : 刪除網(wǎng)絡(luò)設(shè)備IPv6地址 網(wǎng)絡(luò)設(shè)備和地址之間不加參數(shù) : 給該網(wǎng)絡(luò)設(shè)備配置IP地址 4) ifconfig hw [網(wǎng)絡(luò)設(shè)備] [硬件地址] : 設(shè)置網(wǎng)絡(luò)設(shè)備的類型與硬件地址ip
常用命令: ip link show : 顯示鏈路 ip addr show : 顯示地址(或ifconfig) ip route show : 顯示路由(route -n) ip neigh show : 顯示arp表 ip rule show : 顯示缺省規(guī)則 ip route del default dev eth0 : 刪除接口路由 ip route show table local : 查看本地靜態(tài)路由 ip route show table main : 查看直連路由 ip addr add/del [地址] dev eth0 : 增加/刪除地址4. systemd, systemctl 系統(tǒng)管理
systemd
傳統(tǒng)的Linux系統(tǒng)啟動(dòng)過程主要由著名的init進(jìn)程(也被稱為SysV init 啟動(dòng)系統(tǒng))來處理,而基于init的啟動(dòng)系統(tǒng)被認(rèn)為有效率不足的問題。
systemd 是Linux系統(tǒng)的另一種啟動(dòng)方式,宣稱彌補(bǔ)了以傳統(tǒng)Linux SYSVC init為基礎(chǔ)的系統(tǒng)的缺點(diǎn)。systemd 是用來啟動(dòng)守護(hù)進(jìn)程,已成為大多數(shù)發(fā)行版的標(biāo)準(zhǔn)配置。它的設(shè)計(jì)目的是為系統(tǒng)的啟動(dòng)和管理提供一套完整的解決方案,字母d是(daemon)的縮寫。
systemd 是Linux操作系統(tǒng)的系統(tǒng)和服務(wù)管理器。當(dāng)在引導(dǎo)時(shí)作為第一個(gè)進(jìn)程運(yùn)行時(shí)(作為PID 1)取代init啟動(dòng)和維護(hù)用戶空間服務(wù),其他進(jìn)程都是它的子進(jìn)程。
systemd 并不是一個(gè)命令,而是一組命令,涉及到系統(tǒng)管理的方方面面。
systemctl
systemctl 是 systemd 的主命令,用于管理系統(tǒng)。
顯示系統(tǒng)狀態(tài): $ systemctl status立即激活單元: # systemctl start [單元]立即停止單元: # systemctl stop [單元]重啟單元: # systemctl restart [單元]開機(jī)自動(dòng)激活單元: # systemctl enable [單元]取消開機(jī)自動(dòng)激活單元: # systemctl disable [單元]命令單元重新讀取配置: # systemctl reload [單元]輸出單元運(yùn)行狀態(tài): $ systemctl status [單元]檢查單元是否配置為自動(dòng)啟動(dòng): $ systemctl is-enabled [單元]顯示單元的手冊(cè)頁: # systemctl help [單元]重新載入 systemd,掃描新的或有變動(dòng)的單元: # systemctl daemon-reload輸出激活的單元: $ systemctl list-units查看已激活的服務(wù): $ systemctl list-units -t service輸出運(yùn)行失敗的單元: $ systemctl --failed禁用一個(gè)單元: # systemctl mask [單元]取消禁用一個(gè)單元: # systemctl unmask [單元]查看所有已安裝服務(wù): $ systemctl list-unit-files檢查某個(gè)服務(wù)的所有配置細(xì)節(jié) # systemctl show [服務(wù)]獲取某個(gè)服務(wù)的依賴性列表 # systemctl list-dependencies [服務(wù)]查看環(huán)境變量 $ systemctl show-environment重啟系統(tǒng) # systemctl reboot關(guān)閉系統(tǒng) # systemctl poweroff進(jìn)入待機(jī)狀態(tài) # systemctl suspend進(jìn)入休眠狀態(tài) # systemctl hibernate進(jìn)入混合休眠模式 # systemctl hybrid-sleep進(jìn)入救援狀態(tài) # systemctl rescue?
(十一)遠(yuǎn)程操作 ssh, scp
1. ssh 遠(yuǎn)程登陸
ssh(SSH client) 是一個(gè)用于登陸遠(yuǎn)程計(jì)算機(jī)并在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行命令的程序。它旨在通過不安全的網(wǎng)絡(luò)在兩個(gè)untrusted主機(jī)之間提供安全的加密通信。X11連接,任意TCP端口和UNIX域套接字也可以通過安全通道轉(zhuǎn)發(fā)。
常用示例: 1) 登陸其他系統(tǒng)ssh usr(用戶名)@hostname(目標(biāo)主機(jī)(局域網(wǎng)內(nèi)或者遠(yuǎn)程)的IP地址) 2) 使用其他端口(默認(rèn)連接到目標(biāo)主機(jī)的22端口上)ssh -p 端口號(hào) usr@hostname 3) 遠(yuǎn)程執(zhí)行命令ssh usr@postname 命令 4) X11圖形界面ssh -X usr@hostname如果在運(yùn)行圖形界面同時(shí)想做別的事情,只需要在圖形界面命令末尾加一個(gè)&符號(hào) 5) 轉(zhuǎn)義字符用ssh連接到任意一臺(tái)主機(jī)然后輸入~?就可以看到支持的轉(zhuǎn)義字符和功能說明列表 6) 配置ssh如果想要改變ssh的配置,文本編輯器打開/etc/ssh/sshd_config進(jìn)行編輯 7) 構(gòu)建ssh密鑰對(duì)ssh-keygen -t dsa此命令會(huì)要求輸入密碼,然后生成密鑰并會(huì)顯示一張?jiān)撁荑€對(duì)應(yīng)的隨機(jī)圖PS:三個(gè)用終端查看IP地址的命令:ip addr show; ifconfig -a; hostname -I2. scp 安全遠(yuǎn)程文件拷貝
scp 是 secure copy 的縮寫,是Linux系統(tǒng)下基于ssh登陸進(jìn)行安全的遠(yuǎn)程文件拷貝命令。scp 在網(wǎng)絡(luò)上的主機(jī)之間復(fù)制文件,它使用 ssh 進(jìn)行數(shù)據(jù)傳輸,并使用相同的身份驗(yàn)證提供相同的安全性。如果需要,scp 會(huì)要求輸入密碼或密碼短語進(jìn)行認(rèn)證。本地文件可以使用絕對(duì)路徑或相對(duì)路徑,注意避免出現(xiàn)“:”作為主機(jī)說明符的名稱。
scp [-cprv] 原路徑 目標(biāo)路徑 -C : 允許壓縮 -p : 保留原文件的修改時(shí)間,訪問時(shí)間和訪問權(quán)限 -r : 遞歸復(fù)制整個(gè)目錄 -v : 詳細(xì)方式顯示輸出。scp和ssh會(huì)顯示出整個(gè)過程的調(diào)試信息。這些信息用于調(diào)試鏈接、驗(yàn)證和配置問題。應(yīng)用示例: 1) 從本地復(fù)制到遠(yuǎn)程scp local_file remote_username@remote_ip:remote_folder scp local_file remote_username@remote_ip:remote_file scp local_file remote_ip:remote_folder scp local_file remote_ip:remote_file 第1,2個(gè)指定了用戶名,命令執(zhí)行后需要再輸入密碼,第1個(gè)僅指定了遠(yuǎn)程的目錄,文件名字不變,第2個(gè)指定了文件名;第3,4個(gè)沒有指定用戶名,命令執(zhí)行后需要輸入用戶名和密碼,第3個(gè)僅指定了遠(yuǎn)程的目錄,文件名字不變,第4個(gè)指定了文件名; 2) 從遠(yuǎn)程復(fù)制到本地只要將從本地復(fù)制到遠(yuǎn)程的命令后兩個(gè)參數(shù)調(diào)換順序即可scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 scp -r www.runoob.com:/home/root/others/ /home/space/music/?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Linux基础学习(Ubuntu)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: websocket autobahn w
- 下一篇: gba模拟器 linux,在Ubuntu