貝爾實(shí)驗(yàn)室開(kāi)發(fā)操作系統(tǒng)unix慕嚷,實(shí)現(xiàn)tcp/ip協(xié)議棧圆米,成為早期工作站的操作系統(tǒng)吊输,
1990年蹦魔,unix商業(yè)化
1991年10月激率,Linus Torvalds(linus之父)
linux操作系統(tǒng)內(nèi)核
1969 年,Ken Thompson(C語(yǔ)言之父)利用匯編語(yǔ)言開(kāi)發(fā)了 File Server System(Unics勿决,即 UNIX 的原型)
1973 年乒躺,Dennis Ritchie 和 Ken Thompson 發(fā)明了 C 語(yǔ)言,而后寫(xiě)出了 UNIX 的內(nèi)核低缩;
1977 年嘉冒,Berkeley 大學(xué)的 Bill Joy 針對(duì)他的機(jī)器修改了 UNIX 源碼,稱(chēng)為BSD(Berkeley Software Distribution)
1984 年咆繁,因?yàn)?UNIX 規(guī)定“不能對(duì)學(xué)生提供源碼”讳推,Tanenbaum 老師自己編寫(xiě)兼容于 UNIX 的 Minix,用于教學(xué)玩般;
1984 年银觅,Stallman 開(kāi)始 GNU(GNU's Not Unix)項(xiàng)目,創(chuàng)辦 FSF(Free Software Foundation)基金會(huì)壤短;
<a target="_blank">Ubuntu</a>设拟,
<a target="_blank">CentOS</a>,
<a target="_blank">Fedora</a>久脯,
<a target="_blank">OpenSUSE</a>纳胧,
<a target="_blank">Debian</a>,
<a target="_blank">Mint</a>
終端本質(zhì)上是對(duì)應(yīng)著 Linux 上的 /dev/tty 設(shè)備帘撰,Linux 的多用戶(hù)登陸就是通過(guò)不同的 /dev/tty 設(shè)備完成的跑慕,Linux 默認(rèn)提供了 6 個(gè)純命令行界面的 “terminal”(準(zhǔn)確的說(shuō)這里應(yīng)該是 6 個(gè) virtual consoles)來(lái)讓用戶(hù)登錄。在物理機(jī)系統(tǒng)上你可以通過(guò)使用[Ctrl]+[Alt]+[F1]~[F6]進(jìn)行切換
有殼就有核摧找,這里的核就是指 UNIX/Linux 內(nèi)核核行,Shell 是指“提供給使用者使用界面”的軟件(命令解析器),類(lèi)似于 DOS 下的 command(命令行)和后來(lái)的 cmd.exe 蹬耘。普通意義上的 Shell 就是可以接受用戶(hù)輸入命令的程序芝雪。它之所以被稱(chēng)作 Shell 是因?yàn)樗[藏了操作系統(tǒng)底層的細(xì)節(jié)。
在 UNIX/Linux 中比較流行的常見(jiàn)的 Shell 有 bash综苔、zsh惩系、ksh位岔、csh 等等,Ubuntu 終端默認(rèn)使用的是 bash堡牡,默認(rèn)的桌面環(huán)境是 GNOME 或者 Unity(基于 GNOME)
命令行
輸入
touch file 創(chuàng)建一個(gè)名為file的文件
cd /etc/ 進(jìn)入etc目錄
pwd 查看當(dāng)前目錄
ls
ll
echo “hello world”
輸出
快捷鍵
tab 補(bǔ)全
ctrl+c 強(qiáng)行終止當(dāng)前任務(wù)
Ctrl+d 鍵盤(pán)輸入結(jié)束或退出終端
Ctrl+s 暫停當(dāng)前程序抒抬,暫停后按下任意鍵恢復(fù)運(yùn)行
Ctrl+z 將當(dāng)前程序放到后臺(tái)運(yùn)行,恢復(fù)到前臺(tái)為命令fg
Ctrl+a 將光標(biāo)移至輸入行頭晤柄,相當(dāng)于Home鍵
Ctrl+e 將光標(biāo)移至輸入行末擦剑,相當(dāng)于End鍵
Ctrl+k 刪除從光標(biāo)所在位置到行末
Alt+Backspace 向前刪除一個(gè)單詞
Shift+PgUp 將終端顯示向上滾動(dòng)
Shift+PgDn 將終端顯示向下滾動(dòng)
通配符
- 匹配 0 或多個(gè)字符
? 匹配任意一個(gè)字符
[list] 匹配 list 中的任意單一字符
[!list] 匹配 除list 中的任意單一字符以外的字符
[c1-c2] 匹配 c1-c2 中的任意單一字符 如:[0-9] [a-z]
{string1,string2,...} 匹配 string1 或 string2 (或更多)其一字符串
{c1..c2} 匹配 c1-c2 中全部字符 如{1..10}
例子
$ touch adsfasd.txt wergjlkas.txt
$ ls *.txt
$ touch love_{1..10}_linux.txt
獲取幫助
如果你遇到困難,可以使用man命令芥颈,它是Manual pages的縮寫(xiě)惠勒。
Manual pages 是 UNIX 或類(lèi) UNIX 操作系統(tǒng)中在線軟件文檔的一種普遍的形式, 內(nèi)容包括計(jì)算機(jī)程序(包括庫(kù)和系統(tǒng)調(diào)用)浇借、正式的標(biāo)準(zhǔn)和慣例捉撮,甚至是抽象的概念。
$ man <command_name>
區(qū)段 說(shuō)明
1 一般命令
2 系統(tǒng)調(diào)用
3 庫(kù)函數(shù)妇垢,涵蓋了C標(biāo)準(zhǔn)函數(shù)庫(kù)
4 特殊文件(通常是/dev中的設(shè)備)和驅(qū)動(dòng)程序
5 文件格式和約定
6 游戲和屏保
7 雜項(xiàng)
8 系統(tǒng)管理命令和守護(hù)進(jìn)程
$ man 1 ls
man 中使用搜索/<你要搜索的關(guān)鍵字>巾遭,查找完畢后你可以使用n鍵切換到下一個(gè)關(guān)鍵字所在處,shift+n為上一個(gè)關(guān)鍵字所在處闯估。
Space(空格鍵)翻頁(yè)灼舍,
Enter(回車(chē)鍵)向下滾動(dòng)一行,
j,k(vim 編輯器的移動(dòng)鍵)進(jìn)行向前向后滾動(dòng)一行涨薪。
h鍵為顯示使用幫助(因?yàn)?man 使用 less 作為閱讀器骑素,實(shí)為less工具的幫助)
q退出。
$ ls --help
例子
$ sudo apt-get update
$ sudo apt-get install sysvbanner
$ banner jh2k15
$ printerbanner -w 50 A
-w參數(shù)指定打印寬度刚夺,因?yàn)槲覀兊沫h(huán)境在屏幕中顯示比較小献丑,必須要加上寬度限制。
還有兩個(gè)類(lèi)似的命令toilet,figlet
查看用戶(hù)
$ who am i
$ who mom likes
參數(shù) 說(shuō)明
-a 打印能打印的全部
-d 打印死掉的進(jìn)程
-m 同am i,mom likes
-q 打印當(dāng)前登錄用戶(hù)數(shù)及用戶(hù)名
-u 打印當(dāng)前登錄用戶(hù)登錄信息
-r 打印運(yùn)行等級(jí)
創(chuàng)建用戶(hù)
sudo
su <user> 可以切換到用戶(hù) user侠姑,執(zhí)行時(shí)需要輸入目標(biāo)用戶(hù)的密碼
sudo <cmd> 可以以特權(quán)級(jí)別運(yùn)行 cmd 命令创橄,需要當(dāng)前用戶(hù)屬于 sudo 組,且需要輸入當(dāng)前用戶(hù)的密碼
su - <user> 命令也是切換用戶(hù)莽红,同時(shí)環(huán)境變量也會(huì)跟著改變成目標(biāo)用戶(hù)的環(huán)境變量
$ sudo adduser lilei
$ ls /home
$ su -l lilei
用戶(hù)跟退出終端一樣可以使用 exit 命令或者使用快捷鍵 Ctrl+d
用戶(hù)組
$ groups shiyanlou
查看 /etc/group 文件
$ cat /etc/group | sort
cat 命令用于讀取指定文件的內(nèi)容并打印到終端輸出
| sort 表示將讀取的文本進(jìn)行一個(gè)字典排序再輸出妥畏,然后你將看到如下一堆輸出
$ cat /etc/group | grep -E "shiyanlou"
/etc/group 的內(nèi)容包括用戶(hù)組(Group)、用戶(hù)組口令安吁、GID 及該用戶(hù)組所包含的用戶(hù)(User)醉蚁,每個(gè)用戶(hù)組一條記錄。格式如下:
group_name:password:GID:user_list
$ su shiyanlou
$ groups lilei
$ sudo usermod -G sudo lilei
$ groups lilei
刪除用戶(hù)
$ sudo deluser lilei --remove-home
查看文件權(quán)限
$ ls -l
.(當(dāng)前目錄)和 ..(上一級(jí)目錄)之外的所有文件鬼店,包括隱藏文件(Linux 下以 . 開(kāi)頭的文件為隱藏文件)
$ ls -A
目錄結(jié)構(gòu)
/etc 應(yīng)該放置設(shè)置文件网棍,
/bin 與 /sbin 則應(yīng)該放置可執(zhí)行文件等等。
第二層則是針對(duì) /usr 及 /var 這兩個(gè)目錄的子目錄來(lái)定義
例如 /var/log 放置系統(tǒng)登錄文件妇智,/usr/share 放置共享數(shù)據(jù)
$ tree /
sudo apt-get update
sudo apt-get install tree
cd 命令可以切換目錄
ls -a 命令查看隱藏文件
~ 通常表示當(dāng)前用戶(hù)的 home 目錄
使用 pwd 命令可以獲取當(dāng)前所在路徑(絕對(duì)路徑)
$ cd ..
$ cd ~
$ pwd
新建空白文件
$ touch file
新建目錄
$ mkdir mydir
-p 參數(shù)滥玷,同時(shí)創(chuàng)建父目錄(如果不存在該父目錄)捌锭,如下我們同時(shí)創(chuàng)建一個(gè)多級(jí)目錄(這在安裝軟件、配置安裝路徑時(shí)非常有用):
$ mkdir -p father/son/grandson
復(fù)制
cp(copy)命令復(fù)制一個(gè)文件到指定目錄
$ cp test father/son/grandson
復(fù)制目錄
cp 命令復(fù)制一個(gè)目錄
目錄需要加上 -r 或者 -R 參數(shù)罗捎,表示遞歸復(fù)制,
$ cp -r father family
刪除文件
rm(remove files or directories)命令刪除一個(gè)文件
$ rm test
想忽略這提示拉盾,直接刪除文件桨菜,可以使用 -f 參數(shù)強(qiáng)制刪除:
$ rm -f test
刪除目錄
$ rm -r family
移動(dòng)文件與文件重命名
移動(dòng)文件
使用 mv(move or rename files)命令移動(dòng)文件(剪切)。將文件“ file1 ”移動(dòng)到 Documents 目錄:
$ mv file1 Documents
重命名文件
將文件“ file1 ”重命名為“ myfile ”:
$ mv file1 myfile
批量重命名
要實(shí)現(xiàn)批量重命名捉偏,mv 命令就有點(diǎn)力不從心了倒得,我們可以使用一個(gè)看起來(lái)更專(zhuān)業(yè)的命令 rename 來(lái)實(shí)現(xiàn)。不過(guò)它要用 perl 正則表達(dá)式來(lái)作為參數(shù)夭禽,關(guān)于正則表達(dá)式我們要在后面才會(huì)介紹到霞掺,這里只做演示,你只要記得這個(gè) rename 命令可以批量重命名就好了讹躯,以后再重新學(xué)習(xí)也不會(huì)有任何問(wèn)題菩彬,畢竟你已經(jīng)掌握了一個(gè)更常用的 mv 命令。
使用通配符批量創(chuàng)建 5 個(gè)文件:
$ touch file{1..5}.txt
批量將這 5 個(gè)后綴為 .txt 的文本文件重命名為以 .c 為后綴的文件:
$ rename 's/.txt/.c/' *.txt
批量將這 5 個(gè)文件潮梯,文件名改為大寫(xiě):
$ rename 'y/a-z/A-Z/' *.c
簡(jiǎn)單解釋一下上面的命令骗灶,rename 是先使用第二個(gè)參數(shù)的通配符匹配所有后綴為 .txt 的文件,然后使用第一個(gè)參數(shù)提供的正則表達(dá)式將匹配的這些文件的 .txt 后綴替換為 .c秉馏,這一點(diǎn)在我們后面學(xué)習(xí)了 sed 命令后耙旦,相信你會(huì)更好地理解。
- 查看文件
使用 cat萝究,tac 和 nl 命令查看文件
前兩個(gè)命令都是用來(lái)打印文件內(nèi)容到標(biāo)準(zhǔn)輸出(終端)免都,其中 cat 為正序顯示,tac 為倒序顯示帆竹。
標(biāo)準(zhǔn)輸入輸出:當(dāng)我們執(zhí)行一個(gè) shell 命令行時(shí)通常會(huì)自動(dòng)打開(kāi)三個(gè)標(biāo)準(zhǔn)文件绕娘,即標(biāo)準(zhǔn)輸入文件(stdin),默認(rèn)對(duì)應(yīng)終端的鍵盤(pán)馆揉、標(biāo)準(zhǔn)輸出文件(stdout)和標(biāo)準(zhǔn)錯(cuò)誤輸出文件(stderr)业舍,后兩個(gè)文件都對(duì)應(yīng)被重定向到終端的屏幕,以便我們能直接看到輸出內(nèi)容升酣。進(jìn)程將從標(biāo)準(zhǔn)輸入文件中得到輸入數(shù)據(jù)舷暮,將正常輸出數(shù)據(jù)輸出到標(biāo)準(zhǔn)輸出文件,而將錯(cuò)誤信息送到標(biāo)準(zhǔn)錯(cuò)誤文件中噩茄。
比如我們要查看之前從 /etc 目錄下拷貝來(lái)的 passwd 文件:
$ cat passwd
可以加上 -n 參數(shù)顯示行號(hào):
$ cat -n passwd
nl 命令下面,添加行號(hào)并打印,這是個(gè)比 cat -n 更專(zhuān)業(yè)的行號(hào)打印命令绩聘。
這里簡(jiǎn)單列舉它的常用的幾個(gè)參數(shù):
-b : 指定添加行號(hào)的方式沥割,主要有兩種:
-b a:表示無(wú)論是否為空行耗啦,同樣列出行號(hào)("cat -n"就是這種方式)
-b t:只列出非空行的編號(hào)并列出(默認(rèn)為這種方式)
-n : 設(shè)置行號(hào)的樣式,主要有三種:
-n ln:在行號(hào)字段最左端顯示
-n rn:在行號(hào)字段最右邊顯示机杜,且不加 0
-n rz:在行號(hào)字段最右邊顯示帜讲,且加 0
-w : 行號(hào)字段占用的位數(shù)(默認(rèn)為 6 位)
你會(huì)發(fā)現(xiàn)使用這幾個(gè)命令,默認(rèn)的終端窗口大小椒拗,一屏顯示不完文本的內(nèi)容似将,得用鼠標(biāo)拖動(dòng)滾動(dòng)條或者滑動(dòng)滾輪才能繼續(xù)往下翻頁(yè),要是可以直接使用鍵盤(pán)操作翻頁(yè)就好了蚀苛,那么你就可以使用下面要介紹的命令在验。