看完這篇你一定能掌握Linux(近三萬字)
原創(chuàng):小姐姐味道(微信公眾號ID:xjjdog)但狭,歡迎分享,轉(zhuǎn)載請保留出處。
有很多同學(xué)微信問我盐欺,Linux命令這么多叮贩,該怎么從入門到精通尚骄?其實(shí)哩盲,這個事情非常的simple贷祈,這篇文章將會帶你飛。文章非常的長顶伞,要挑一個陽光明媚的sunshine weekend,耐心去搞定剑梳。
本文將由一個Linux命令概覽開始唆貌,說明Linux命令的方方面面。如果你讀完這部分還是一頭霧水垢乙,那么就證明需要按照下面的小白教程去學(xué)習(xí)了锨咙,內(nèi)容涵蓋了:如何挑選Linux發(fā)行版、如何安裝Linux系統(tǒng)追逮,按照主題學(xué)習(xí)Linux系統(tǒng)的命令等酪刀。
入門后的 學(xué)習(xí)方式:多敲多打粹舵,用條件反射替代大腦記憶--如果你將來或者現(xiàn)在要用它來吃飯的話。其中骂倘,也有一些難啃的骨頭眼滤,關(guān)注小姐姐味道微信公眾號,我們一起用鋒利的牙齒历涝,來把它嚼碎诅需。
1. Linux命令概覽
這部分是給稍微有點(diǎn)Linux經(jīng)驗(yàn)的同學(xué)準(zhǔn)備的,如果你是初學(xué)者荧库,請?zhí)^此part直接進(jìn)入第二部分堰塌。
1.1目錄操作
工作中,最常打交道的就是對目錄和文件的操作分衫。linux提供了相應(yīng)的命令去操作他场刑,并將這些命令抽象、縮寫蚪战。
1.1.1 基本操作
可能是這些命令太常用了牵现,多打一個字符都是罪過。所以它們都很短屎勘,不用阿拉伯?dāng)?shù)字施籍,一個剪刀手就能數(shù)過來。
看命令概漱。
mkdir 創(chuàng)建目錄 make dircp 拷貝文件 copymv 移動文件 moverm 刪除文件 remove
例子:
# 創(chuàng)建目錄和父目錄a,b,c,dmkdir -p a/b/c/d# 拷貝文件夾a到/tmp目錄cp -rvf a/ /tmp/# 移動文件a到/tmp目錄丑慎,并重命名為bmv -vf a /tmp/b# 刪除機(jī)器上的所有文件rm -rvf /
1.1.2 漫游
linux上是黑漆漆的命令行,依然要面臨人生三問:我是誰瓤摧?我在哪竿裂?我要去何方?
ls
命令能夠看到當(dāng)前目錄的所有內(nèi)容照弥。ls -l
能夠看到更多信息腻异,判斷你是誰。
pwd
命令能夠看到當(dāng)前終端所在的目錄这揣。告訴你你在哪悔常。
cd
假如你去錯了地方,cd命令能夠切換到對的目錄给赞。
find
find命令通過篩選一些條件机打,能夠找到已經(jīng)被遺忘的文件。
至于要去何方片迅,可能就是主宰者的意志了残邀。
1.2 文本處理
這是是非常非常加分的技能。get到之后,也能節(jié)省更多時間來研究面向?qū)ο蠼嬲酢P〗憬阄兜酪呀?jīng)輸出了“最常用的vim驱闷、sed、awk技巧系列”空免。
1.2.1 查看文件
cat
最常用的就是cat
命令了空另,注意,如果文件很大的話鼓蜒,cat命令的輸出結(jié)果會瘋狂在終端上輸出痹换,可以多次按ctrl+c
終止。
# 查看文件大小du -h file# 查看文件內(nèi)容cat file
less
既然cat有這個問題都弹,針對比較大的文件娇豫,我們就可以使用less
命令打開某個文件。類似vim畅厢,less可以在輸入/
后進(jìn)入查找模式冯痢,然后按n
(N)向下(上)查找。
有許多操作框杜,都和vim類似浦楣,你可以類比看下。
tail
大多數(shù)做服務(wù)端開發(fā)的同學(xué)咪辱,都了解這么命令振劳。比如,查看nginx的滾動日志油狂。
tail -f access.log
tail命令可以靜態(tài)的查看某個文件的最后n行历恐,與之對應(yīng)的,head命令查看文件頭n行专筷。但head沒有滾動功能弱贼,就像尾巴是往外長的,不會反著往里長磷蛹。
tail -n100 access.loghead -n100 access.log
1.2.1 統(tǒng)計(jì)
sort和uniq經(jīng)常配對使用吮旅。sort可以使用-t
指定分隔符,使用-k
指定要排序的列味咳。
下面這個命令輸出nginx日志的ip和每個ip的pv庇勃,pv最高的前10
# 2019-06-26T10:01:57+08:00|nginx001.server.ops.pro.dc|100.116.222.80|10.31.150.232:41021|0.014|0.011|0.000|200|200|273|-|/visit|sign=91CD1988CE8B313B8A0454A4BBE930DF|-|-|http|POST|112.4.238.213awk -F"|" '{print $3}' access.log | sort | uniq -c | sort -nk1 -r | head -n10
1.2.3 其他
grep
grep用來對內(nèi)容進(jìn)行過濾,帶上--color
參數(shù)槽驶,可以在支持的終端可以打印彩色匪凉,參數(shù)n
則輸出具體的行數(shù),用來快速定位捺檬。
比如:查看nginx日志中的POST請求。
grep -rn --color POST access.log
推薦每次都使用這樣的參數(shù)贸铜。
如果我想要看某個異常前后相關(guān)的內(nèi)容堡纬,就可以使用ABC參數(shù)聂受。它們是幾個單詞的縮寫,經(jīng)常被使用烤镐。A after 內(nèi)容后n行B before 內(nèi)容前n行C count? 內(nèi)容前后n行
就像是這樣:
grep -rn --color Exception -A10 -B2 error.log
diff
diff命令用來比較兩個文件是否的差異蛋济。當(dāng)然,在ide中都提供了這個功能炮叶,diff只是命令行下的原始折衷碗旅。對了,diff和patch還是一些平臺源碼的打補(bǔ)丁方式镜悉,你要是不用祟辟,就pass吧。
1.3壓縮
為了減小傳輸文件的大小侣肄,一般都開啟壓縮旧困。linux下常見的壓縮文件有tar、bzip2稼锅、zip吼具、rar等,7z這種用的相對較少矩距。
.tar 使用tar命令壓縮或解壓
.bz2 使用bzip2命令操作
.gz 使用gzip命令操作
.zip 使用unzip命令解壓
.rar 使用unrar命令解壓
最常用的就是.tar.gz
文件格式了拗盒。其實(shí)是經(jīng)過了tar打包后,再使用gzip壓縮锥债。
創(chuàng)建壓縮文件
tar cvfz archive.tar.gz dir/
解壓
tar xvfz. archive.tar.gz
快去弄清楚它們的關(guān)系吧陡蝇。
1.4 日常運(yùn)維
開機(jī)是按一下啟動按鈕,關(guān)機(jī)總不至于是長按啟動按鈕吧赞弥。對了毅整,是shutdown命令,不過一般也沒權(quán)限-.-!绽左。passwd命令可以用來修改密碼悼嫉,這個權(quán)限還是可以有的。
mount
mount命令可以掛在一些外接設(shè)備拼窥,比如u盤戏蔑,比如iso,比如剛申請的ssd鲁纠∽芸茫可以放心的看小電影了。
mount /dev/sdb1 /xiaodianying
chown
chown
用來改變文件的所屬用戶和所屬組改含。
chmod
用來改變文件的訪問權(quán)限情龄。
這兩個命令,都和linux的文件權(quán)限777有關(guān)。
示例:
# 毀滅性的命令chmod 000 -R /# 修改a目錄的用戶和組為 xjjchown -R xjj:xjj a# 給a.sh文件增加執(zhí)行權(quán)限(這個太常用了)chmod a+x a.sh
yum
假定你用的是centos骤视,則包管理工具就是yum鞍爱。如果你的系統(tǒng)沒有wget命令,就可以使用如下命令進(jìn)行安裝专酗。
yum install wget -y
systemctl
當(dāng)然睹逃,centos管理后臺服務(wù)也有一些套路。service
命令就是祷肯。systemctl
兼容了service
命令沉填,我們看一下怎么重啟mysql服務(wù)。 推薦用下面這個佑笋。
service mysql restartsystemctl restart mysqld
對于普通的進(jìn)程翼闹,就要使用kill命令進(jìn)行更加詳細(xì)的控制了。kill命令有很多信號允青,如果你在用kill -9
橄碾,你一定想要了解kill -15
以及kill -3
的區(qū)別和用途。
su
su用來切換用戶颠锉。比如你現(xiàn)在是root法牲,想要用xjj用戶做一些勾當(dāng),就可以使用su切換琼掠。
su xjjsu - xjj
-
可以讓你干凈純潔的降臨另一個賬號拒垃,不出意外,推薦瓷蛙。
1.5 系統(tǒng)狀態(tài)概覽
登陸一臺linux機(jī)器悼瓮,有些命令能夠幫助你快速找到問題。這些命令涵蓋內(nèi)存艰猬、cpu横堡、網(wǎng)絡(luò)、io冠桃、磁盤等命贴。
unameuname命令可以輸出當(dāng)前的內(nèi)核信息,讓你了解到用的是什么機(jī)器食听。
uname -a
ps
ps命令能夠看到進(jìn)程/線程狀態(tài)胸蛛。和top有些內(nèi)容重疊,常用樱报。
# 找到j(luò)ava進(jìn)程ps -ef|grep java
top系統(tǒng)狀態(tài)一覽葬项,主要查看。cpu load負(fù)載迹蛤、cpu占用率民珍。使用內(nèi)存或者cpu最高的一些進(jìn)程寓辱。下面這個命令可以查看某個進(jìn)程中的線程狀態(tài)想暗。
top -H -p pid
free
top也能看內(nèi)存淀弹,但不友好三椿,free是專門用來查看內(nèi)存的。包括物理內(nèi)存和虛擬內(nèi)存swap津肛。
df
df命令用來查看系統(tǒng)中磁盤的使用量,用來查看磁盤是否已經(jīng)到達(dá)上限汗贫。參數(shù)h
可以以友好的方式進(jìn)行展示身坐。
df -h
ifconfig
查看ip地址,不啰嗦落包,替代品是ip addr
命令部蛇。
ping
至于網(wǎng)絡(luò)通不通,可以使用ping來探測咐蝇。(不包括那些禁ping的網(wǎng)站)
netstat雖然ss命令可以替代netstat了涯鲁,但現(xiàn)實(shí)中netstat仍然用的更廣泛一些。比如有序,查看當(dāng)前的所有tcp連接抹腿。
netstat -ant
此命令,在找一些本地起了什么端口
之類的問題上旭寿,作用很大警绩。
1.6 工作常用
還有一些在工作中經(jīng)常會用到的命令,它們的出現(xiàn)頻率是非常高的 盅称,都是些熟面孔肩祥。
export
很多安裝了jdk的同學(xué)找不到j(luò)ava命令,export
就可以幫你辦到它缩膝。export用來設(shè)定一些環(huán)境變量混狠,env命令能看到當(dāng)前系統(tǒng)中所有的環(huán)境變量。比如疾层,下面設(shè)置的就是jdk的将饺。
export PATH=$PATH:/home/xjj/jdk/bin
有時候,你想要知道所執(zhí)行命令的具體路徑云芦。那么就可以使用whereis命令俯逾,我是假定了你裝了多個版本的jdk。
crontab
這就是linux本地的job工具舅逸。不是分布式的桌肴,你要不是運(yùn)維,就不要用了琉历。比如坠七,每10分鐘提醒喝茶上廁所水醋。
*/10 * * * * /home/xjj/wc10min
datedate命令用來輸出當(dāng)前的系統(tǒng)時間,可以使用-s參數(shù)指定輸出格式彪置。但設(shè)置時間涉及到設(shè)置硬件拄踪,所以有另外一個命令叫做hwclock
。
xargsxargs讀取輸入源拳魁,然后逐行處理惶桐。這個命令非常有用。舉個栗子潘懊,刪除目錄中的所有class文件姚糊。
find . | grep .class$ | xargs rm -rvf#把所有的rmvb文件拷貝到目錄ls *.rmvb | xargs -n1 -i cp {} /mount/xiaodianying
1.7 網(wǎng)絡(luò)
linux是一個多作業(yè)的網(wǎng)絡(luò)操作系統(tǒng),所以網(wǎng)絡(luò)命令有很多很多授舟。工作中救恨,最常和這些打交道。
ssh
這個释树,就不啰嗦了肠槽。你一定希望了解ssh隧道
是什么。你要是想要詳細(xì)的輸出過程奢啥,記得加參數(shù)-v
秸仙。
scp
scp用來進(jìn)行文件傳輸。也可以用來傳輸目錄扫尺。也有更高級的sftp
命令筋栋。
scp a.txt 192.168.0.12:/tmp/a.txtscp -r a_dir 192.168.0.12:/tmp/
wget
你想要在服務(wù)器上安裝jdk,不會先在本地下載下來正驻,然后使用scp傳到服務(wù)器上吧(有時候不得不這樣)弊攘。wget命令可以讓你直接使用命令行下載文件,并支持?jǐn)帱c(diǎn)續(xù)傳姑曙。
wget -c http://oracle.fuck/jdk2019.bin
mysql
mysql應(yīng)用廣泛襟交,并不是每個人都有條件用上navicat
的。你需要了解mysql的連接方式和基本的操作伤靠,在異常情況下才能游刃有余捣域。
mysql -u root -p -h 192.168.1.2
不要覺得復(fù)雜,命令是有限的宴合,但激情無限焕梅;都會也不要驕傲,一個vim就夠折騰一輩子卦洽。捷徑就是總結(jié)贞言,深入只有探索。白馬過隙阀蒂,終會行云流水该窗,手到擒來弟蚀。
物是人非,年華易老酗失。唯有時光义钉,不會辜負(fù)。
2. 挑選一個Linux發(fā)行版
和Linux比較像的還有Unix规肴,但如果你是一個二三十歲的小青年捶闸,你接觸到可能只有Linux的世界了。從手機(jī)拖刃,到服務(wù)器上廣泛使用的centos
鉴嗤,到漂亮的桌面發(fā)行版ubuntu
,甚至是風(fēng)靡全球的樹莓派
序调,到處都是linux的身影。
2.1 你需要知道這些linux歷史
知道一點(diǎn)相關(guān)操作系統(tǒng)的歷史兔簇,是能夠陶冶情操的发绢。GNU/Linux
是為了抵制一些商業(yè)公司的壟斷行為而發(fā)展起來的,凝結(jié)了一代互聯(lián)網(wǎng)人向往自由的心血垄琐。
和其他Unix比起來边酒,Linux其實(shí)很年輕。直到1991年狸窘,一個叫Linus Torvalds
的芬蘭年輕人才開始開發(fā)我們現(xiàn)在所知道的Linux內(nèi)核
墩朦。
Linux
的吉祥物是企鵝,這個吉祥物直到1996年才確定翻擒,所以你會經(jīng)趁セ粒看到一些搞笑的圖片。如果你是90后陋气,那這只小企鵝幾乎和你一般大劳吠,還是個年輕的小伙。
Linux的發(fā)展歷程比較的復(fù)雜巩趁。經(jīng)過一次次的過關(guān)斬將痒玩,Linux走到今天確屬不易。關(guān)于其發(fā)展歷史议慰,你可以通過下面的鏈接蠢古,查看高清圖片。20年的時間别凹,對軟件行業(yè)來說草讶,是一段非常漫長的時光,有多少的風(fēng)光已經(jīng)物是人非番川。
高清見圖片(http://1t.click/aUnx) 到涂〖箍颍可以看到,linux只占了那可憐的一小塊践啄。這就像人類的出現(xiàn)浇雹,在生命的長河中,微不足道屿讽,但卻是一個質(zhì)的飛躍昭灵。
你可能注意到,在前面的描述中伐谈,說的是GUN/Linux
烂完,而不僅僅是Linux
。Linux本身只是一個內(nèi)核诵棵,作用有限抠蚣,只有和GNU
聯(lián)合起來,擁有完整的生態(tài)才會發(fā)揮它的作用履澳。
談到上面區(qū)別的原因嘶窄,是為了記住Richard Stallman
在1983年發(fā)起的GNU
計(jì)劃。他同時是smalltalk
語言的發(fā)明者距贷,被公認(rèn)的第二個面向?qū)ο蟮恼Z言柄冲。我在早些年,還研究過一段時間忠蝗。哦现横,他還編寫了一個巨無霸編輯器,Emacs
阁最。
只有一個人被捧成神戒祠,他才會有能量折磨你。
針對于Linux歷史速种,我們不做過多介紹得哆。下面介紹幾個經(jīng)典的發(fā)行版本。
2.2 精選版本介紹
現(xiàn)在的Linux發(fā)行版本哟旗,已經(jīng)有上千個贩据,你要是喜歡、而且多金闸餐,你也可以做一個饱亮。如何在這其中,找到最合適的版本舍沙,是需要經(jīng)過一番折騰的近上。很多發(fā)行版本,其實(shí)是很小眾的拂铡。
這不像是哲學(xué)領(lǐng)域的某些東西壹无,真理掌握在少數(shù)人手中葱绒。只有獲得良好發(fā)展,并得到認(rèn)可的Linux發(fā)行版斗锭,才有它的價值地淀,可以說是徹頭徹尾的實(shí)用主義。
但這東西又像女朋友岖是,剛開始感覺風(fēng)采迥異帮毁,各有千秋,到最后了解到是一樣的庸俗不堪豺撑。但有人就是喜歡Linux相關(guān)的工作烈疚,一干就是一輩子...
我可以先說一下自己的歷程。剛開始聪轿,接觸的是紅帽redhat
爷肝,當(dāng)時還沒有分什么企業(yè)版。用了一段時間以后陆错,又切換成更穩(wěn)定的slackware
阶剑。但是slackware上的程序更新實(shí)在太慢了,于是又切換成readhat血統(tǒng)的fedora
危号,這個版本的軟件保鮮度很高。其間素邪,又嘗試了其他幾個linux版本外莲,最終,在2013年前后兔朦,換成了滾動升級的archlinux
偷线,直到現(xiàn)在。
要我個人做個推薦的話:
1沽甥、個人用戶(技術(shù))声邦,桌面版用ubuntu
=>archlinux
。
2摆舟、企業(yè)用戶,服務(wù)器,使用centos
刘离。
2.3 主要起源
這么多Linux版本粘优,其實(shí)有兩條主線。debian
系列和redhat
系列照宝。很多發(fā)行版本蛇受,其實(shí)是二次翻新,很多就直接拿這兩個基礎(chǔ)系列進(jìn)行改造厕鹃。正所謂:操作系統(tǒng)千千萬兢仰,都是帽子和大便乍丈。
debian
下面這個屎一樣的圖表,就是debian把将。呃呃呃轻专,和大便只差一個字母。
Debian計(jì)劃
是一個致力于創(chuàng)建一個自由操作系統(tǒng)的合作組織秸弛。它的特點(diǎn)是:穩(wěn)定铭若、安全,到現(xiàn)在為止递览,已經(jīng)發(fā)展了20多年了叼屠。我們所熟悉的ubuntu,就是基于debian改進(jìn)的绞铃。
redhat
紅帽是一家商業(yè)公司镜雨,涉足Linux比較早,現(xiàn)在對個人提供一些紅帽認(rèn)證
之類的證書《酰現(xiàn)在云主機(jī)使用較多的centos荚坞,包括紅帽公司的RHEL
,占據(jù)了大部分服務(wù)器市場菲盾。近期颓影,centos 8
推出了centos stream
滾動版本,看起來更像是一個正常的操作系統(tǒng)懒鉴。
2.4 典型版本
我們看一下處于不同層次的幾個典型版本诡挂。從應(yīng)用方面來說,linux有桌面临谱、服務(wù)器璃俗、研究用等用途。
2.4.1悉默、ubuntu
ubuntu的出現(xiàn)城豁,對Linux的推廣有不可磨滅的貢獻(xiàn)。它是一個易于安裝的桌面版本(也有服務(wù)器版本)抄课,界面非常漂亮唱星。ubuntu是基于debian系統(tǒng)的unstable分支修改的,包管理軟件是apt-get
跟磨。
它的創(chuàng)建者是Mark Shuttleworth
魏颓,南非企業(yè)家,世界上第二名自資的太空游客吱晒。我想甸饱,無論是太空還是ubuntu,這都是夢想吧。
2.4.2叹话、centos
centos是目前最流行的服務(wù)器版本偷遗。它是RHEL源代碼再編譯的產(chǎn)物,主要是為了繞開一些法律問題驼壶。在包管理氏豌,甚至穩(wěn)定性上,與紅帽企業(yè)版沒什么差別热凹。
2.4.3泵喘、archlinux
archlinux采用滾動升級
的模式進(jìn)行發(fā)行,盡全力提供最新的穩(wěn)定版本般妙。剛開始安裝纪铺,arch只提供一個基本的系統(tǒng),甚至連界面都沒有碟渺,對初學(xué)者不是很友好鲜锚。
但是,archlinux是非常干凈的系統(tǒng)苫拍。很多軟件芜繁,只有你需要的時候才會安裝。它的軟件和理念通常都是最新的绒极,定制化非常強(qiáng)骏令,深得許多Linux愛好者的喜愛。
2.4.4垄提、gentoo
上面的archlinux榔袋,提供了編譯后的軟件包。用戶在安裝軟件時塔淤,只需要下載、解壓即可速妖。gentoo將這個過程更近一步高蜂,可以說更加的變態(tài)。它下載的是軟件的源代碼罕容,然后在本地進(jìn)行編譯备恤,然后安裝。
這通常非常的蛋疼锦秒,因?yàn)橄螺d露泊、編譯會花費(fèi)非常長的時間,但它有一個非常大的優(yōu)點(diǎn)旅择,就是穩(wěn)定惭笑。
這個系統(tǒng)比較底層,對技能要求更多,不太推薦沉噩。
2.4.5 捺宗、LFS
LFS的全拼是“l(fā)inux from scratch”,意思是從零構(gòu)建一個linux系統(tǒng)川蒙。它有一個非常詳細(xì)的安裝文檔蚜厉,教你怎樣編譯內(nèi)核,編譯引導(dǎo)程序畜眨,編譯和配置必要的軟件昼牛。
這是一個瘋狂而必要的過程。如果你想要自己的Linux之上更上層樓康聂,跟著文檔做一遍是受益無窮的贰健。你需要經(jīng)過多次交叉編譯,最終使用chroot命令切換到新系統(tǒng)進(jìn)行后續(xù)操作早抠。
想做一個自己的發(fā)行版么霎烙?從這開始吧。
2.4.6蕊连、kali
kali linux是一個非常專業(yè)的發(fā)行版悬垃。如果你在做滲透方面的工作,將是一個非常好的選擇甘苍。
發(fā)行版的安裝包非常大尝蠕,包含了常見的破解工具,滲透工具载庭,攻擊工具看彼。這非常的危險,我曾用它暴力破解了非常多的wifi密碼囚聚,成功的窺視了鄰居的隱私靖榕。還是非常好用的。
3. 安裝一個清爽的Linux系統(tǒng)
工欲善其事顽铸,必先利其器茁计。你可能會想到買一臺云主機(jī)練練手,但那畢竟要花點(diǎn)銀子谓松,我們可以自己安裝一個星压。我們在上面提到,目前使用最廣泛的鬼譬,就是centos
娜膘。不論你是自建機(jī)房,還是使用類似于阿里云這樣的云端環(huán)境优质,大多數(shù)都會提供centos
的安裝竣贪。
你可能會找到多種安裝虛擬機(jī)的方式军洼。本小節(jié),將使用虛擬雙網(wǎng)卡
的方式贾富,準(zhǔn)備一個純潔的環(huán)境歉眷。這一小節(jié),圖片很多颤枪。
以阿里云為例汗捡,默認(rèn)第一位就是CentOS,提供了從7.6版本到舊版本的多個鏡像畏纲。
3.1 下載
下面的文章扇住,我們就以CentOS 7
穩(wěn)定版本為基礎(chǔ)環(huán)境。centos很流行盗胀,所以鏡像也有很多艘蹋。國內(nèi),我們從上海交大下載票灰,速度應(yīng)該會快一些女阀。
http://ftp.sjtu.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso
如果交大哪天不維護(hù)了⌒加兀可以從這里找:
http://centos.mirror.ndchost.com/7/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso
為了讓大家學(xué)到更多的知識浸策,我們使用最小化
的系統(tǒng)ISO。最小化的iso不到1GB
惹盼,而預(yù)裝了很多軟件的dvd有4.3GB
的大小庸汗。我們就用這個減肥版。
3.2 安裝Linux
要想快速學(xué)習(xí)手报、體驗(yàn)Linux蚯舱,最便捷的方式,就是使用虛擬機(jī)進(jìn)行安裝掩蛤。目前枉昏,最流行的虛擬機(jī),一個是VMware
揍鸟,一個是VirtualBox
兄裂。在MacOS上還有一個Parallels Desktop
。
其中蜈亩,VirtualBox免費(fèi)而且跨平臺懦窘,能夠滿足我們的需求前翎。接下來稚配,將一步步引導(dǎo)你進(jìn)行安裝。
(1) 點(diǎn)擊新建港华,開啟安裝旅程道川。
(2) 填寫名稱尊流,版本。然后點(diǎn)擊繼續(xù)伴奥。
(3)按照你的機(jī)器配置锣吼,選擇內(nèi)存
我的機(jī)器是8GB內(nèi)存的代态,就分配給虛擬機(jī)2GB腔呜,這個已經(jīng)足夠用了。
(4) 創(chuàng)建一個虛擬磁盤
點(diǎn)擊繼續(xù)后谤草,將彈出一個對話框莺奸。我們不用多管嚎杨,一直點(diǎn)繼續(xù)黄痪,知道對話框消失紧帕。這非常的粗暴。
(5) 接下來桅打,點(diǎn)擊設(shè)置是嗜。
(6) 切換到Storage選項(xiàng),選擇我們下載的iso
(7) 點(diǎn)擊啟動挺尾,開始安裝鹅搪。
使用方向鍵切換,使得高亮聚焦在Install CentOS 7
上遭铺。點(diǎn)擊確定丽柿,開始安裝。
(8) 彈出一個安裝界面
接下來的步驟有點(diǎn)多魂挂,如果我們沒有特別的介紹甫题,那么直接continue就ok了。
(9) 接下來涂召,配置磁盤分區(qū)
依然保持默認(rèn)坠非,并按按鈕Done
退出。
(10) 配置用戶
linux上默認(rèn)的用戶名為root
芹扭。接下來我們設(shè)置root用戶的密碼為123456
夕土。由于這是一個弱密碼洗出,所以需要點(diǎn)擊兩次確定退出。
(11) 等待安裝完畢,進(jìn)行重啟
(12) 安裝成功
3.3 聯(lián)網(wǎng)
這個時候讹开,我們安裝的虛擬機(jī),還不能聯(lián)網(wǎng)击蹲,無法把自己的意念傳達(dá)出去毡琉。由于我們沒有對虛擬機(jī)進(jìn)行任何設(shè)置,所以使用的是默認(rèn)的NAT
模式舍杜。
將光標(biāo)聚焦到命令行窗口新娜,然后輸入命令dhclient
。等待幾秒鐘既绩,執(zhí)行ping baidu.com
測試以下網(wǎng)絡(luò)概龄,可以看到能夠正常訪問網(wǎng)絡(luò)了。
上面黑漆漆的窗口饲握,就是我們現(xiàn)在的Linux界面私杜。有人覺得很丑,就像是在玩dos救欧,但像我這種不可救藥的人衰粹,卻覺得格外的親切。
接下來的命令笆怠,我們不會再截圖铝耻,而使用高亮的代碼塊表示。為了不至于讓人暈頭轉(zhuǎn)向蹬刷,請先看下圖瓢捉。
3.4 外部訪問虛擬機(jī)
由于NAT
模式的特點(diǎn),我們的虛擬機(jī)能夠訪問外網(wǎng)办成,但無法被外部發(fā)現(xiàn)泊柬。酒香竟怕巷子深。為了解決這個問題诈火,我們需要再添加一塊網(wǎng)卡兽赁。
在做這些更改之前,需要首先關(guān)閉虛擬機(jī)冷守〉堆拢可以強(qiáng)制關(guān)閉機(jī)器,也可以在命令行中輸入:
shutdown -h now
虛擬機(jī)關(guān)閉后拍摇,再次點(diǎn)擊設(shè)置亮钦,切換到網(wǎng)絡(luò)適配器選項(xiàng)卡。如圖充活,添加一個新的網(wǎng)絡(luò)適配器蜂莉,適配器類型為Host-only Adapter
蜡娶。通過這塊網(wǎng)卡,我們的宿主機(jī)就能夠訪問它了映穗。
再次啟動虛擬機(jī)窖张,執(zhí)行dhclient
命令后,執(zhí)行ip addr
查看主機(jī)的ip地址蚁滋∷藿樱可以看到,我們現(xiàn)在有兩塊網(wǎng)卡辕录,兩個ip地址睦霎。
記錄下192打頭的網(wǎng)絡(luò)地址,我們會使用外部的程序走诞,比如XShell
副女、SecureCRT
等,進(jìn)行連接蚣旱。比如肮塞,我這里的ip地址是:192.168.99.100
。不廢話姻锁,看圖枕赵。
小提示:關(guān)于虛擬網(wǎng)卡的網(wǎng)段,如果有差異位隶。你可以在全局設(shè)置里拷窜,改成和我一樣的。
3.5 遠(yuǎn)程連接
你可能已經(jīng)體驗(yàn)到涧黄,通過虛擬機(jī)自帶的命令行界面進(jìn)行輸入篮昧,局限性非常大。通過遠(yuǎn)程連接笋妥,可以把終端界面切換到我們熟悉的操作模式懊昨,如果能夠顯示彩色的終端,那再好不過了春宣。下面介紹幾個工具酵颁,一般的,使用xshell的居多月帝。
Windows
XShell
你可能在公司內(nèi)躏惋,見過你的SRE同事,運(yùn)指如飛嚷辅,命令字符如流水一般撒過屏幕簿姨。即使非常繁雜,難以記憶的密碼,也能瞬間輸入扁位。他可能用的就是xshell准潭。SecureCRT
比較老的一款產(chǎn)品,使用也較多域仇。MobaXterm
MobaXterm就是一單文件純綠色軟件刑然,下載過來exe包直接運(yùn)行即可,不需要任何的安裝過程殉簸。
它們都有免費(fèi)版和專業(yè)版之分。無力購買的話沽讹,就找找破解版般卑。但是注意,盜版漢化的ssh客戶端爽雄,有些別有用心的人會在軟件中植入木馬蝠检,竊取你的密碼、證書挚瘟,這種情況已經(jīng)發(fā)生過很多次叹谁。
MacOS
對于macos用戶來說,簡單的很乘盖。直接使用iTerm焰檩,輸入命令行即可。比如使用下面的命令連接我們的機(jī)器订框。
ssh root@192.168.99.100
Linux
唔析苫,你都已經(jīng)是Linux環(huán)境了,還折騰個啥虛擬機(jī)呢穿扳?直接用吧衩侥。
推薦使用XShell、SecureCRT矛物、iTerm等工具茫死,通過ssh進(jìn)行遠(yuǎn)程連接。對于一些命令拷貝履羞、驗(yàn)證來說峦萎,要方便快捷的多。
4. 對Linux命令行有個初步了解
萬事開頭難忆首。面對黑漆漆的Linux窗口骨杂,要勇敢的走出第一步。不要怕輸錯了什么雄卷,系統(tǒng)健壯的很搓蚪。命令行通常會擁有比圖形界面更高的效率,更加重要的是它可以做自動化之類的小工具丁鹉,這使得生產(chǎn)力產(chǎn)生質(zhì)的飛躍妒潭。
現(xiàn)在悴能,你已經(jīng)安裝好了centos,并遠(yuǎn)程連接上了它雳灾。我們擁有了它漠酿,但并不能了解它的脾氣。接下來谎亩,讓我們進(jìn)入Linux命令行的世界炒嘲。和我簽訂契約吧,少年匈庭。
本小節(jié)會使用非常詳細(xì)的演進(jìn)方式夫凸,來看一下一個命令,是怎樣生成和執(zhí)行的阱持。
4.1夭拌、簡單嘗試
好啦,我們現(xiàn)在就在終端里了衷咽。什么叫做終端呢鸽扁?你在很多黑客電影里,看到的黑漆漆的界面就是镶骗,它提供了一個可以輸入字符串的交互式界面桶现,至于那些閃光的、掃描機(jī)一樣的東西鼎姊,是不存在的巩那。
嘗試輸入些什么吧。 比如:jdsjf
此蜈。
[root@localhost ~]# jdsjf-bash: jdsjf: command not found
我們再次把這張圖貼一下即横。怎么回事?命令的輸出翻譯成中文裆赵,就是“找不到命令”的意思东囚。什么叫命令?就是我們上面隨便輸入的字符串jdsjf
战授。
然后页藻,我們看下提示中其他一些有用的東西。
↓↓↓↓↓↓
bash 代表的是我們所使用的shell
植兰,shell可以認(rèn)為是一個解釋器份帐,將我們的輸入解釋成一系列可執(zhí)行的指令。現(xiàn)在的linux發(fā)行版楣导,最流行的就是bash解釋器废境,幾乎每個都預(yù)裝了它。
命令找不到,證明我們的字符串bash解釋不了噩凹。但是巴元,Linux上一些目錄里的文件,是可以被默認(rèn)找到的驮宴,這些目錄的集合逮刨,就叫PATH
。PATH還是一個環(huán)境變量堵泽,我們可以通過命令查看它的尊容修己。
[root@localhost ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
想要知道系統(tǒng)中有哪些命令,就可以看下上面這些文件夾中迎罗,都有哪些文件睬愤。文件非常非常之多,但是大部分我們不會接觸佳谦。所以戴涝,xjjdog才會寫這么個東西--聚焦那些最常用滋戳,最有用的命令钻蔑,最常用的參數(shù),最有用的場景奸鸯。
命令輸出后咪笑,還有一些額外的東西,比如[root@localhost ~]
娄涩,這部分叫做提示符窗怒,光標(biāo)會一直跳動,等待你的輸入蓄拣。這部分是可以定制的扬虚,甚至可以定制的十分漂亮。
4.2球恤、Hello World
到現(xiàn)在為止辜昵,我們什么都沒得到。按照程序員的想法來說咽斧,就要實(shí)現(xiàn)一個hello world
的程序堪置。在終端shell里,這個過程變得簡單张惹,遠(yuǎn)比寫一個java程序簡單舀锨。
[root@localhost ~]# echo "Hello World"Hello World
如上所示,echo
的意思就是輸出一些內(nèi)容宛逗。后面的Hello World
坎匿,就叫做參數(shù),它們之間以空格分隔,可以接受多個參數(shù)碑诉。
[root@localhost ~]# echo "Hello World" , "Fuck 996"Hello World , Fuck 996
以上命令能夠正常運(yùn)行彪腔,證明echo是我們的終端能夠認(rèn)識的一個命令。那到底這個命令是在什么地方呢进栽?可以使用whereis
命令進(jìn)行查找德挣。
[root@localhost ~]# whereis echoecho: /usr/bin/echo /usr/share/man/man1/echo.1.gz
命令顯示。我們的echo命令全路徑快毛,是/usr/bin/echo
格嗅,由于它處于PATH目錄中,所以能夠被識別到唠帝。
4.3萧恕、將命令加入PATH
接下來,我們把上面的命令畸写,做成一個腳本肤频。然后將這個腳本,放到PATH目錄中瀑晒。不過先等等绍坝,我們要先給命令起個名字。
首先需要創(chuàng)建一個文件苔悦。在Linux上轩褐,創(chuàng)建文件使用touch
命令。
[root@localhost ~]# touch jdsjf
命令執(zhí)行后玖详,什么都沒發(fā)生把介,它只是創(chuàng)建了一個空文件。接下來蟋座,我們向其中添加一些內(nèi)容拗踢。
[root@localhost ~]# echo "echo 'Hello World'" > jdsjf
注意符號>
,它的意思是向臀,將前面的輸出巢墅,重定向到后面的文件中。執(zhí)行完上面的命令飒硅,jdsjf
中的內(nèi)容砂缩,就變成了echo 'Hello World
。
接下來三娩,我們嘗試著去執(zhí)行剛才生成的命令庵芭。
[root@localhost ~]# ./jdsjf-bash: ./jdsjf : Permission denied
我們通過相對路徑的方式,來執(zhí)行剛剛生成的命令雀监。結(jié)果双吆,終端顯示我們并沒有這個命令的執(zhí)行權(quán)限眨唬。
其實(shí),Linux在權(quán)限控制這一方面好乐,非常的詳細(xì)匾竿。一個文件,有可讀蔚万、可寫岭妖、可執(zhí)行三種屬性。如果想要一個文件能夠執(zhí)行反璃,需要給它添加執(zhí)行權(quán)限昵慌,這個過程是由命令chmod
完成的。
[root@localhost ~]# chmod u+x jdsjf[root@localhost ~]# ./jdsjfHello World
我們將在后面的章節(jié)淮蜈,來詳細(xì)介紹權(quán)限方面的知識斋攀。如上所示,命令已經(jīng)能正常輸出梧田,接下來淳蔼,我們把命令移動
到PATH中的一個目錄。
[root@localhost ~]# mv jdsjf /usr/local/bin/[root@localhost ~]# jdsjfHello World
不需要加任何的相對路徑裁眯,現(xiàn)在鹉梨,只需要輸入jdsjf,就可以正常輸出一串?dāng)?shù)字未状。我們成功的讓一個沒有任何意義的字符串俯画,表達(dá)了它的想法析桥。雖然我們依然是它的主宰司草。
你可以想一下下面這三個問題:
1、我可以自定義一個目錄泡仗,比如/root/mybin
埋虹,把它加入到PATH么?
2娩怎、我可以省略上面的touch命令搔课,直接使用重定向生成文件么?
3截亦、除了放到PATH和相對路徑爬泥,還有沒有其他的命令執(zhí)行方式?
5. Linux漫游方式
想要了解linux的基本使用方法崩瓤,就要了解一個基本的事實(shí)--linux系統(tǒng)中袍啡,一切皆文件。
不管是命令却桶,還是文檔境输,甚至設(shè)備蔗牡,目錄,套接字嗅剖,在linux上對它們的操作都是一致對待的辩越。許多開發(fā)驅(qū)動程序的小伙伴,會發(fā)現(xiàn)使用的一些函數(shù)信粮,和讀寫文件的沒什么兩樣(open黔攒、close、read强缘、write亏钩、ioctl)。今天我們所說的基本操作欺旧,針對的就是普通文件和目錄姑丑,本小節(jié)將詳細(xì)解釋相關(guān)命令。
5.1辞友、當(dāng)前路徑
到現(xiàn)在為止栅哀,我們還不知道自己在系統(tǒng)的什么地方。在瀏覽器上称龙,我們能夠通過導(dǎo)航欄上的url留拾,了解到自己在互聯(lián)網(wǎng)上的具體坐標(biāo)。相似的功能鲫尊,是由pwd
命令提供的痴柔,它能夠輸出當(dāng)前的工作目錄。
pwd
命令是非常非常常用的命令疫向,尤其是在一些命令提示符
設(shè)置不太友好的機(jī)器上咳蔚。另外,它也經(jīng)常用在shell腳本中搔驼,用來判斷當(dāng)前的運(yùn)行目錄是否符合需求谈火。
有很多線上事故,都是由于沒有確認(rèn)當(dāng)前目錄所引起的舌涨。比如rm -rf *
這種危險的命令糯耍。在執(zhí)行一些高危命令時,隨時確認(rèn)當(dāng)前目錄囊嘉,是個好的習(xí)慣温技。
[root@localhost ~]# pwd/root
我們使用root用戶默認(rèn)登陸后,就停留在/root
目錄中扭粱。Linux中的目錄層次舵鳞,是通過/
進(jìn)行劃分的。
5.2焊刹、文件系統(tǒng)用戶標(biāo)準(zhǔn)
Linux的文件系統(tǒng)系任,從一開始就有一個規(guī)范標(biāo)準(zhǔn)恳蹲。它還有一個專有縮寫名詞,叫做FHS
(Filesystem Hierarchy Standard)俩滥。FHS經(jīng)過多年的演進(jìn)嘉蕾,目錄結(jié)構(gòu)也越來越清晰。除了一些標(biāo)準(zhǔn)的要求霜旧,還有一些使用者之間的約定错忱。
接下來,我們大體看一下linux上的默認(rèn)目錄挂据,對其有一個基本的感覺以清。
第1層 | 第二層 | 介紹 |
---|---|---|
/bin | ||
目錄/usr/bin的軟鏈接 | ||
/sbin | ||
目錄/usr/sbin的軟鏈接 | ||
/lib | ||
目錄/usr/lib的軟鏈接 | ||
/usr | /bin | 存放一些常用的命令 |
/usr | /sbin | 存放一些管理員常用的命令 |
/usr | /lib | 用來存放動態(tài)庫和一些模塊文件 |
/sys | ||
內(nèi)核中的數(shù)據(jù)結(jié)構(gòu)的可視化接口 | ||
/proc | ||
內(nèi)存映像 | ||
/run | ||
內(nèi)存映像 | ||
/boot | ||
存放引導(dǎo)程序,內(nèi)核相關(guān)文件 | ||
/dev | ||
存放一些設(shè)備文件 崎逃,比如光盤 | ||
/etc | ||
用于存儲一些全局的掷倔、應(yīng)用的配置文件 | ||
/var | ||
與/var/run一樣,存放的是系統(tǒng)運(yùn)行時需要的文件个绍,比如mysql的pid等 | ||
/tmp | ||
非常特殊的臨時文件夾勒葱,斷電丟失 | ||
/home | /** | 用戶目錄,比如我的目錄是/home/xjjdog |
/root | ||
root用戶的home目錄 |
home
平常巴柿,我們打交道最多的目錄凛虽,就集中在自己的用戶目錄,我們可以在里面做任何操作广恢,比如我們現(xiàn)在root用戶的/root
目錄凯旋。一些自己的資料,比如視頻钉迷、音頻至非、下載的文件,或者做測試用的一些數(shù)據(jù)資料篷牌,就可以自行在這些目錄下規(guī)劃睡蟋。root用戶比較特殊踏幻,普通用戶的私人目錄都是在/home下的枷颊。/etc
etc目錄是經(jīng)常要打交道的目錄,存放了一些全局的系統(tǒng)配置文件和應(yīng)用配置文件该面。比如你安裝了php夭苗,或者nginx,它們的配置文件就躺在/etc目錄下的某個文件夾里隔缀。/var
var目錄存放一些運(yùn)行中的數(shù)據(jù)题造,有必須的,也有非必須的猾瘸。一些黑客入侵之后界赔,會在這里面的某些文件中留下痕跡丢习,他們會著重進(jìn)行清理。var目錄還是一些應(yīng)用程序的默認(rèn)數(shù)據(jù)存放之地淮悼,比如mysql的數(shù)據(jù)文件咐低。/tmp
目錄是一個特殊的臨時目錄,文件在斷電以后就消失了袜腥。但這個目錄,所有的用戶福侈,都有寫入權(quán)限酒来,通常用來做文件交換用役首。/proc
和/sys
目錄,是兩個神奇的目錄远荠。它們兩個是一種偽文件系統(tǒng)矮固,可以通過修改其中一些文件的狀態(tài)和內(nèi)容,來控制程序的行為(修改后會直接刷到內(nèi)存上譬淳,太酷了)档址。剛開始的時候,只有proc目錄邻梆,由于里面內(nèi)容有多又亂守伸,后面又規(guī)劃出sys目錄,用來控制內(nèi)核的一些行為浦妄。如果你在調(diào)優(yōu)一些系統(tǒng)參數(shù)尼摹,和這些文件打交道的時間比較多。還有幾個空的目錄剂娄,我們沒有列在上面的表格上蠢涝。比如
/srv
目錄,通常會把一些web服務(wù)的資料阅懦,比如nginx的和二,放在這里面。但是耳胎,這并不是強(qiáng)制要求的惯吕,所以我見過的/srv
目錄惕它,通常會一直是空的。同樣的废登,/opt
目錄也是這樣一個存在怠缸,你就當(dāng)它不存在就行。這都屬于使用者規(guī)劃的范疇钳宪,自定義性非常強(qiáng)揭北。在使用Linux系統(tǒng)的時候,也可以創(chuàng)建自己的目錄吏颖。比如搔体,我就喜歡自己創(chuàng)建一個叫做
/data
的目錄,用來存放一些數(shù)據(jù)庫相關(guān)的內(nèi)容半醉。舉個例子疚俱,/data/mysql
存放mariadb的數(shù)據(jù),而/data/es/
存放elasticsearch的索引內(nèi)容缩多。
linux上的文件類型有很多呆奕,它們大部分都分門別類的存放在相應(yīng)的目錄中,比如/dev目錄下衬吆,就是一些設(shè)備文件梁钾;/bin文件下,是一些可以執(zhí)行命令逊抡。通常都好記的很姆泻。
5.3、查看文件列表
所以冒嫡,上面的表格內(nèi)容拇勃,我是怎么看到的呢,靠記憶么孝凌?ls
命令方咆,能夠列出相關(guān)目錄的文件信息◇凹埽可以被評為linux下最勤勞的命令標(biāo)兵瓣赂。
現(xiàn)在的終端,都能夠輸出彩色的信息辜窑,非常的直觀钩述。
oh-my-zsh
和oh-my-bash
等項(xiàng)目,可以讓你的終端更加的漂亮穆碎。把它加入到你的研究清單里吧仇哆。
[root@localhost /]# ls /# 注意:ls可以接受路徑參數(shù)责鳍,你不用先跳轉(zhuǎn),就可以輸出相關(guān)信息bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var[root@localhost /]# ls -l /# 帶上 -l參數(shù),可以查看一些更加詳細(xì)的信息对室。total 20lrwxrwxrwx. 1 root root 7 Nov 3 20:24 bin -> usr/bindr-xr-xr-x. 5 root root 4096 Nov 3 20:34 bootdrwxr-xr-x. 19 root root 3080 Nov 3 21:19 devdrwxr-xr-x. 74 root root 8192 Nov 3 20:34 etcdrwxr-xr-x. 2 root root 6 Apr 11 2018 homelrwxrwxrwx. 1 root root 7 Nov 3 20:24 lib -> usr/liblrwxrwxrwx. 1 root root 9 Nov 3 20:24 lib64 -> usr/lib64drwxr-xr-x. 2 root root 6 Apr 11 2018 mediadrwxr-xr-x. 2 root root 6 Apr 11 2018 mntdrwxr-xr-x. 2 root root 6 Apr 11 2018 optdr-xr-xr-x. 108 root root 0 Nov 3 21:19 procdr-xr-x---. 2 root root 135 Nov 4 07:53 rootdrwxr-xr-x. 24 root root 740 Nov 3 21:20 runlrwxrwxrwx. 1 root root 8 Nov 3 20:24 sbin -> usr/sbindrwxr-xr-x. 2 root root 6 Apr 11 2018 srvdr-xr-xr-x. 13 root root 0 Nov 3 21:19 sysdrwxrwxrwt. 9 root root 4096 Nov 4 03:40 tmpdrwxr-xr-x. 13 root root 155 Nov 3 20:24 usrdrwxr-xr-x. 19 root root 267 Nov 3 20:34 var
ls最常用的,就是加參數(shù)l
或者參數(shù)a
各薇。
5.3.1坟瓢、詳細(xì)信息
加上參數(shù)l
,能夠看到文件的一些權(quán)限信息已經(jīng)更新日期等褂策。但我們還看到了一些更有意思的東西横腿。比如:
lib -> usr/lib
上面表示的,是軟鏈接信息斤寂。
就如同我們上面表格所展示的一樣耿焊,lib
目錄,是/usr/lib
的快捷方式遍搞,它們之中的內(nèi)容罗侯,沒有什么兩樣。
關(guān)于ls -l
展示的更加詳細(xì)的內(nèi)容溪猿,可以參照我下面的這張圖钩杰。我們將在了解后面小節(jié)的內(nèi)容后,再次對這張圖進(jìn)行回顧诊县。
5.3.2 隱藏文件
直接在你的/root目錄里讲弄,執(zhí)行ls -al
,你會看到更多東西依痊。這些額外的隱藏文件垂睬,都是以.
開頭,以配置文件居多抗悍。這就是參數(shù)a
的作用驹饺。
[root@localhost ~]# ls -altotal 28dr-xr-x---. 2 root root 135 Nov 4 07:53 .dr-xr-xr-x. 17 root root 224 Nov 3 20:28 ..-rw-------. 1 root root 1273 Nov 3 20:28 anaconda-ks.cfg-rw-------. 1 root root 246 Nov 4 11:41 .bash_history-rw-r--r--. 1 root root 18 Dec 28 2013 .bash_logout-rw-r--r--. 1 root root 176 Dec 28 2013 .bash_profile-rw-r--r--. 1 root root 176 Dec 28 2013 .bashrc-rw-r--r--. 1 root root 100 Dec 28 2013 .cshrc-rw-r--r--. 1 root root 129 Dec 28 2013 .tcshrc
細(xì)心的同學(xué),應(yīng)該會注意到兩個特殊的目錄缴渊。.
和..
赏壹。前者表示的是當(dāng)前目錄,而后者表示的是上層目錄衔沼。
使用cd
命令蝌借,將在這些目錄中,自由穿梭指蚁。
小技巧:如果你對英文日期閱讀困難菩佑,可以使用
ls -al --full-time
查看可讀的日期。
5.4凝化、切換目錄
執(zhí)行cd命令稍坯,可以將工作目錄切換到目標(biāo)文件夾。為了展示cd命令的效果。請?jiān)趓oot用戶下瞧哟,執(zhí)行下面的命令混巧,這將創(chuàng)建一個7層的目錄。
cdmkdir -p a1/b2/c3/d4/e5/f6/{g7,g8,g9,g10}
我們使用cd命令勤揩,切換到最后一層咧党。然后,我們使用..
切換到上層目錄陨亡。
[root@localhost ~]# cd a1/b2/c3/d4/e5/f6/g7[root@localhost g7]# pwd/root/a1/b2/c3/d4/e5/f6/g7[root@localhost g7]# cd ..[root@localhost f6]# pwd/root/a1/b2/c3/d4/e5/f6
所以傍衡,切換到上面n層目錄,只需使用多層級的../
即可负蠕。有幾個特殊的變量蛙埂,需要說明一下。
-
../
指的是上層目錄 -
../../
指的是上兩層目錄 -
./
指的是當(dāng)前目錄 -
~
指的是當(dāng)前的用戶目錄虐急,這是一個縮寫符號 -
-
使用它箱残,可以在最近兩次的目錄中來回切換
我們來使用命令把上面這些特殊變量驗(yàn)證一下。
# 跳轉(zhuǎn)到用戶根目錄[root@localhost tmp]# cd ~[root@localhost ~]# pwd/root# 進(jìn)入到第三層目錄[root@localhost ~]# cd a1/b2/c3/[root@localhost c3]# pwd/root/a1/b2/c3# 跳回到前三層目錄[root@localhost c3]# cd ../../..[root@localhost ~]# pwd/root# 跳到上次訪問的目錄[root@localhost ~]# cd -/root/a1/b2/c3[root@localhost c3]# pwd/root/a1/b2/c3# 進(jìn)入當(dāng)前目錄:等于什么都沒干[root@localhost c3]# cd ./[root@localhost c3]# pwd/root/a1/b2/c3
以上就是cd命令的常用用法≈褂酰現(xiàn)在被辑,我們返回頭來看一下mkdir
。顧名思義敬惦,就是創(chuàng)建目錄的意思盼理,但一般在工作中,都會加上-p
參數(shù)俄删,這樣就可以一次性創(chuàng)建多層目錄宏怔。注意mkdir后面的大括號{}
,可以一次性的指定多個目錄進(jìn)行創(chuàng)建畴椰,這通常能節(jié)省很多時間臊诊。
5.5、文件操作
使用命令行操作文件斜脂,是非常方便的抓艳。
-
touch
新建文件 -
cp
復(fù)制文件 -
mv
移動文件 -
rm
刪除文件
這四個風(fēng)騷的命令,主宰著文件資料的去向帚戳。我們依然使用上面創(chuàng)建的目錄玷或,進(jìn)行接下來的操作。
# 創(chuàng)建三個文件[root@localhost ~]# touch long-long-long.txt[root@localhost ~]# touch 996.txt[root@localhost ~]# touch icu.txt[root@localhost ~]# ls996.txt a1 anaconda-ks.cfg icu.txt long-long-long.txt# 復(fù)制一個文件[root@localhost ~]# cp 996.txt 007.txt[root@localhost ~]# mv long-long-long.txt short.txt[root@localhost ~]# ls007.txt 996.txt a1 anaconda-ks.cfg icu.txt short.txt# 移動996.txt到a1目錄片任,icu.txt到a1/b2目錄# 刪除short.txt[root@localhost ~]# mv 996.txt a1/[root@localhost ~]# mv icu.txt a1/b2/[root@localhost ~]# rm short.txtrm: remove regular empty file ‘short.txt’? y# 遞歸刪除a1目錄[root@localhost ~]# rm -rvf a1/removed directory: ‘a(chǎn)1/b2/c3/d4/e5/f6/g7’removed directory: ‘a(chǎn)1/b2/c3/d4/e5/f6/g8’removed directory: ‘a(chǎn)1/b2/c3/d4/e5/f6/g9’removed directory: ‘a(chǎn)1/b2/c3/d4/e5/f6/g10’removed directory: ‘a(chǎn)1/b2/c3/d4/e5/f6’removed directory: ‘a(chǎn)1/b2/c3/d4/e5’removed directory: ‘a(chǎn)1/b2/c3/d4’removed directory: ‘a(chǎn)1/b2/c3’removed ‘a(chǎn)1/b2/icu.txt’removed directory: ‘a(chǎn)1/b2’removed ‘a(chǎn)1/996.txt’removed directory: ‘a(chǎn)1/’[root@localhost ~]# ls007.txt anaconda-ks.cfg
經(jīng)過一番操作以后偏友,只剩下了007了。除了上面基本的操作对供,接下來我要介紹一些更加重要的功能位他。
可以看到在使用rm
刪除文件的時候,進(jìn)行了一次提示。這是為了避免誤刪除一些東西棱诱,但有時候泼橘,你需要不顯示這種提示涝动,就可以加-f
參數(shù)迈勋。f
參數(shù)對于cp、mv等命令來說醋粟,同樣適用靡菇,它是force
的意思。
rm -f filecp -f file1 file2mv -f file1 file2
另外米愿,還有一個參數(shù)-r
厦凤,這是遞歸的意思。我們的目錄和文件育苟,通常有多個層次较鼓,遞歸可以把操作全部作用于上面,比如上面的遞歸刪除a1目錄违柏。
# 警告:以下命令會造成嚴(yán)重后果rm -rf /
上面的這個命令博烂,你一定經(jīng)常看到漱竖。這不是笑話禽篱,已經(jīng)有很多用戶因此丟失了數(shù)據(jù),這就是傳說中的刪根
馍惹,最終你將一無所有躺率。那參數(shù)v
又是干什么用的呢?加上它之后万矾,可以看到命令詳細(xì)的執(zhí)行過程悼吱。在平常的操作中,我一般都加上良狈。
6.開始操作文件
你可能已經(jīng)了解到后添,ll -l
命令的第一列,能夠顯示linux的文件類型们颜。請對此有一個大體的印象吕朵,因?yàn)楹竺娴暮芏嗝睿瑫玫竭@些知識窥突。
-
-
表示普通文件 -
d
表示目錄文件 -
l
表示鏈接文件努溃,比如快捷方式 -
s
套接字文件 -
c
字符設(shè)備文件,比如/dev/
中的很多文件 -
b
表示塊設(shè)備文件阻问,比如一些磁盤 -
p
管道文件
Linux上的文件可以沒有后綴梧税,而且可以創(chuàng)建一些違背直覺的文件。比如后綴是png,但它卻是一個壓縮文件(通常不會這么做)第队。大學(xué)時哮塞,就有聰明的同學(xué)這樣藏小電影,效果很好凳谦。
查看文件的具體類型忆畅,可以使用file
命令,它很聰明尸执,能夠識別很多文件格式家凯。
[root@localhost ~]# file /etc/etc: directory[root@localhost ~]# file /etc/group/etc/group: ASCII text[root@localhost ~]# file /dev/log/dev/log: socket[root@localhost ~]# file /dev/log/dev/log: socket[root@localhost ~]# file /bin/bin: symbolic link to `usr/bin'
本部分的操作,面向的就是ASCII text
類型的如失,普通文本文件绊诲。接下來,我們要創(chuàng)建一些文件褪贵。然后寫入一些內(nèi)容到文件里掂之,以便進(jìn)行后續(xù)的操作。
6.1脆丁、創(chuàng)建一個文件
6.1.1世舰、數(shù)字序列
使用重定向符,能夠直接生成文件偎快。下面冯乘,我要生成10到20的數(shù)字,每一個數(shù)字單獨(dú)一行晒夹,寫入一個叫做spring
的文件裆馒。巧的很,seq
命令可以完成這個過程丐怯。
seq 10 20 >> spring
我們在前面提到過>
的意思喷好,是將前面命令的輸出,重定向到其他地方读跷。在這里梗搅,我們用了兩個>
,它依然是重定向的意思效览,但表示的是无切,在原來文件的基礎(chǔ)上,追加
內(nèi)容丐枉。
也就是編程語言里的w+
和a+
的意思哆键。
6.1.2、查看內(nèi)容
為了查看文件的生成效果瘦锹,可以使用cat命令檢測籍嘹。cat命令將會把文件的內(nèi)容闪盔,輸出打印到終端上。如果加上參數(shù)n
辱士,甚至可以打印行號泪掀。效果如下:
[root@localhost ~]# cat spring1011121314151617181920[root@localhost ~]# cat -n spring1 102 113 124 135 146 157 168 179 1810 1911 20
除了查看文件內(nèi)容,cat命令通常用在更多的地方颂碘。只有和其他命令聯(lián)合起來异赫,它才會覺得生活有意義。
# 合并a文件和b文件到c文件cat a b>> c# 把a(bǔ)文件的內(nèi)容作為輸入凭涂,使用管道處理祝辣。我們在后面介紹cat a | cmd# 寫入內(nèi)容到指定文件贴妻。在shell腳本中非常常用切油。我們在后面會多次用到這種寫法cat > index.html <<EOF<html> <head><title></title></head> <body></body></html>EOF
由于我們的文件不大,cat命令沒有什么危害名惩。但假如文件有幾個GB
澎胡,使用cat就危險的多,這只叫做貓
的小命令娩鹉,會在終端上瘋狂的進(jìn)行輸出攻谁,你可以通過多次按ctrl+c
來終止它。
6.2弯予、平和的查看文件
既然cat命令不適合操作大文件戚宦,那一定有替換的方案。less和more就是锈嫩。由于less的加載速度比more快一些受楼,所以現(xiàn)在一般都使用less
。它最主要的用途呼寸,是用來分頁瀏覽文件內(nèi)容艳汽,并提供一些快速查找的方式。less是一個交互式
的命令对雪,你需要使用一些快捷鍵來控制它河狐。
這次我們使用seq生成一千萬
行記錄,足足有76MB
大小瑟捣,然后用less打開它馋艺。
[root@localhost ~]# seq 10000000 > spring[root@localhost ~]# du -h spring76M spring[root@localhost ~]# less spring
關(guān)于less,一般操作如下:
-
空格
向下滾屏翻頁 -
b
向上滾屏翻頁 -
/
進(jìn)入查找模式迈套,比如/1111
將查找1111字樣 -
q
退出less -
g
到開頭 -
G
去結(jié)尾 -
j
向下滾動 -
k
向上滾動捐祠,這兩個按鍵和vim的作用非常像
6.3、文件頭尾
head可以顯示文件頭交汤,tail可以顯示文件尾雏赦。它們都可以通過參數(shù)-n
劫笙,來指定相應(yīng)的行數(shù)。
[root@localhost ~]# head -n 3 spring123[root@localhost ~]# tail -n 3 spring9999998999999910000000
對于部分程序員來說星岗,tail -f
或許是最常用的命令之一填大。它可以在控制終端,實(shí)時監(jiān)控文件的變化俏橘,來看一些滾動日志允华。比如查看nginx或者tomcat日志等等。通常情況下寥掐,日志滾動的過快靴寂,依然會造成一些困擾,需要配合grep命令達(dá)到過濾效果召耘。
# 滾動查看系統(tǒng)日志tail -f /var/log/messages# 滾動查看包含info字樣的日志信息tail -f /var/log/messages | grep info
對于tail命令來說百炬,還有一個大寫的參數(shù)
F
。這個參數(shù)污它,能夠監(jiān)控到重新創(chuàng)建的文件剖踊。比如像一些log4j等日志是按天滾動的,tail -f
無法監(jiān)控到這種變化衫贬。
6.4德澈、查找文件
考慮下面這個場景。我們需要找一個叫做decorator.py
的文件固惯,這個文件是個幽靈梆造,可能存在于系統(tǒng)的任何地方。find
命令葬毫,能夠勝任這次捉鬼行動镇辉。
我們使用find
命令,從根目錄找起供常,由于系統(tǒng)的文件過多摊聋,下面的命令可能會花費(fèi)一段時間浙芙。
[root@localhost site-packages]# find / -name decorator.py -type f/usr/lib/python2.7/site-packages/decorator.py
使用time命令榜聂,可以看到具體的執(zhí)行時間。執(zhí)行還是挺快的么嗤锉!秒出源祈!
[root@localhost site-packages]# time find / -name decorator.py -type f/usr/lib/python2.7/site-packages/decorator.pyreal 0m0.228suser 0m0.098ssys 0m0.111s
find命令會查出一個路徑的集合煎源。通常是查詢出來之后,進(jìn)行額外的處理操作香缺,一般配合xargs
命令使用(xargs讀取輸入手销,然后逐行處理),至于find的exec
參數(shù)图张?忘了它吧锋拖,不好用诈悍!
# 刪除當(dāng)前目錄中的所有class文件find . | grep .class$ | xargs rm -rvf# 找到/root下一天前訪問的文件,type后面的類型參見文章開頭find /root -atime 1 -type f# 查找10分鐘內(nèi)更新過的文件find /root -cmin -10# 找到歸屬于root用戶的文件find /root -user root# 找到大于1MB的文件兽埃,進(jìn)行清理find /root -size +1024k -type f | xargs rm -f
find的參數(shù)非常非常多侥钳,記不住怎么辦?除了常用的柄错,其實(shí)都可以通過man
命令查看舷夺。man的操作也和vi非常的類似,輸入/EXAMPLES
售貌,會看到很多樣例给猾。不過我覺得還是上面列出的這些命令更加的適用。
6.4.1颂跨、數(shù)據(jù)來源
在上圖中敢伸,你會看到mtime,ctime,atime類似的字樣,它們的數(shù)據(jù)來自于何處呢毫捣?接下來我們順理成章的看一下stat
命令详拙。
[root@localhost ~]# stat spring File: ‘spring’ Size: 78888897 Blocks: 154080 IO Block: 4096 regular fileDevice: fd00h/64768d Inode: 8409203 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)Context: unconfined_u:object_r:admin_home_t:s0Access: 2019-11-04 18:01:46.698635718 -0500Modify: 2019-11-04 17:59:38.823458157 -0500Change: 2019-11-04 17:59:38.823458157 -0500 Birth: -
這不就是文件屬性么?從文件大小蔓同,到文件類型,甚至到最后修改蹲诀、訪問時間斑粱,都可以從這里獲取。Linux文件系統(tǒng)以塊為單位存儲信息脯爪,為了找到某一個文件所在存儲空間的位置则北,會用i節(jié)點(diǎn)
(inode) 對每個文件進(jìn)行索引,你可以認(rèn)為它是一個文件指針痕慢。
文件的字節(jié)數(shù)
文件擁有者user
文件所屬組group
文件的讀尚揣、寫、執(zhí)行權(quán)限
文件的時間戳
ctime指inode上一次變動的時間
mtime指文件內(nèi)容上一次變動的時間
atime指文件上一次打開的時間掖举。
鏈接數(shù)快骗,即有多少文件名指向這個inode (ln命令)
文件數(shù)據(jù)block的位置(具體的數(shù)據(jù)位置)
關(guān)于inode是一個比較大的話題,也是比較重要的知識點(diǎn)塔次,有興趣的可以自行搜索方篮。我們只需要知道這些信息是從這里來的就可以了。
6.4.2励负、小練習(xí)
如果我只想獲取Modify
這個數(shù)值藕溅,可以組合使用一下上面學(xué)到的命令。首先獲取最后三行继榆,然后獲取首行巾表。效果如下:
[root@localhost ~]# stat spring | tail -n 3 | head -n 1Modify: 2019-11-04 17:59:38.823458157 -0500
下面幾個命令汁掠,效果是與上面等價的,輸出結(jié)果也是一模一樣集币。正所謂條條大路通羅馬调塌,接下來,我們首先介紹一下出現(xiàn)頻率較高的grep
惠猿。另外羔砾,我們在上面的這些命令中,多次使用了|
偶妖,這是Linux中非常重要的管道概念姜凄,下面也會著重介紹。
stat spring | head -n 7 | tail -n 1stat spring | grep Modifystat spring | sed -n '7p'stat spring | awk 'NR==7'
6.5趾访、字符串匹配
grep用來對內(nèi)容進(jìn)行過濾态秧,帶上--color
參數(shù),可以在支持的終端可以打印彩色扼鞋,參數(shù)n
則用來輸出具體的行數(shù)申鱼,用來快速定位。這是一個必須要熟練使用的命令云头。
比如:查看nginx日志中的POST請求捐友。
grep -rn --color POST access.log
推薦每次都使用這樣的參數(shù)。
如果我想要看某個異常前后相關(guān)的內(nèi)容溃槐,就可以使用ABC參數(shù)匣砖。它們是幾個單詞的縮寫,經(jīng)常被使用昏滴。
- A after 內(nèi)容后n行
- B before 內(nèi)容前n行
- C 內(nèi)容前后n行
就像是這樣:
# 查看Exception關(guān)鍵字的前2行和后10行g(shù)rep -rn --color Exception -A10 -B2 error.log#查找/usr/下所有import關(guān)鍵字猴鲫,已經(jīng)它們所在的文件和行數(shù)grep -rn --color import /usr/
6.6、管道
在上面的命令中谣殊,我們多次用到了|
拂共,這貌似可以完成一些神奇的事情。|
是pipe
的意思姻几,它可以把多個命令聯(lián)系起來宜狐。通常,命令有下面的關(guān)聯(lián)方式:
-
;
順序執(zhí)行鲜棠,如mkdir a;rmdir a
-
&&
條件執(zhí)行肌厨,如mkdir a && rmdir a
-
||
條件執(zhí)行,如mkdir a || rmdir a
豁陆,后面的命令將不執(zhí)行 -
|
管道柑爸,前面命令的輸出,將作為后面命令的輸入
前三種的命令關(guān)聯(lián)盒音,是非常簡單有邏輯的表鳍,非常的好理解馅而。而管道,卻有自己的特點(diǎn)譬圣。
接觸過編程語言的都知道stdin
瓮恭、stdout
、stderr
的概念厘熟。讓我們重新組織一下針對于管道的定義:前面命令的輸出(stdin)屯蹦,將作為后面命令的輸入(stdout)。
我們拿一行命令來說明绳姨。
seq 20 100 | head -n 50 | tail -n 1
上面命令登澜,將輸出69。69是個神奇的數(shù)字飘庄,它是怎么辦到的呢脑蠕?我們來一張小圖,一切就豁然開朗了跪削。
關(guān)于輸入輸出和錯誤谴仙,linux使用一個數(shù)字
進(jìn)行縮寫,這在一些腳本中碾盐,甚至在一些安裝文件中晃跺,會經(jīng)常用到。
- 0 表示stdin標(biāo)準(zhǔn)輸入
- 1 表示stdout標(biāo)準(zhǔn)輸出
- 2 表示stderr標(biāo)準(zhǔn)錯誤
通過類似2>&1
的語法廓旬,可以把錯誤信息定向到標(biāo)準(zhǔn)輸出哼审。我們用命令來證明一下。
# 錯誤信息無法輸出到文件[root@localhost ~]# cat aaaaaaaaa > bcat: aaaaaaaaa: No such file or directory[root@localhost ~]# cat b# 錯誤信息被重定向了[root@localhost ~]# cat aaaaaaaaa > b 2>&1[root@localhost ~]# cat bcat: aaaaaaaaa: No such file or directory
6.7孕豹、排序
在了解管道的工作原理之后,就可以介紹一下sort命令了十气。它通忱常可以和uniq(去重)命令聯(lián)合,完成一些排序砸西、去重的操作叶眉。首先使用cat命令,生成如下內(nèi)容的文件芹枷。
cat > sort.txt <<EOF1 113 222 444 335 556 666 66EOF```bash接下來讓這兩個命令上臺表演一下衅疙。sort可以使用-t指定分隔符,使用-k指定要排序的列鸳慈。但是空格饱溢,是不需要做這些畫蛇添足的指定的。```bash# 根據(jù)第一列倒序排序[root@localhost ~]# cat sort.txt | sort -n -k1 -r6 666 665 554 333 222 441 11# 統(tǒng)計(jì)每一行出現(xiàn)的次數(shù)走芋,并根據(jù)出現(xiàn)次數(shù)倒序排序# 此時绩郎,行數(shù)由7變成了6[root@localhost ~]# cat sort.txt | sort | uniq -c | sort -n -k1 -r2 6 661 5 551 4 331 3 221 2 441 1 11
注意:uniq命令潘鲫,一般用在已經(jīng)經(jīng)過排序的結(jié)果集上。所以肋杖,很多情況需要首先使用sort命令進(jìn)行排序后溉仑,再使用uniq命令。新手經(jīng)常會忘記第一步状植,造成命令不能正常運(yùn)行浊竟。
6.8、小練習(xí)
本部分津畸,我們從文件的屬性開始說起振定,了解了幾個對文件操作的常用命令。并順便介紹了管道的概念洼畅。下面吩案,我們來練習(xí)一下。
找到系統(tǒng)中所有的grub.cfg
文件帝簇,并輸出它的行數(shù)徘郭。
分析:首先需要使用find命令,找到這些文件丧肴。然后使用xargs逐行處理残揉。最后,使用wc命令芋浮,統(tǒng)計(jì)確切的行數(shù)抱环。
[root@localhost grub2]# find / | grep grub.cfg | xargs wc -l141 /boot/grub2/grub.cfg
輸出系統(tǒng)的group列表
cat /etc/group | awk -F ':' '{print $1}'
下面這個命令輸出nginx日志的ip和每個ip的pv,pv最高的前10
# 2019-06-26T10:01:57+08:00|nginx001.server.ops.pro.dc|100.116.222.80|10.31.150.232:41021|0.014|0.011|0.000|200|200|273|-|/visit|sign=91CD1988CE8B313B8A0454A4BBE930DF|-|-|http|POST|112.4.238.213awk -F"|" '{print $3}' access.log | sort | uniq -c | sort -nk1 -r | head -n10
6.9纸巷、思考&擴(kuò)展
1镇草、Linux的終端,是如何實(shí)現(xiàn)彩色的文字的瘤旨?我要如何輸出一個綠色的Hello World
?
2梯啤、軟鏈接與硬鏈接有什么區(qū)別?
3存哲、了解幾個偏門但又不是非常偏的命令因宇。
-
cut
有了awk,幾乎不怎么會用cut了 - tr
- col
- paste
- join
- split
7. 正則和高級用法
你可能遇到一些棘手的問題祟偷,通過搜索得到想要的結(jié)果察滑,但下次還是要通過搜索解決問題,這種低效的手段不是我們所想要的修肠。典型的就是一個線上運(yùn)維工程師贺辰,當(dāng)問題來臨時,不會給你留太多的現(xiàn)場學(xué)習(xí)
時間。
為了達(dá)到更高效的訓(xùn)練魂爪,我們要做兩件事情:第一先舷,總結(jié)歸納;第二滓侍,觸類旁通蒋川。Linux的命令也是如此,一個問題撩笆,通常會有多種解決方式捺球,要通過變化找出其中的共性。
這涉及到一些設(shè)計(jì)者對于規(guī)范約定俗成的遵守夕冲。一般的氮兵,你只需要掌握一小部分命令,然后對大批命令達(dá)到了解的程度歹鱼,就可以在命令行的世界里游刃有余泣栈。舉個例子,你知道ls
是列出文件目錄弥姻,你就會聯(lián)想到lscpu
是列出cpu信息南片;lsmem
是列出內(nèi)存信息;lsblk
是磁盤信息等。這種共性很多庭敦,比如top
系列疼进,stat
系列。
7.1秧廉、輔助信息
7.1.1伞广、Linux文件格式
在Linux上工作,是非常非常排斥二進(jìn)制這種格式的疼电,幾乎什么都是可以讀寫的文本內(nèi)容嚼锄。大多數(shù)命令生成的結(jié)果,也都是文本文件蔽豺。這些文件有一些特點(diǎn)灾票,通常列與列都是通過空格或者<TAB>
鍵分隔的。比如下面lsmem
的結(jié)果茫虽,這種有規(guī)律的,有章可循的文件既们,是非常容易被處理的濒析。
[root@localhost ~]# lsmem RANGE SIZE STATE REMOVABLE BLOCK0x0000000000000000-0x0000000007ffffff 128M online no 00x0000000008000000-0x000000000fffffff 128M online yes 10x0000000010000000-0x0000000017ffffff 128M online no 20x0000000018000000-0x0000000027ffffff 256M online yes 3-40x0000000028000000-0x000000004fffffff 640M online no 5-90x0000000050000000-0x000000005fffffff 256M online yes 10-110x0000000060000000-0x000000007fffffff 512M online no 12-15Memory block size: 128MTotal online memory: 2GTotal offline memory: 0B
有一大批針對于行操作的命令,同樣有一批針對于列操作的命令啥纸。然后号杏,有兩個集大成者,叫做sed
、awk
盾致。由于這兩個命令的內(nèi)容非常多主经,我們將其列為單獨(dú)的章節(jié)。
7.1.2庭惜、命令記不住怎么辦罩驻?
通常linux命令都十分簡單,但是有些還是有些復(fù)雜度的护赊。比如find
惠遏,ps
這種命令,如果要照顧到所有的場合骏啰,可能需要非常巨大的篇幅节吮。但是,萬一用到這種偏門的場合怎么辦判耕?
全面了解一下是非常有必要的透绩,以便在使用的時候能夠喚起記憶中最淺顯的印象。然后剩下的壁熄,就可以交給類似于man
的這種命令了帚豪。Linux上的每一個命令,都會有配套的幫助文件请毛,這遠(yuǎn)比網(wǎng)絡(luò)上那些轉(zhuǎn)來轉(zhuǎn)去的信息志鞍,正確的多。
正式介紹一下下面的兩個命令:
-
man
用來顯示某個命令的文檔信息方仿。比如:man ls
-
info
你可以認(rèn)為和man是一樣的固棚,雖然有一些能夠互補(bǔ)的內(nèi)容。它們會在內(nèi)容中進(jìn)行提示的 -
--help
很多命令通過參數(shù)--help
提供非常簡短的幫助信息仙蚜。這通常是最有用最快捷的用例展示此洲。如果你根本就記不住一個非常拗口的單詞,那就找找這些地方吧
注意:這些幫助信息委粉,僅集中在命令的作用域本身呜师。對于它的組合使用場景,并沒有過多信息贾节。也就是說汁汗,它教會了你怎么用,但并沒有告訴你用它能夠來做什么栗涂。
這些幫助命令知牌,一般會通過高亮關(guān)鍵字,增加閱讀的體驗(yàn)。但我們可以更近一步,把幫助文件變成彩色的。在root用戶下融求,執(zhí)行下面的命令扁藕。然后沮峡,重新登錄虛擬機(jī)。
cat >> ~/.bashrc <<EOFfunction man(){ env \\ LESS_TERMCAP_mb=\$(printf "\e[1;31m") \\ LESS_TERMCAP_md=\$(printf "\e[1;31m") \\ LESS_TERMCAP_me=\$(printf "\e[0m") \\ LESS_TERMCAP_se=\$(printf "\e[0m") \\ LESS_TERMCAP_so=\$(printf "\e[1;44;33m") \\ LESS_TERMCAP_ue=\$(printf "\e[0m") \\ LESS_TERMCAP_us=\$(printf "\e[1;32m") \\ man "\$@"}EOF
再次執(zhí)行man命令亿柑,就可以看到彩色的信息了邢疙。
7.1.3、TAB補(bǔ)全
現(xiàn)在橄杨,在終端里秘症,輸入ca
,然后快速按2次<TAB>
鍵盤式矫,命令行會進(jìn)入補(bǔ)全模式乡摹,顯示以ca打頭的所有命令。
[root@localhost ~]# cacacertdir_rehash cache_dump cache_repair cache_writeback ca-legacy capsh case catchsegvcache_check cache_metadata_size cache_restore cal caller captoinfo cat catman
如果你對某個命令采转,只有模糊的印象聪廉,只記得前面的幾個字母,這個功能是極好的故慈,命令范圍會一步步縮減板熊。
7.2、正則表達(dá)式
為了開始下面的內(nèi)容察绷,我們首先介紹一下正則表達(dá)式干签。在前面的一些命令中,也可以使用這些正則表達(dá)式拆撼,比如less容劳、grep等。
有些書籍闸度,能夠把正則表達(dá)式寫成一本書竭贩,我們這里僅作簡單的介紹,但足夠用了莺禁。一般的留量,正則表達(dá)式能用在匹配上,還能夠把匹配的內(nèi)容拿來做二次利用哟冬。關(guān)于后者楼熄,我們在sed
命令中介紹。
標(biāo)志 | 意義 | |
---|---|---|
^ |
行首 | |
$ |
行尾 | |
. |
任意單個字符 | |
* |
匹配0個或者多個前面的字符 | |
+ |
1個或者多個匹配 | |
? |
0個或者1個匹配 | |
{m} |
前面的匹配重復(fù)m次 | |
{m,n} |
前面的匹配重復(fù)m到n次 | |
[] |
匹配一個指定范圍內(nèi)的字符 | |
[^] |
匹配指定范圍外的任意單個字符 | |
\ |
轉(zhuǎn)義字符 | |
[0-9] |
匹配括號中的任何一個字符,or的作用 | |
` | ` | or浩峡,或者 |
\b |
匹配一個單詞孝赫。比如\blucky\b 只匹配單詞lucky |
使用下面的命令創(chuàng)建一個文件,我們練習(xí)一下grep命令加上E
參數(shù)后的正則表現(xiàn)红符。
cat > 996 <<EOF996: 996 is a funcking thing . which make woman as man , man as ass .we all on the bus , bus bus on the way . 996way to icu. icuuuuuu......The greedy green boss rides on the pity programmerEOF
在終端執(zhí)行下面命令,注意高亮的部分即為匹配到的字符串。
# 匹配996開頭的行[root@localhost ~]# cat 996 | grep -E ^996996: 996 is a funcking thing . which make woman as man , man as ass .# 匹配996結(jié)尾的行[root@localhost ~]# cat 996 | grep -E 996$we all on the bus , bus bus on the way . 996# 匹配到icu和icuuuuuu[root@localhost ~]# cat 996 | grep -E icu+way to icu. icuuuuuu......# 再次匹配到996[root@localhost ~]# cat 996 | grep -E [0-9]996: 996 is a funcking thing . which make woman as man , man as ass .we all on the bus , bus bus on the way . 996[root@localhost ~]# cat 996 | grep -E ^[\^0-9]we all on the bus , bus bus on the way . 996way to icu. icuuuuuu......The greedy green boss rides on the pity programmer# 匹配所有不包含996的行预侯,良心命令致开,淚奔[root@localhost ~]# cat 996 | grep -E -v [0-9]{3}way to icu. icuuuuuu......The greedy green boss rides on the pity programmer# 匹配boss和icu[root@localhost ~]# cat 996 | grep -E boss\|icuway to icu. icuuuuuu......The greedy green boss rides on the pity programmer# 匹配所有行[root@localhost ~]# cat 996 | grep -E .996: 996 is a funcking thing . which make woman as man , man as ass .we all on the bus , bus bus on the way . 996way to icu. icuuuuuu......The greedy green boss rides on the pity programmer
正則表達(dá)式非常的重要,在一些sed腳本中萎馅,awk腳本中双戳,甚至是vim編輯器中,都會簡化你的操作糜芳。以上內(nèi)容應(yīng)該熟記飒货,達(dá)到不需要查找文檔的地步。
下面有6個小問題峭竣,可以思考一下塘辅。
1、回過頭去皆撩,執(zhí)行一下man cat
扣墩,是否發(fā)現(xiàn)了一個叫做tac
的命令?它是干什么的扛吞?
2呻惕、上面提到的stat
系列,你能想象iostat
大體是干什么用的么滥比?
3亚脆、grep -v
是什么意思?
4盲泛、了解一下和mv非常像的rename
命令來批量修改文件濒持,看能否使用上面的正則。
5查乒、有些命令如果拼寫錯誤弥喉,如何快速修正?靠搜索么玛迄?了解一下fuck
命令由境。我沒有說錯。
6蓖议、下面哪種寫法表示如果cmd1成功執(zhí)行虏杰,則執(zhí)行cmd2命令?
- A. cmd1&&cmd2
- B. cmd1|cmd2
- C. cmd1;cmd2
- D. cmd1||cmd2
8. Linux下的壓縮
壓縮勒虾,是一件非常神奇的事情纺阔。
很久很久之前,就接觸過一些64KB大小的電影修然,你花半小時都看不完笛钝。事實(shí)上质况,這些動畫的真實(shí)容量是15GB,Warez組織把它壓縮了25萬倍玻靡。
你要是Windows系統(tǒng)结榄,可以在這里下載體驗(yàn)一下。但我們現(xiàn)在講的是Linux囤捻,很打臉是不是臼朗?
鏈接: https://pan.baidu.com/s/12YJQ4jsbtRr7RxoLpARTyQ 提取碼: r7sp
壓縮是件神奇的事。它能大能小蝎土,能伸能縮视哑,在現(xiàn)實(shí)中很難找到這樣的東西。
為了減小傳輸文件的大小誊涯,或者為了傳輸方便挡毅,一般都會開啟壓縮。linux下常見的壓縮文件有tar醋拧、bzip2慷嗜、zip、rar等丹壕,7z這種用的相對較少庆械。壓縮之后的文件,非常適合在網(wǎng)絡(luò)環(huán)境上傳輸菌赖。甚至缭乘,你可以認(rèn)為iso文件為一種特殊的壓縮方式。
.tar
使用tar命令壓縮或解壓.bz2
使用bzip2命令操作.gz
使用gzip命令操作.zip
使用unzip命令解壓.rar
使用unrar命令解壓.Z
使用compress,uncompress
準(zhǔn)備工作:使用下面的命令琉用,復(fù)制1000個文件堕绩。
cd ~mkdir filescd filesseq 1000 | xargs -I {} cp /etc/group {}
使用ls,就可以看到我們剛才創(chuàng)建的1000個文件邑时。接下來奴紧,我們使用壓縮命令將它打包成一個。
# 查看1000個文件的總大小[root@localhost files]# du -h .4.0M .# 切換到root目錄cd ~# 使用tar進(jìn)行壓縮晶丘,壓縮后的文件不到1MB[root@localhost ~]# tar cvf files.tar files[root@localhost ~]# du -h files.tar1012K files.tar# 使用gizp提高壓縮比黍氮,壓縮后的文件只有12KB[root@localhost ~]# gzip files.tar[root@localhost ~]# du -h files.tar.gz12K files.tar.gz
tar和gzip一般是聯(lián)合使用的。tar命令提供了一種特殊的功能浅浮,就是可以在打包解包的同時調(diào)用其他的壓縮程序沫浆,比如:gzip,bzip2等滚秩。
下面的命令专执,與上面執(zhí)行兩次命令后是等同的。所以郁油,一般使用下面的方式進(jìn)行操作本股。
[root@localhost ~]# tar cvfz files2.tar.gz files[root@localhost ~]# du -h files2.tar.gz12K files2.tar.gz
與之對應(yīng)的攀痊,就是解壓操作。我們只需要改動命令行中的一個字母即可:c
->x
痊末。但其實(shí)蚕苇,參數(shù)v
和z
也是可以省略的。
[root@localhost ~]# tar xvfz files2.tar.gz
我們更加常用的方式凿叠,是加上參數(shù)C
,指定一個要解壓的目錄嚼吞。比如下面的命令盒件,把壓縮內(nèi)容解壓到/opt目錄中。
[root@localhost ~]# tar xvfz files2.tar.gz -C /opt/
那如果我僅僅想要看下壓縮文件中包含哪些文件呢舱禽?這就要使用參數(shù)t
炒刁。
-
c
壓縮 -
x
解壓 -
t
查看列表
安裝其他的
我們來看一下常用的zip和rar解壓程序有沒有安裝。
[root@localhost ~]# which unzip/usr/bin/which: no unzip in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)[root@localhost ~]# which unrar/usr/bin/which: no unrar in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
所以誊稚,我們的系統(tǒng)并沒有安裝這兩個應(yīng)用翔始。那我就使用centos的包管理工具yum
安裝一下。java中的jar命令也是與zip類似的里伯,可自行探索城瞎。
[root@localhost ~]# yum install -y zip unzip rar unrarLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.tuna.tsinghua.edu.cn * updates: mirrors.aliyun.com...
rar不能安裝成功,所以rar文件并不能被解壓疾瓮。沒關(guān)系脖镀,我們在后面的章節(jié)把它安裝上。
現(xiàn)在狼电,你會在Linux安裝tomcat了么蜒灰?
接下來,我們思考一下:
1肩碟、 經(jīng)過zip壓縮的文件强窖,再使用gzip壓縮,容量還會減少么削祈?
為了驗(yàn)證這個過程翅溺,可以使用dd
命令,生成一個69MB
大小的隨機(jī)文件岩瘦。dd
命令也是個神奇哦未巫。
[root@localhost ~]# dd if=/dev/urandom of=test bs=1M count=6969+0 records in69+0 records out72351744 bytes (72 MB) copied, 0.446161 s, 162 MB/s[root@localhost ~]# du -h test69M test
所以,回到文章最上面启昧,我們可以隨機(jī)生成一批文件叙凡,讓壓縮效果更有意義一點(diǎn)。
seq 1000 | xargs -i dd if=/dev/zero of={}.xjj bs=1k count=256
2密末、如果已經(jīng)有了文件握爷,tar命令是如何做到強(qiáng)制覆蓋的跛璧?
9. Linux的權(quán)限體系
我們在最最最上面,剛接觸命令行的時候新啼,就使用chmod
命令追城,給普通文本文件,賦予了執(zhí)行權(quán)限燥撞。本小節(jié)將看一下用戶權(quán)限
和文件權(quán)限
這兩個息息相關(guān)的概念座柱,
9.1、添加用戶
到現(xiàn)在為止物舒,我們的系統(tǒng)中色洞,還孤零零的只有這一個用戶,是時候?qū)W學(xué)女媧冠胯,捏幾個小泥人了火诸。
首先創(chuàng)建兩個用戶:張三(zhang3)、李四(li4)荠察。
[root@localhost ~]# useradd zhang3
查看下面命令的三個輸出結(jié)果置蜀。
# 系統(tǒng)中多了一個叫做zhang3的組,group文件保存了系統(tǒng)的組信息[root@localhost ~]# tail -n1 /etc/groupzhang3:x:1000:# 系統(tǒng)中多了一個叫做zhang3的用戶悉盆,shadow文件保存了它們的密碼盯荤。很多安全滲透就是為了拿到它進(jìn)行暴力破解[root@localhost ~]# tail -n1 /etc/shadowzhang3:!!:18207:0:99999:7:::# home目錄中,多了一個叫做zhang3的目錄[root@localhost ~]# ll /home --full-timetotal 0drwx------. 2 zhang3 zhang3 83 2019-11-06 22:09:33.357165082 -0500 zhang3
接下來舀瓢,給我們剛剛建立的用戶廷雅,使用passwd
設(shè)置一個密碼。密碼需要輸入兩次進(jìn)行確認(rèn)京髓。如果想要更改密碼航缀,可以使用chpasswd
命令。
[root@localhost ~]# passwd zhang3Changing password for user zhang3.New password:BAD PASSWORD: The password is shorter than 8 charactersRetype new password:passwd: all authentication tokens updated successfully.
那么如何刪除一個現(xiàn)有的用戶呢堰怨?這是通過userdel
命令實(shí)現(xiàn)的芥玉。加上參數(shù)f
,會在其他用戶使用系統(tǒng)的時候备图,強(qiáng)制退出灿巧。
userdel -f zhang3
9.2、文件權(quán)限說明
從上面的命令執(zhí)行結(jié)果中揽涮,我們發(fā)現(xiàn)了有兩件非常有意思的東西抠藕。添加用戶后,除了在密碼文件shadow
中增加了一些內(nèi)容蒋困,同時還在group
文件中添加了信息盾似。這涉及到用戶的兩個屬性:用戶名,組名雪标。
一個用戶只有一個名稱代號零院,但是可以有多個組溉跃。下面命令創(chuàng)建一個密碼為123的用戶li4
,并給它追加一個叫做zhang3
的組告抄∽ィ可以看到/etc/group
文件中的信息變更。
[root@localhost ~]# useradd -G zhang3 -p 123 li4[root@localhost ~]# tail -n 2 /etc/groupzhang3:x:1000:li4li4:x:1001:
好啦打洼,接下來切換到我們的文件權(quán)限上面龄糊。為了進(jìn)行下面命令的驗(yàn)證,我們首先創(chuàng)建一個名字叫confirm777.sh
的腳本文件募疮。為了讓腳本對所有用戶可見绎签,我們把它創(chuàng)建在/tmp目錄下。
cat > /tmp/confirm777.sh <<EOFecho $USERidEOF
使用ll
命令查看文件信息酝锅。
[root@localhost ~]# ll /tmp/confirm777.sh --full-time-rw-r--r--. 1 root root 13 2019-11-07 04:25:55.418254935 -0500 confirm777.sh
從ll
的命令可以看出,文件的所有者是root用戶奢方,文件所屬的組搔扁,也是root組,它的權(quán)限是rw-r--r--
蟋字。文件權(quán)限分為三部分稿蹲。
-
所有者權(quán)限
,縮寫為u
鹊奖。文件的所有者所擁有的權(quán)限苛聘。也就是root用戶的權(quán)限,是rw-
-
組用戶權(quán)限
忠聚,縮寫為g
设哗。文件所屬組內(nèi)所有用戶的權(quán)限。因?yàn)閞oot組內(nèi)只有root一個用戶两蟀,所以組用戶權(quán)限是r--
网梢。 -
其他用戶權(quán)限
,縮寫為o
赂毯。其他不相關(guān)用戶的權(quán)限战虏,比如我們剛創(chuàng)建的zhang3、li4用戶党涕,對文件的權(quán)限就是r--
烦感。 -
全部
,縮寫為a
膛堤,表示對上面三類用戶集體操作手趣。
那rw-這些東西是什么意思呢?
-
r
表示可讀權(quán)限骑祟。read回懦。 -
w
表示可寫權(quán)限气笙。write。 -
x
表示可執(zhí)行權(quán)限怯晕。execute潜圃。 -
-
權(quán)限占位符,表示沒有當(dāng)前權(quán)限舟茶。
注意:一個用戶擁有文件的w權(quán)限谭期,并不代表就可以刪除文件。w僅僅針對于文件內(nèi)容來說的吧凉。
一個文件隧出,有3類用戶,每類用戶阀捅,有3種權(quán)限胀瞪。使用最簡單的小學(xué)乘法,我們能夠得出饲鄙,一個文件的權(quán)限位凄诞,需要3x3=9
個標(biāo)志位表示。
我們的文件名稱忍级,叫做confirm777.sh帆谍,這個名字是隨便起的么?當(dāng)然不是轴咱,777
在linux代表特殊的含義汛蝙,它代表文件對所有用戶具有可讀想许、可寫么鹤、可執(zhí)行的權(quán)限闷供±榻撸可以想象愕乎,如果每個文件都有這樣的權(quán)限肩榕,系統(tǒng)將無安全可言屹电。那這一串?dāng)?shù)字是怎么來的呢骤星?可以看下面的對照表器瘪。
-
r
4
讀 -
w
2
寫 -
x
1
執(zhí)行
對以上三個屬性進(jìn)行任意組合翠储,可以得到:
-
4
r--
4+0+0 -
6
rw-
4+2+0 -
5
r-x
4+0+1 -
2
-w-
0+2+0 -
3
-wx
0+2+1 -
1
--x
0+0+1 -
7
rwx
4+2+1
9.3、文件權(quán)限更改
下面介紹三個文件權(quán)限相關(guān)的命令橡疼。一般常用的援所,就是chown和chmod。
chown
更改文件的所有者欣除。chgrp
更改文件的組住拭。chmod
更改文件權(quán)限。
接下來,我們把confirm777.sh
的所有者和組滔岳,修改成剛剛創(chuàng)建的用戶zhang3
杠娱。
cd /tmp[root@localhost tmp]# chown zhang3:zhang3 confirm777.sh[root@localhost tmp]# ll confirm777.sh-rw-r--r--. 1 zhang3 zhang3 13 Nov 7 04:25 confirm777.sh
給文件所有者增加執(zhí)行權(quán)限。然后分別切換到zhang3
谱煤,li4
用戶執(zhí)行一下摊求。
通過
su
命令,可以切換到其他用戶刘离,一般使用su -
進(jìn)行環(huán)境變量的清理室叉;而命令id
,能夠看到當(dāng)前正在執(zhí)行的用戶信息硫惕。
[root@localhost tmp]# chmod u+x confirm777.sh[root@localhost tmp]# su li4[li4@localhost tmp]$ ./confirm777.shbash: ./confirm777.sh: Permission denied[li4@localhost tmp]$ exitexit[root@localhost tmp]# su zhang3[zhang3@localhost tmp]$ ./confirm777.shrootuid=1000(zhang3) gid=1000(zhang3) groups=1000(zhang3) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
可以看到茧痕,文件所有者zhang3可以執(zhí)行文件,但不相關(guān)的li4恼除,提示沒有權(quán)限踪旷。接下來,我們驗(yàn)證用戶組相關(guān)的權(quán)限位豁辉。
# 去掉zhang3的執(zhí)行權(quán)限r(nóng)oot@localhost tmp]# chmod u-x confirm777.sh[root@localhost tmp]# ll confirm777.sh-rw-r--r--. 1 zhang3 zhang3 13 Nov 7 04:25 confirm777.sh# 增加zhang3組的執(zhí)行權(quán)限埃脏,由于li4在zhang3組里,它擁有權(quán)限[root@localhost tmp]# chmod g+x confirm777.sh[root@localhost tmp]# ll confirm777.sh-rw-r-xr--. 1 zhang3 zhang3 13 Nov 7 04:25 confirm777.sh# 切換到zhang3進(jìn)行執(zhí)行[root@localhost tmp]# su - zhang3[zhang3@localhost tmp]$ ./confirm777.shbash: ./confirm777.sh: Permission denied[zhang3@localhost tmp]$ exitexit# 切換到li4進(jìn)行執(zhí)行[root@localhost tmp]# su - li4[li4@localhost tmp]$ ./confirm777.shrootuid=1001(li4) gid=1001(li4) groups=1001(li4),1000(zhang3) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
從命令的執(zhí)行結(jié)果可以看出秋忙。這次,li4能夠執(zhí)行文件构舟,相反的灰追,zhang3卻不能。
我們使用chmod命令來修改文件權(quán)限狗超,使用的是類似于a+x
這樣的英文字母弹澎。拿第一個腳本來說,初始的權(quán)限是rw-r--r--
努咐,也就是644
苦蒿,在這種情況下,下面的兩個腳本等效渗稍。
chmod u+x confirm777.shchmod 744 confirm777.sh
可以看到佩迟,第二個命令,使用的是數(shù)字樣式的權(quán)限位竿屹,多了一步人腦轉(zhuǎn)換過程报强。這在日常的使用中,是非常不方便的拱燃。所以秉溉,使用符號法的表示方式,能夠更加直觀,非常推薦召嘶。
為了更直觀的表現(xiàn)這個過程父晶,我專門制作了一張圖。
9.4弄跌、目錄權(quán)限
這里有一個非常有意思的地方甲喝。把文件設(shè)置成可執(zhí)行,可以把普通文件變成腳本碟绑,目錄文件的可執(zhí)行權(quán)限是什么鬼俺猿?有什么意義?對文件夾來說:
-
r
表示允許讀取目錄中的文件名格仲,但不能進(jìn)入該目錄 -
w
表示允許用戶修改目錄押袍,可以創(chuàng)建、遷移凯肋、刪除谊惭、更名目錄下的文件 -
x
可以獲得目錄下文件的列表,以及進(jìn)入目錄侮东,執(zhí)行cd命令
關(guān)于r和x的區(qū)別圈盔,可以看下面的命令結(jié)果,仔細(xì)感受一下它們的區(qū)別悄雅。一般的驱敲,幾乎所有的目錄,都擁有執(zhí)行
權(quán)限宽闲,不要隨意對其進(jìn)行設(shè)置众眨。
[root@localhost tmp]# su - li4[li4@localhost ~]$ cd /tmp[li4@localhost tmp]$ mkdir nox[li4@localhost tmp]$ touch nox/{a,b,c,d}[li4@localhost tmp]$ chmod a-x nox[li4@localhost tmp]$ ls noxls: cannot access nox/a: Permission deniedls: cannot access nox/b: Permission deniedls: cannot access nox/c: Permission deniedls: cannot access nox/d: Permission denieda b c d[li4@localhost tmp]$ cat nox/acat: nox/a: Permission denied[li4@localhost tmp]$ chmod a+x nox[li4@localhost tmp]$ chmod a-r nox[li4@localhost tmp]$ ls noxls: cannot open directory nox: Permission denied
9.5、sticky bit
接下來容诬,我們介紹一個比較燒腦的粘貼位娩梨。
假如你要刪除一個文件,你可以沒有這個文件的寫權(quán)限览徒,但是你必須要擁有這個文件上級目錄的寫權(quán)限狈定。如何創(chuàng)建一個目錄,可以讓任何人些人文件习蓬,但是又不能刪除其他用戶的文件纽什?這就是stick bit的作用。粘貼位一般只用于目錄上躲叼,對文件來說并沒有什么用處稿湿。粘貼位一般使用t
表示。
我們可以看一個典型的目錄/tmp
[root@localhost tmp]# ls -dl /tmpdrwxrwxrwt. 9 root root 4096 Nov 7 06:27 /tmp
可以看到押赊,最后一位饺藤,顯示的是t包斑,而不是x,意思是普通用戶不能刪除其他用戶的文件涕俗。所有用戶在/tmp目錄中罗丰,都可以隨意創(chuàng)建文件,但是卻刪除不了其他人的文件再姑,即使文件的權(quán)限是777
萌抵。
[root@localhost tmp]# touch /tmp/stick[root@localhost tmp]# chown li4:li4 /tmp/stick[root@localhost tmp]# chmod 777 /tmp/stick[root@localhost tmp]# su - zhang3[zhang3@localhost ~]$ rm /tmp/stickrm: cannot remove ‘/tmp/stick’: Operation not permitted
我們在上面創(chuàng)建了兩個用戶zhang3和li4,并拿它們測試了chown和chmod命令元镀,最后介紹了粘貼位绍填。linux比較安全的原因,就是因?yàn)橛斜容^詳盡的權(quán)限劃分栖疑。但權(quán)限是枚雙刃劍讨永,超權(quán)用戶一個命令就可以搞垮系統(tǒng),許多隱藏的木馬遇革,通過提權(quán)運(yùn)行在不為人知的地方卿闹。
權(quán)限相關(guān)的幾個命令會經(jīng)常被使用,下面舉幾個例子萝快。
# 設(shè)置/var/lib/mysql的用戶和組為mysqlchown -R mysql:mysql /var/lib/mysql# 設(shè)置目錄可讀可寫锻霎,能夠上傳文件chmod 777 /var/www/uploads# 增加本目錄下所有sh的執(zhí)行權(quán)限chomd a+x *.sh# 變更file為可讀可寫可執(zhí)行chmod u=rwx,g=rwx,o=rwx file
下面依然是思考時間:
1、下面這個命令揪漩,執(zhí)行以后旋恼,會發(fā)生什么情況?警告:不要執(zhí)行奄容,哪怕把000改成其他數(shù)字蚌铜。
# R遍歷子目錄的意思chmod -R 000 /
2、有一天嫩海,我看到一個命令chmod u+s file
,文中并沒有介紹s
是什么意思囚痴,這是什么意思叁怪?
3、如何刪除一個用戶的組深滚?
10. 如何對磁盤進(jìn)行操作奕谭?
下面的場景非常的恐怖,對有些程序員來說可以是一場噩夢痴荐。
一大早剛剛?cè)ド习嘌屣灩觿偪辛艘话耄瑤讉€全副武裝的警察就闖進(jìn)了公司生兆。二話不說控制住了工作人員难捌,并守株待兔的等著魚兒來上班。
原因就是:公司涉嫌存儲和擴(kuò)散非法文件,需要查封所有的服務(wù)器進(jìn)行徹查根吁。
這些文件员淫,有的簡單的放在磁盤上,有的放在文件存儲服務(wù)器上击敌,有的介返,被切成了多片放在了不同的廉價機(jī)器上。
接下來會發(fā)生什么沃斤,要看技術(shù)人員的水平圣蝎,但估計(jì)結(jié)果并不會太好。
在上一小節(jié)衡瓶,我們創(chuàng)建了兩個普通用戶徘公,這兩個用戶沒什么本事,和默認(rèn)的用戶root
比起來鞍陨,它們的權(quán)限就小得多步淹。除了自己目錄下的文件,其他的诚撵,它幾乎都沒有權(quán)限去修改缭裆。
這些文件,肯定是要存在磁盤上的寿烟。對磁盤的管理澈驼,有非常多的命令,這一小節(jié)的內(nèi)容筛武,對于系統(tǒng)管理員來說缝其,經(jīng)常使用;但對于開發(fā)來說徘六,就要求比較低一些内边。因?yàn)殚_發(fā)只需要知道小電影存在什么地方了,不需要知道小電影是怎么存的待锈。
那定罪的時候漠其,運(yùn)維和程序員,到底是誰的鍋更大一些竿音?其實(shí)是個悖論和屎。運(yùn)維人員在發(fā)呆的時候,腦子里回憶起了下面的知識春瞬。
10.1.添加新硬盤
你要是一個系統(tǒng)管理員柴信,甚至是一個上了云的系統(tǒng)管理員,現(xiàn)在買了一塊aws
的擴(kuò)展盤宽气,它是不能被使用的随常。需要經(jīng)過格式化掛載以后潜沦,才能投入生產(chǎn)。
還記得在安裝系統(tǒng)的時候么线罕?其中有一步止潮,需要對虛擬機(jī)的磁盤,進(jìn)行劃分钞楼,我們直接采用默認(rèn)的方式喇闸。不過現(xiàn)在已經(jīng)改不了了,它已經(jīng)是過去式了询件。
為了模擬對磁盤的管理燃乍,我們需要首先給虛擬機(jī)新加一塊虛擬磁盤。首先宛琅,使用shutdown -h now
命令關(guān)閉機(jī)器刻蟹,進(jìn)行下面的操作。
1嘿辟、 進(jìn)入settings選項(xiàng)舆瘪,然后切換到storage,添加磁盤
2红伦、 點(diǎn)擊創(chuàng)建一塊磁盤
3英古、 選擇VDI
4、 動態(tài)擴(kuò)容昙读,用多少擴(kuò)多少
5召调、 我們創(chuàng)建一塊2GB大的,叫做disk2的磁盤
啟動機(jī)器蛮浑。遠(yuǎn)程連接192的ip唠叛,別忘了執(zhí)行dhclient
命令。
首先使用fdisk
看一下目前的磁盤狀況沮稚。
root@localhost ~]# fdisk -lDisk /dev/sda: 8589 MB, 8589934592 bytes, 16777216 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk label type: dosDisk identifier: 0x000c2410 Device Boot Start End Blocks Id System/dev/sda1 * 2048 2099199 1048576 83 Linux/dev/sda2 2099200 16777215 7339008 8e Linux LVMDisk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk /dev/mapper/centos-root: 6652 MB, 6652166144 bytes, 12992512 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk /dev/mapper/centos-swap: 859 MB, 859832320 bytes, 1679360 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytes
從命令的結(jié)果艺沼,我們看到了有兩塊磁盤。/dev/sda
和/dev/sdb
蕴掏,其中sda
已經(jīng)被分配障般,已經(jīng)被我們的文件系統(tǒng)所占用。現(xiàn)在囚似,回憶一下/dev
目錄的用途,在這個目錄下线得,存放了一些設(shè)備文件饶唤,假如我們再添加一塊磁盤,它的句柄就應(yīng)該是sdc
(sd*)贯钩。
在這整塊磁盤能夠被使用之前募狂,我們需要對它進(jìn)行三次操作办素。
- 磁盤分區(qū)
- 磁盤格式化
- 磁盤掛載
10.2.分區(qū)
對磁盤分區(qū)依然是fdisk
命令,以下命令祸穷,將進(jìn)入交互模式性穿。在交互模式中,輸入n
新建分區(qū)雷滚。由于我們的磁盤只有2GB需曾,所以只創(chuàng)建一個分區(qū)就好。根據(jù)向?qū)碓叮宦反_定向下呆万,最后,輸入w
確定寫入分區(qū)表车份,同時退出命令交互谋减。
再次執(zhí)行fdisk -l
,可以看到已經(jīng)多了一塊2gb
大小的分區(qū)扫沼。
[root@localhost ~]# fdisk /dev/sdb...[root@localhost ~]# fdisk -l... Device Boot Start End Blocks Id System/dev/sdb1 2048 4194303 2096128 83 Linux...
10.3.格式化
在命令行出爹,輸入mkfs
,然后按<TAB>
進(jìn)行補(bǔ)全缎除,將會顯示一批命令严就。
[root@localhost ~]# mkfs.mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs
這批命令,都可以對磁盤進(jìn)行格式化伴找。目前盈蛮,最常用的磁盤格式是ext4
。但我們并沒有找到windows操作系統(tǒng)的FAT
以及NTFS
等格式技矮,但它們在概念上是等同的抖誉。
下面介紹一下Linux下常用的磁盤格式。
-
btrfs
GPL授權(quán)衰倦。是為了替換ext系統(tǒng)而發(fā)起的袒炉。不熟悉,不過多評價樊零。 -
cramfs
門針對閃存設(shè)計(jì)的只讀壓縮的文件系統(tǒng)我磁,其容量上限為256M,采用zlib壓縮,很少用 -
ext2
ext的早先版本驻襟。 -
ext3
ext2的改進(jìn)夺艰。 -
ext4
使用最多。如果對其他的不熟悉沉衣,老老實(shí)實(shí)用ext4吧郁副。 -
minix
比較古老,也不常用豌习。 -
xfs
XFS 文件系統(tǒng)是擴(kuò)展文件系統(tǒng)的一個擴(kuò)展存谎,是 64 位高性能日志文件系統(tǒng)拔疚。centos7.0開始的默認(rèn)文件系統(tǒng)。
我們就錄鄉(xiāng)隨俗既荚,將磁盤給格式化成xfs稚失。
[root@localhost ~]# mkfs.xfs /dev/sdb1
注意:如果想要把磁盤格式化成
fat32
的格式,需要安裝一個軟件恰聘。
yum install dosfstools -y
10.4.掛載
最后一步句各,是使用mount
命令掛載磁盤。我們把它掛載到/data
目錄憨琳。
df
命令能夠看到系統(tǒng)的磁盤使用狀況诫钓,參數(shù)h
是human
的意思,以比較容易讀的方式展現(xiàn)信息篙螟;lsblk
則以另一個角度查看系統(tǒng)磁盤掛載情況菌湃。
[root@localhost ~]# mkdir /data[root@localhost ~]# mount /dev/sdb1 /data[root@localhost ~]# df -hFilesystem Size Used Avail Use% Mounted ondevtmpfs 908M 0 908M 0% /devtmpfs 920M 0 920M 0% /dev/shmtmpfs 920M 8.6M 911M 1% /runtmpfs 920M 0 920M 0% /sys/fs/cgroup/dev/mapper/centos-root 6.2G 1.4G 4.9G 22% //dev/sda1 1014M 149M 866M 15% /boottmpfs 184M 0 184M 0% /run/user/0/dev/sdb1 2.0G 33M 2.0G 2% /dataroot@localhost ~]# lsblk -fNAME FSTYPE LABEL UUID MOUNTPOINTsda├─sda1 xfs ac3a3ce8-6ab1-4c0b-91c8-b4e617f0dfb4 /boot└─sda2 LVM2_member 3GzmOd-TUc1-p2ZN-wT5q-ttky-to9l-PF495o ├─centos-root xfs 9f86f663-060a-4450-90f9-3005ad9c5d92 / └─centos-swap swap cf8709b0-b0ab-4d44-a23e-ad76f85efad6 [SWAP]sdb└─sdb1 xfs 0a7c861c-1a31-45b3-bf37-c72229f35704 /data
為了能夠在開機(jī)的時候加載磁盤,我們需要修改/etc/fstab
文件遍略。這種文件修改的時候一定要小心惧所,否則會造成系統(tǒng)無法啟動。
[root@localhost ~]# echo "/dev/sdb1 xfs defaults 0 0" >> /etc/fstab[root@localhost ~]# cat /etc/fstab/dev/mapper/centos-root / xfs defaults 0 0UUID=ac3a3ce8-6ab1-4c0b-91c8-b4e617f0dfb4 /boot xfs defaults 0 0/dev/mapper/centos-swap swap swap defaults 0 0/dev/sdb1 xfs defaults 0 0
10.5.交換分區(qū)
由于內(nèi)存的容量有限绪杏,現(xiàn)在的操作系統(tǒng)下愈,都會使用磁盤模擬一個虛擬內(nèi)存
區(qū)域,用于緩沖一些數(shù)據(jù)蕾久。由于磁盤的速度和內(nèi)存不可同日而語势似,通常會造成應(yīng)用程序的卡頓∩卡歸卡履因,應(yīng)用進(jìn)程卻可以因此茍延殘喘滚躯,續(xù)命闸婴。
swap
分區(qū),即交換區(qū)区宇,系統(tǒng)在物理內(nèi)存不夠時皆怕,與swap
進(jìn)行交換毅舆。即當(dāng)系統(tǒng)的物理內(nèi)存不夠用時,把硬盤中一部分空間釋放出來愈腾,以供當(dāng)前運(yùn)行的程序使用憋活。當(dāng)那些程序要運(yùn)行時,再從swap
分區(qū)中恢復(fù)保存的數(shù)據(jù)到內(nèi)存中虱黄。
現(xiàn)代互聯(lián)網(wǎng)公司悦即,一般對接口的響應(yīng)時間有比較高的要求,swap
分區(qū)一般是禁用的。關(guān)于swap
盐欺,有下面幾個相關(guān)的命令。
# 制作交換分區(qū)[root@localhost ~]# mkswap /dev/sdb1# 禁用所有交換分區(qū)[root@localhost ~]# swapoff -a# 啟用交換分區(qū)[root@localhost ~]# swapon
10.6 使用dd命令進(jìn)行備份
下面的命令仅醇,將直接備份磁盤A到磁盤B冗美。
# dd if=/dev/sda of=/dev/sdb
在上面的命令中,if
代表輸入的文件析二,of
代表輸出的文件粉洼。根據(jù)Linux下一切皆文件的原理,這里的文件指的就是設(shè)備叶摄。
dd
命令還可以將整個磁盤打包成一個鏡像文件属韧。比如下面的命令。
# dd if=/dev/hda of=~/hdadisk.img
當(dāng)然蛤吓,恢復(fù)磁盤的時候宵喂,也是相當(dāng)簡單的,我們只需要逆向操作就可以了会傲。
# dd if=hdadisk.img of=/dev/hda
End
這篇文章有6萬字锅棕,經(jīng)歷了多個版本的整理,有小伙伴已經(jīng)拿著它作為了公司的培訓(xùn)資料淌山。到現(xiàn)在為止裸燎,你已經(jīng)對Linux的命令行有了比較客觀的了解。但我這里還有很多可以讓你更上一層樓的文章泼疑,比如vim德绿、sed、awk的使用退渗。下面是幾個擴(kuò)展閱讀移稳,同樣采用xjjdog專用的命令行三段解析法,希望對你有所幫助氓辣。