貝爾實(shí)驗(yàn)室開發(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語言之父)利用匯編語言開發(fā)了 File Server System(Unics,即 UNIX 的原型)
1973 年,Dennis Ritchie 和 Ken Thompson 發(fā)明了 C 語言,而后寫出了 UNIX 的內(nèi)核;
1977 年,Berkeley 大學(xué)的 Bill Joy 針對他的機(jī)器修改了 UNIX 源碼,稱為BSD(Berkeley Software Distribution)
1984 年,因?yàn)?UNIX 規(guī)定“不能對學(xué)生提供源碼”,Tanenbaum 老師自己編寫兼容于 UNIX 的 Minix,用于教學(xué);
1984 年,Stallman 開始 GNU(GNU's Not Unix)項(xiàng)目,創(chuàng)辦 FSF(Free Software Foundation)基金會;
<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ì)上是對應(yīng)著 Linux 上的 /dev/tty 設(shè)備,Linux 的多用戶登陸就是通過不同的 /dev/tty 設(shè)備完成的,Linux 默認(rèn)提供了 6 個(gè)純命令行界面的 “terminal”(準(zhǔn)確的說這里應(yīng)該是 6 個(gè) virtual consoles)來讓用戶登錄。在物理機(jī)系統(tǒng)上你可以通過使用[Ctrl]+[Alt]+[F1]~[F6]進(jìn)行切換
有殼就有核,這里的核就是指 UNIX/Linux 內(nèi)核,Shell 是指“提供給使用者使用界面”的軟件(命令解析器),類似于 DOS 下的 command(命令行)和后來的 cmd.exe 。普通意義上的 Shell 就是可以接受用戶輸入命令的程序。它之所以被稱作 Shell 是因?yàn)樗[藏了操作系統(tǒng)底層的細(xì)節(jié)。
在 UNIX/Linux 中比較流行的常見的 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 鍵盤輸入結(jié)束或退出終端
Ctrl+s 暫停當(dāng)前程序,暫停后按下任意鍵恢復(fù)運(yùn)行
Ctrl+z 將當(dāng)前程序放到后臺運(yùn)行,恢復(fù)到前臺為命令fg
Ctrl+a 將光標(biāo)移至輸入行頭,相當(dāng)于Home鍵
Ctrl+e 將光標(biāo)移至輸入行末,相當(dāng)于End鍵
Ctrl+k 刪除從光標(biāo)所在位置到行末
Alt+Backspace 向前刪除一個(gè)單詞
Shift+PgUp 將終端顯示向上滾動
Shift+PgDn 將終端顯示向下滾動
通配符
- 匹配 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的縮寫。
Manual pages 是 UNIX 或類 UNIX 操作系統(tǒng)中在線軟件文檔的一種普遍的形式, 內(nèi)容包括計(jì)算機(jī)程序(包括庫和系統(tǒng)調(diào)用)、正式的標(biāo)準(zhǔn)和慣例,甚至是抽象的概念。
$ man <command_name>
區(qū)段 說明
1 一般命令
2 系統(tǒng)調(diào)用
3 庫函數(shù),涵蓋了C標(biāo)準(zhǔn)函數(shù)庫
4 特殊文件(通常是/dev中的設(shè)備)和驅(qū)動程序
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(空格鍵)翻頁,
Enter(回車鍵)向下滾動一行,
j,k(vim 編輯器的移動鍵)進(jìn)行向前向后滾動一行。
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è)類似的命令toilet,figlet
查看用戶
$ who am i
$ who mom likes
參數(shù) 說明
-a 打印能打印的全部
-d 打印死掉的進(jìn)程
-m 同am i,mom likes
-q 打印當(dāng)前登錄用戶數(shù)及用戶名
-u 打印當(dāng)前登錄用戶登錄信息
-r 打印運(yùn)行等級
創(chuàng)建用戶
sudo
su <user> 可以切換到用戶 user,執(zhí)行時(shí)需要輸入目標(biāo)用戶的密碼
sudo <cmd> 可以以特權(quán)級別運(yùn)行 cmd 命令,需要當(dāng)前用戶屬于 sudo 組,且需要輸入當(dāng)前用戶的密碼
su - <user> 命令也是切換用戶,同時(shí)環(huán)境變量也會跟著改變成目標(biāo)用戶的環(huán)境變量
$ sudo adduser lilei
$ ls /home
$ su -l lilei
用戶跟退出終端一樣可以使用 exit 命令或者使用快捷鍵 Ctrl+d
用戶組
$ 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)容包括用戶組(Group)、用戶組口令、GID 及該用戶組所包含的用戶(User),每個(gè)用戶組一條記錄。格式如下:
group_name:password:GID:user_list
$ su shiyanlou
$ groups lilei
$ sudo usermod -G sudo lilei
$ groups lilei
刪除用戶
$ sudo deluser lilei --remove-home
查看文件權(quán)限
$ ls -l
.(當(dāng)前目錄)和 ..(上一級目錄)之外的所有文件,包括隱藏文件(Linux 下以 . 開頭的文件為隱藏文件)
$ ls -A
目錄結(jié)構(gòu)
/etc 應(yīng)該放置設(shè)置文件,
/bin 與 /sbin 則應(yīng)該放置可執(zhí)行文件等等。
第二層則是針對 /usr 及 /var 這兩個(gè)目錄的子目錄來定義
例如 /var/log 放置系統(tǒng)登錄文件,/usr/share 放置共享數(shù)據(jù)
$ tree /
sudo apt-get update
sudo apt-get install tree
cd 命令可以切換目錄
ls -a 命令查看隱藏文件
~ 通常表示當(dāng)前用戶的 home 目錄
使用 pwd 命令可以獲取當(dāng)前所在路徑(絕對路徑)
$ cd ..
$ cd ~
$ pwd
新建空白文件
$ touch file
新建目錄
$ mkdir mydir
-p 參數(shù),同時(shí)創(chuàng)建父目錄(如果不存在該父目錄),如下我們同時(shí)創(chuàng)建一個(gè)多級目錄(這在安裝軟件、配置安裝路徑時(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
移動文件與文件重命名
移動文件
使用 mv(move or rename files)命令移動文件(剪切)。將文件“ file1 ”移動到 Documents 目錄:
$ mv file1 Documents
重命名文件
將文件“ file1 ”重命名為“ myfile ”:
$ mv file1 myfile
批量重命名
要實(shí)現(xiàn)批量重命名,mv 命令就有點(diǎn)力不從心了,我們可以使用一個(gè)看起來更專業(yè)的命令 rename 來實(shí)現(xiàn)。不過它要用 perl 正則表達(dá)式來作為參數(shù),關(guān)于正則表達(dá)式我們要在后面才會介紹到,這里只做演示,你只要記得這個(gè) rename 命令可以批量重命名就好了,以后再重新學(xué)習(xí)也不會有任何問題,畢竟你已經(jīng)掌握了一個(gè)更常用的 mv 命令。
使用通配符批量創(chuàng)建 5 個(gè)文件:
$ touch file{1..5}.txt
批量將這 5 個(gè)后綴為 .txt 的文本文件重命名為以 .c 為后綴的文件:
$ rename 's/.txt/.c/' *.txt
批量將這 5 個(gè)文件,文件名改為大寫:
$ rename 'y/a-z/A-Z/' *.c
簡單解釋一下上面的命令,rename 是先使用第二個(gè)參數(shù)的通配符匹配所有后綴為 .txt 的文件,然后使用第一個(gè)參數(shù)提供的正則表達(dá)式將匹配的這些文件的 .txt 后綴替換為 .c,這一點(diǎn)在我們后面學(xué)習(xí)了 sed 命令后,相信你會更好地理解。
- 查看文件
使用 cat,tac 和 nl 命令查看文件
前兩個(gè)命令都是用來打印文件內(nèi)容到標(biāo)準(zhǔn)輸出(終端),其中 cat 為正序顯示,tac 為倒序顯示。
標(biāo)準(zhǔn)輸入輸出:當(dāng)我們執(zhí)行一個(gè) shell 命令行時(shí)通常會自動打開三個(gè)標(biāo)準(zhǔn)文件,即標(biāo)準(zhǔn)輸入文件(stdin),默認(rèn)對應(yīng)終端的鍵盤、標(biāo)準(zhǔn)輸出文件(stdout)和標(biāo)準(zhǔn)錯(cuò)誤輸出文件(stderr),后兩個(gè)文件都對應(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 目錄下拷貝來的 passwd 文件:
$ cat passwd
可以加上 -n 參數(shù)顯示行號:
$ cat -n passwd
nl 命令,添加行號并打印,這是個(gè)比 cat -n 更專業(yè)的行號打印命令。
這里簡單列舉它的常用的幾個(gè)參數(shù):
-b : 指定添加行號的方式,主要有兩種:
-b a:表示無論是否為空行,同樣列出行號("cat -n"就是這種方式)
-b t:只列出非空行的編號并列出(默認(rèn)為這種方式)
-n : 設(shè)置行號的樣式,主要有三種:
-n ln:在行號字段最左端顯示
-n rn:在行號字段最右邊顯示,且不加 0
-n rz:在行號字段最右邊顯示,且加 0
-w : 行號字段占用的位數(shù)(默認(rèn)為 6 位)
你會發(fā)現(xiàn)使用這幾個(gè)命令,默認(rèn)的終端窗口大小,一屏顯示不完文本的內(nèi)容,得用鼠標(biāo)拖動滾動條或者滑動滾輪才能繼續(xù)往下翻頁,要是可以直接使用鍵盤操作翻頁就好了,那么你就可以使用下面要介紹的命令。