前言
Linux系統(tǒng)的基本操作,對(duì)于大多數(shù)計(jì)算機(jī)類相關(guān)學(xué)生或者相關(guān)從業(yè)人員都很重要锦庸,本文以樹莓派的Linux系統(tǒng)為實(shí)例机蔗,從基礎(chǔ)出發(fā),詳細(xì)介紹Linux系統(tǒng)中最基礎(chǔ)的操作甘萧。
什么是Linux
這里就不搬概念了萝嘁,Linux本質(zhì)上和Window一樣都是運(yùn)行在計(jì)算機(jī)上的操作系統(tǒng),但是有一個(gè)核心區(qū)別就是Linux是開源的幔嗦。
運(yùn)行在桌面端的Linux像Windows一樣有圖形化界面酿愧,我們可以用鼠標(biāo)操作沥潭,但是大多數(shù)Linux系統(tǒng)運(yùn)行在服務(wù)器上沒有圖形化界面邀泉,那我們?cè)趺磮?zhí)行呢?使用Shell工具钝鸽,它就像一個(gè)外部用戶與Linux內(nèi)核溝通的橋梁汇恤,例如復(fù)制粘貼重命名文件,這些都是通過Linux命令來執(zhí)行的拔恰,我們所要學(xué)習(xí)的就是要理解這些命令并使用這些命令因谎。
如何使用Shell工具
知道了Linux基本概念后,我們?cè)撊绾问褂肧hell工具來登錄遠(yuǎn)程Linux系統(tǒng)呢颜懊?
- 在Windows系統(tǒng)上
如果你的電腦上的操作系統(tǒng)是Windows财岔,可以使用putty工具或者Xshell(具體按照方法可自行搜索)登錄Linux系統(tǒng)风皿,在指定界面按照提示輸入Linux系統(tǒng)的IP地址、用戶名匠璧、登錄密碼即可登錄桐款;
- 在其他系統(tǒng)上
如果你的電腦上的系統(tǒng)是macOS或者Linux類系統(tǒng)(Ubuntu、CentOS夷恍、Kylin魔眨、Raspberry Pi OS)那么直接打開終端工具輸入命令:
ssh 用戶名@IP地址
再按提示輸入登錄密碼就可以登錄了。
如果是單純的學(xué)習(xí)Linux基礎(chǔ)知識(shí)也可以直接打開終端就可以了酿雪!
使用Xshell連接Linux服務(wù)器
這里以Windows上的終端工具Xshell登錄樹莓派的Linux系統(tǒng)為例遏暴,登錄成功后,系統(tǒng)會(huì)顯示上一次登錄的時(shí)間指黎。
-
pi
表示用戶名(樹莓派的用戶名默認(rèn)為pi) -
raspberrypi4b
表示這臺(tái)Linux系統(tǒng)的主機(jī)名朋凉,可以自定義; -
$
表示當(dāng)前用戶所具有的權(quán)限(root用戶為#
,普通用戶為$
) -
~
表示當(dāng)前所在目錄為家目錄
使用命令行工具通用的快捷鍵
在學(xué)習(xí)Linux命令之前醋安,有一些快捷鍵是必須要掌握的侥啤,它能大大提高你的Linux命令使用效率。
-
↑↓
:通過↑↓
鍵來選擇過往執(zhí)行過的Linux命令茬故; -
Tab
:命令或者參數(shù)僅需輸入前面幾位就可以使用Tab
鍵來補(bǔ)全盖灸; -
Ctrl + R
: 歷史命令檢索,使用Ctrl + R
用于查找使用過的命令磺芭。 - 顯示所有執(zhí)行過的命令赁炎,使用
history
可以顯示所有命令執(zhí)行歷史,使用history 數(shù)字
可以查看最近n次使用過的命令钾腺;使用徙垫!+編號(hào)
可以直接執(zhí)行歷史命令中對(duì)應(yīng)編號(hào)的命令。 -
Ctrl + L
:清除屏幕并將當(dāng)前行移動(dòng)值頁面頂部放棒; -
Ctrl + C
:終止當(dāng)前終端中正在執(zhí)行的命令 -
Ctrl + U
:從光標(biāo)位置剪切至行首 -
Ctrl + K
:從光標(biāo)位置剪切至行尾 -
Ctrl + W
:剪切光標(biāo)左側(cè)的一個(gè)單詞 -
Ctrl + Y
:粘貼 -
Ctrl + A
:光標(biāo)調(diào)到命令行的開頭 -
Ctrl + E
:光標(biāo)跳到命令行結(jié)尾 -
Ctrl + D
:關(guān)閉當(dāng)前Shell會(huì)話
文件和目錄
Linux的文件目錄系統(tǒng)
Linux不像Windows分了C盤和D盤姻报,它只有一個(gè)根目錄,根目錄有若干文件夾间螟,每一個(gè)文件夾都有它特定的用途:
└── / // 根目錄
├── bin // binary的縮寫吴旋,存放系統(tǒng)命令,bin目錄里面包含了會(huì)被所有用戶使用的可執(zhí)行程序
├── boot // 系統(tǒng)啟動(dòng)目錄厢破,保存與系統(tǒng)啟動(dòng)相關(guān)的文件荣瑟,包含內(nèi)核文件、啟動(dòng)引導(dǎo)程序
├── dev // device的縮寫摩泪,設(shè)備文件保存位置
├── etc // 系統(tǒng)配置文件保存位置笆焰,系統(tǒng)中采用默認(rèn)安裝方式的服務(wù)配置文件都會(huì)保存在這
├── home // 用戶的家目錄,Linux中每一個(gè)用戶在home目錄下都有一個(gè)自己用戶名的家目錄
├── lib // 系統(tǒng)調(diào)用的函數(shù)庫保存位置
├── media // 媒體见坑,掛載目錄嚷掠,建議掛載一些媒體設(shè)備
├── mnt // mount表示掛載目錄捏检,一般表示臨時(shí)掛載一些裝置(U盤、SD卡不皆、移動(dòng)硬盤)
├── opt // 第三方安裝軟件保存的位置未檩,手工安裝源碼可以安裝在這里,/usr/local/也可以作為安裝目錄
├── proc // 虛擬文件系統(tǒng)粟焊,該目錄保存在內(nèi)存中冤狡,保存系統(tǒng)的內(nèi)核、進(jìn)程项棠、外部設(shè)備的網(wǎng)絡(luò)狀態(tài)等
├── root // 超級(jí)用戶root的家目錄
├── sbin // system binary表示系統(tǒng)二進(jìn)制文件悲雳,系統(tǒng)環(huán)境設(shè)置相關(guān)的目錄,包含系統(tǒng)級(jí)重要的可執(zhí)行程序
├── srv // service 表示服務(wù)香追,包含一些網(wǎng)絡(luò)啟動(dòng)后所需要取用的數(shù)據(jù)
├── sys // 虛擬文件系統(tǒng)合瓢,該目錄的數(shù)據(jù)都保存在內(nèi)存中,保存與內(nèi)核相關(guān)的信息
├── tmp // 臨時(shí)目錄透典,系統(tǒng)存放臨時(shí)文件的目錄
├── usr // Unix Software resource 表示Unix系統(tǒng)軟件資源晴楔,系統(tǒng)默認(rèn)軟件都安裝在這
├── var // variable表示動(dòng)態(tài)的,包含程序的數(shù)據(jù)比如log文件
└── lost+found // 當(dāng)系統(tǒng)以外崩潰或者關(guān)機(jī)時(shí)峭咒,產(chǎn)生的文件碎片就存在這里税弃,是根分區(qū)的備份恢復(fù)目錄
瀏覽和切換目錄
Windows有圖形界面,瀏覽和切換目錄可以直接在我的電腦里點(diǎn)擊鼠標(biāo)凑队,而Linux如何在命令行交互界面中瀏覽文件目錄呢则果?
ls
列出文件和目錄(Linux中最常用的命令之一)。
【常用參數(shù)】
-
-a
顯示所有隱藏的文件和目錄 -
-l
顯示詳細(xì)的文件信息 -
-t
按文件最近一次修改的時(shí)間排序 -
-i
顯示文件的inode標(biāo)識(shí)
cd
表示切換目錄
【常用寫法】
-
cd /
表示跳轉(zhuǎn)到根目錄下 -
cd ~
表示跳轉(zhuǎn)到家目錄下 -
cd ..
表示跳轉(zhuǎn)到上級(jí)目錄下 -
cd pi
表示跳轉(zhuǎn)到當(dāng)前目錄下的相對(duì)路徑(當(dāng)前目錄下必須要有這個(gè)文件夾)漩氨,通常搭配ls
命令一起使用西壮; -
cd /home/pi
后面加上絕對(duì)路徑(包含根目錄到當(dāng)前目錄的路徑),表示可以跳轉(zhuǎn)到該絕對(duì)路徑下 -
cd
不添加任何參數(shù)也表示跳轉(zhuǎn)到當(dāng)前用戶的家目錄下
pwd
顯示當(dāng)前目錄的路徑(顯示從根目錄開始到當(dāng)前目錄的絕對(duì)路徑)
which
查看Linux中某個(gè)可執(zhí)行程序的位置
pi@raspberrypi4b:/home $ which python3
/usr/bin/python3
du
列舉出當(dāng)前目錄的文件大小信息
-
-h
表示以方便閱讀的形式展現(xiàn)輸出結(jié)果叫惊,如果是文件大小就會(huì)顯示具體的K款青、M、G -
-a
表示同時(shí)列出目錄下所有文件的大小信息
cat
一次性查看文件的所有內(nèi)容并將其輸出到終端中來霍狰,適合查看內(nèi)容不多的文本文件
pi@raspberrypi4b:~/swift $ cat hello.txt
hello raspiberry 4b !
less
分頁顯示文本內(nèi)容抡草,適合查看內(nèi)容較多的文本文件
【快捷指令】
-
空格鍵
下一頁 -
b鍵
上一頁 -
回車鍵
下一行 -
y鍵
上一行 -
d鍵
前進(jìn)半頁 -
u鍵
后退半頁 -
q鍵
停止讀取 -
=鍵
顯示當(dāng)前內(nèi)容在文本文件中第幾頁第幾號(hào)位置以及內(nèi)容所占百分比 -
/鍵
進(jìn)入搜索模式,按n鍵跳轉(zhuǎn)到下一個(gè)搜索到蚓耽,按N鍵跳轉(zhuǎn)到上一個(gè)搜索點(diǎn)
head和tail
顯示文件的開頭或者末尾幾行
默認(rèn)顯示10行渠牲,可以添加參數(shù)n指定顯示n行文本內(nèi)容旋炒,tail還有一個(gè)重要的用處就是查看log日志文件步悠,可以實(shí)時(shí)查看日志文件結(jié)尾的更新情況。使用參數(shù)-f
可以每隔一秒查看文件是否有更新瘫镇,也可以使用參數(shù)-s
指定間隔時(shí)間查看文本內(nèi)容是否更新
tail -f -s 3 access.log
touch
創(chuàng)建一個(gè)文件
touch hello.txt
如果指定的文件在當(dāng)前文件夾中不存在鼎兽,則直接創(chuàng)建一個(gè)空白的新文件答姥;
如果想要一次性創(chuàng)建多個(gè)文件,可以使用命令:
touch file1.txt file2.txt file3.txt
mkdir
創(chuàng)建一個(gè)目錄谚咬,類似于Windows中新建一個(gè)指定名稱的文件夾鹦付;
【常用參數(shù)】
-
-p
遞歸創(chuàng)建目錄結(jié)構(gòu)
mkdir -p one/two/three
文本編輯
在Linux系統(tǒng)的命令行中如果需要對(duì)文本進(jìn)行編輯,主要有兩個(gè)應(yīng)用nano和vim择卦,其中vim是vi的增強(qiáng)版本敲长。這里主要介紹一下vim的基本使用。
vim
【常用寫法】
vim hello.txt # 當(dāng)前目錄下有hello.txt就直接編輯秉继,若沒有則新建一個(gè)該名稱的空白文件
vim打開文本時(shí)祈噪,默認(rèn)啟動(dòng)正常模式(只能跳轉(zhuǎn)光標(biāo),不可編輯文本)尚辑,需要輸入鍵盤i
鍵才會(huì)啟動(dòng)編輯模式辑鲤。編輯好文件后,如果想保存輸入:
進(jìn)入命令模式杠茬,此時(shí)輸入的命令顯示在控制臺(tái)最后一行月褥。wq
表示保存退出,按回車執(zhí)行操作瓢喉。如果不想保存文本宁赤,q!
表示不保存退出。
【注意事項(xiàng)】
vim文本編輯器對(duì)于新手來說栓票,使用不太習(xí)慣礁击,但是如果熟練使用vim編輯器后,該工具能非常有效的提高工作效率逗载。
解壓縮
在Linux系統(tǒng)中哆窿,將多個(gè)文件壓縮成一個(gè)壓縮包的過程,主要分成兩部分:
第一步:將多個(gè)文件打包成一個(gè)tar包
第二步:將tar包壓縮成壓縮文件厉斟。
tar
tar的主要用途是將文件夾或者多個(gè)文件創(chuàng)建成一個(gè)tar包(歸檔)
【常用寫法】
tar -czvf xiaoyu.tar.gz xiaoyu/ # 將xiaoyu文件夾歸檔并壓縮
tar -xzvf xiaoyu.tar.gz # 將壓縮包xiaoyu.tar.gz解壓
【參數(shù)解讀】
-
-c
代表創(chuàng)建打包 -
-x
代表解包 -
-z
代表處理的是gzip
壓縮包 -
-v
代表解壓壓縮過程可見 -
-f
代表結(jié)果輸出文件
zip/unzip
如果需要在Linux中處理zip
壓縮包挚躯,可以使用unzip
解壓,zip
進(jìn)行壓縮擦秽。
【常用寫法】
unzip xiaoyu.zip # 解壓zip壓縮包
unzip -l xiaoyu.zip # 只查看內(nèi)容码荔,不解壓
zip xiaoyu.zip xiaoyu/ # 將xiaoyu文件夾壓縮為xiaoyu.zip
文件基本操作
cp
拷貝文件和目錄
【常用寫法】
-
cp file1 file1_copy
在當(dāng)前文件夾下創(chuàng)建一份file1的副本; -
cp file2 dir1
將文件file2復(fù)制一份到dir1目錄下感挥; -
cp file3 dir2/file3_copy
將文件file3復(fù)制一份到dir2目錄下缩搅,并命名為file3_copy; -
cp *.java dir3
將當(dāng)前文件夾下的所有Java文件復(fù)制到dir3目錄下触幼。
rm
刪除文件或目錄
【常用參數(shù)】
-
-r
遞歸刪除 -
-i
刪除前給出提示信息 -
-f
強(qiáng)制刪除
【常用寫法】
-
rm file1
刪除當(dāng)前文件夾下的file1文件 -
rm -r dir1
刪除當(dāng)前文件夾下dir1文件夾(文件夾必須使用遞歸方式刪除) -
rm *.txt
刪除當(dāng)前文件夾下的所有txt文件
sort
sort可以快速對(duì)文本文件的行進(jìn)行排序
【常用寫法】
-
sort city.txt
可以對(duì)city.txt中的每一行按首字母順序輸出到屏幕
【案例講解】
我們創(chuàng)建一個(gè)文本文件city.txt
,寫入以下內(nèi)容:
Guangzhou
Shengzhen
Anhui
Wuhu
Beijing
Zhengzhou
Xiamenn
執(zhí)行sort city.txt
命令后系統(tǒng)會(huì)輸出:
【常用參數(shù)】
-
-o
將排序后的結(jié)果寫入新文件sort -o city_sorted.txt city.txt
-
-r
倒序排序 -
-R
隨機(jī)排序 -
-n
以每一行開頭的數(shù)字大小為順序進(jìn)行排序
uniq
uniq命令用于刪除文本文件中的重復(fù)內(nèi)容
【常用寫法】
-
uniq city.txt
用于去除city.txt文本文件中的重復(fù)行數(shù)硼瓣,并輸出到屏幕 -
uniq city.txt city_uniq.txt
去重后將結(jié)果輸出到city_uniq.txt中;
【常用參數(shù)】
-
-c
統(tǒng)計(jì)重復(fù)的行數(shù) -
-d
只顯示重復(fù)的行數(shù)
【注意事項(xiàng)】
uniq只能去除文本文件中連續(xù)重復(fù)的行數(shù)
scp
scp是secure copy
的縮寫,可以通過網(wǎng)絡(luò)安全地把文件從一臺(tái)電腦拷貝到另一臺(tái)電腦堂鲤。
【基本用法】
scp 源文件 目標(biāo)文件
其中原文件和目標(biāo)文件的格式為user@ip:file_name
scp ./hello.txt root@192.168.123.160:~/ # 將本系統(tǒng)目錄下的hello.txt文件拷貝到服務(wù)器的家目錄下
scp root@106.55.62.52:~/hello.txt ./hello.txt # 將服務(wù)器家目錄下的hello.txt文件拷貝到本系統(tǒng)當(dāng)前目錄下
ln
ln是Link的縮寫表示創(chuàng)建鏈接亿傅,在Linux系統(tǒng)中文件名與文件內(nèi)容是分開存儲(chǔ)的,每一個(gè)文件名通過inode
標(biāo)識(shí)綁定到對(duì)應(yīng)的文件內(nèi)容瘟栖。為了保護(hù)某些重要文件的安全已經(jīng)方便系統(tǒng)操作葵擎,Linux系統(tǒng)設(shè)計(jì)了兩種鏈接:硬鏈接和軟鏈接。
(1)硬鏈接
如果我們使用命令
ln file1 file2
讓file2與file1進(jìn)行硬鏈接半哟,此時(shí)假若刪除file1,會(huì)發(fā)現(xiàn)file2不會(huì)受到影響酬滤,對(duì)于硬鏈接來說刪除鏈接任意一方的文件,共同指向的文件內(nèi)容并不會(huì)從硬盤中刪除寓涨。只有同時(shí)刪除了file1與file2,它們所共同指向的文件內(nèi)容才會(huì)消失敏晤。(2)軟鏈接
軟連接類似于Windows里的快捷方式,執(zhí)行創(chuàng)建軟鏈接命令
ln -s file1 file3
后缅茉,系統(tǒng)會(huì)創(chuàng)建file3指向file1的軟鏈接嘴脾。此時(shí)file3只是file1的快捷方式,它指向file1顯示file1的內(nèi)容蔬墩。但是file3與file1的inode并不同译打,我們刪除file3,file1不會(huì)受到影響拇颅。但是如果刪除file1的話奏司,file3就會(huì)變成死鏈接。【案例思考】
刪除原文件file1后樟插,硬鏈接文件file2不受影響韵洋,軟連接文件file3開始無法訪問
用戶與權(quán)限
用戶的管理
在Linux系統(tǒng)中允許多個(gè)用戶存在,這些用戶被劃分到不同的組中黄锤。但是Linux系統(tǒng)中的root
用戶(超級(jí)管理員用戶)最特殊搪缨,它被劃分到root
組中,具有系統(tǒng)中的最高權(quán)限鸵熟。為了保護(hù)各個(gè)用戶在系統(tǒng)中的文件安全副编,Linux系統(tǒng)定義了各種文件權(quán)限級(jí)別:可讀、可寫流强、可執(zhí)行痹届。
sudo
以root
身份執(zhí)行命令
sudo vim nginx.conf
假如nginx.conf這個(gè)文件對(duì)于普通用戶執(zhí)行vim工具只有可讀權(quán)限,如果要編輯該文件則需要以root用戶身份來執(zhí)行打月。這時(shí)候只需要使用sudo命令即可队腐。
useradd
添加新用戶
【常用參數(shù)】
-
-d
指定用戶的登入目錄 -
-g
指定用戶的所屬的群組 -
-u
指定用戶的id
useradd建立賬戶后,使用passwd來設(shè)定賬戶的密碼奏篙,使用userdel來刪除賬戶柴淘。注意執(zhí)行這些命令都需要root
用戶權(quán)限。
useradd -g root -d /home/xy xiaoyu # 新建一個(gè)用戶名為xiaoyu的用戶,屬于root組家目錄在/home/xy文件夾下
passwd xiaoyu # 修改xiaoyu用戶的密碼
userdel xiaoyu # 刪除xiaoyu用戶名,其家目錄下的文件夾依然保留
userdel xiaoyu -r # 刪除xiaoyu用戶名的同時(shí)刪除家目錄下的文件夾
su
全稱switch user表示切換用戶
su xiaoyu # 切換為普通用戶xiaoyu
su # 切換回root用戶
如果以root用戶登錄系統(tǒng)后再su切換成普通用戶悠就,可以使用exit
切換回root用戶身份千绪。
群組的管理
Linux中每一個(gè)用戶都屬于一個(gè)特定的群組充易,如果創(chuàng)建用戶時(shí)沒有指定特定的群組梗脾,系統(tǒng)會(huì)為用戶分配一個(gè)與用戶名相同的群組,并把用戶規(guī)劃給該群組盹靴。
groupadd
創(chuàng)建群組炸茧,用法和useradd相同
groupadd com # 創(chuàng)建com組
groupdel com # 刪除com組
groups
查看用戶對(duì)應(yīng)的組名稱
groups xiaoyu # 查看用戶xiaoyu所在的組
chgrp
用戶修改文件的群組
chgrp com file1.txt # 將file1.txt的文件群組修改為com
chown
修改文件的所有者
chown xiaoyu file1.txt # 將file1.txt這個(gè)文件的所有者設(shè)置為xiaoyu
chown xiaoyu:com file1.txt # 將file1.txt這個(gè)文件的所有者設(shè)置為xiaoyu,所屬的群組設(shè)置為com
文件權(quán)限管理
chmod
修改文件的訪問權(quán)限
chmod 777 hello.java # 將hello.java這個(gè)文件設(shè)置為所有用戶可讀可寫可執(zhí)行
在Linux系統(tǒng)中稿静,不同的用戶處于不同的地位擁有不同的權(quán)限梭冠。為了保護(hù)系統(tǒng)的安全,Linux系統(tǒng)對(duì)不同的用戶訪問同一文件(包括目錄)的權(quán)限做了不同的規(guī)定改备。
可以使用ll
或者ls -l
命令控漠,查看當(dāng)前目錄下文件的屬性以及文件所屬的用戶和組。
pi@raspberrypi4b:~/swift $ ls -l
total 0
drwxr-xr-x 2 root root 4096 Apr 27 17:02 bin
-rw-r--r-- 2 root root 0 Apr 27 14:43 file1
-rw-r--r-- 2 root root 0 Apr 27 14:43 file2
lrwxrwxrwx 1 root root 5 Apr 27 14:44 file3 -> file1
其中drwxr-xr-x
表示文件或目錄的權(quán)限悬钳,我們來解讀一下這些字母分別代表什么含義:
-
d
:表示目錄盐捷,普通文件用-
表示,鏈接文件用l
表示默勾; -
r
:表示文件可讀 -
w
:表示文件可寫 -
x
:表示文件可執(zhí)行 -
-
:表示沒有相應(yīng)的權(quán)限
文件或者目錄的權(quán)限字符串是根據(jù)以下規(guī)則來進(jìn)行劃分的:
每個(gè)文件的熟悉由10個(gè)字符來確定碉渡,第0位確定文件類型,第1-3位確定文件屬主(文件的所有者)擁有該文件的權(quán)限母剥,第4-6位確定文件的屬組(所有者同組用戶)擁有該文件的權(quán)限滞诺,第7-9位確定其它用戶擁有該文件的權(quán)限。
【案例分析】
我們?cè)囍蒙厦娴闹R(shí)解讀一下-rwxrw-r--
的權(quán)限信息环疼;
- 第0位是
-
侈贷,表明它是一個(gè)普通文件; - 第1-3位是
rwx
攘轩,表明文件所有者具有可讀可寫可執(zhí)行權(quán)限宙彪; - 第4-6位是
rw-
,表明文件所有者的同組用戶具有可讀可寫權(quán)限等限; - 第7-9位是
r--
爸吮,表明其它用戶具有可讀權(quán)限。
數(shù)字分配權(quán)限
回到前面的圖望门,我們發(fā)現(xiàn)有的時(shí)候可以通過數(shù)字來賦予文件權(quán)限形娇,比如chmod 777 file.txt
,這是什么意思呢筹误?原來Linux系統(tǒng)中將讀權(quán)限設(shè)置為數(shù)字4桐早、寫權(quán)限設(shè)置為數(shù)字2、執(zhí)行權(quán)限設(shè)置為數(shù)字1,如果需要表示權(quán)限只需要做一些簡(jiǎn)單加法就行哄酝。
【案例分析】
我們?cè)囍斫?code>chmod 540 hello.py這個(gè)語句給hello.py這個(gè)文件賦予的權(quán)限友存。
- 5 = 4 + 1 + 0 表示文件所有者具有可讀可執(zhí)行權(quán)限
- 4 = 4 + 0 + 0 表示文件所有者同組用戶具有可讀權(quán)限
- 0 = 0 + 0 + 0 表示其它用戶沒有任何權(quán)限
對(duì)應(yīng)的字符表示的權(quán)限應(yīng)寫成-r-xr-----
字母分配權(quán)限
除了使用字符數(shù)字,Linux系統(tǒng)中還可以通過字母來分配權(quán)限陶衅;
-
u
:user
的縮寫屡立,表示文件所有者 -
g
:group
的縮寫 ,表示文件所有者同組用戶 -
o
:other
的縮寫 搀军,表示其他用戶 -
a
:all
的縮寫 膨俐,表示所有用戶 -
+
:表示添加權(quán)限 -
-
:表示去除權(quán)限 -
=
:表示賦予權(quán)限
【案例分析】 -
chmod u+rx hello.c
表示文件hello.c的所有者增加讀和執(zhí)行權(quán)限; -
chmod g+w hello.c
表示文件hello.c的所有者同組用戶增加可寫權(quán)限罩句; -
chmod o-x hello.c
表示文件hello.c的其它用戶去除可執(zhí)行權(quán)限焚刺; -
chmod go-r hello.c
表示文件hello.c的同組用戶和其它用戶去除讀權(quán)限; -
chmod a+x hello.c
表示文件hello.c的所有用戶增加可執(zhí)行權(quán)限门烂; -
chmod u=rwx,g=rw,o=r hello.c
表示文件hello.c的文件所有者具備可讀可寫可執(zhí)行乳愉,同組用戶具備可讀可寫,其它用戶苦逼可讀權(quán)限屯远;
查找
在Linux系統(tǒng)中蔓姚,我們通常需要檢索某一個(gè)文件,這時(shí)候就需要相關(guān)的查找工具氓润。
locate
搜索包含關(guān)鍵字的所有文件和目錄赂乐,支持正則表達(dá)式。
locate file1.txt
【注意事項(xiàng)】
-
locate
命令在執(zhí)行的過程中會(huì)檢索當(dāng)前系統(tǒng)文件數(shù)據(jù)庫咖气,而不是全磁盤檢索挨措。由于新創(chuàng)建的文件并不會(huì)立刻更新到文件數(shù)據(jù)庫中,所以無法被locate
檢索到崩溪。如果想要立刻檢索可以使用sudo updatedb
命令更新一下文件數(shù)據(jù)庫浅役。 - 如果系統(tǒng)無法使用locate命令(系統(tǒng)顯示command not found),可以手動(dòng)安裝一下
mlocate
軟件包伶唯。
find
find是一款Linux內(nèi)置工具觉既,主要的功能是找文件,甚至可以在找到文件后再進(jìn)行后續(xù)操作乳幸,功能非常強(qiáng)大瞪讼。
【常用寫法】
- 根據(jù)文件名查找:
find . -name "XXXXX" # 表示在當(dāng)前目錄中查找名為XXXXX的文件
find . -iname "XXXXX" # 當(dāng)前目錄查找XXXXX文件名不區(qū)分大小寫
- 根據(jù)文件類型查找:
find . -type d -name "XXXXX" # 在當(dāng)前目錄查找XXXXX的目錄
type 的值可選為:
文件類型 | 含義 | 文件類型 | 含義 |
---|---|---|---|
f | 普通文件 | p | 管道 |
d | 目錄 | c | 字符設(shè)備 |
l | 軟鏈接 | b | 塊設(shè)備 |
s | 套接字 |
- 根據(jù)文件大小查找
find /root -size +10G # 查找root目錄下超過10M的文件
find . -size 12k # 查找當(dāng)前目錄下等于12k的文件
find /tmp -size -1M # 查找tmp目錄下小于1M的文件
- 根據(jù)文件最近訪問時(shí)間查找
find -name "*.java" -atime +7 # 7天之前訪問過的java文件
find . -mtime -1 # 近1天修改過的文件
- 查找結(jié)果并執(zhí)行操作
find . -name "*.java" -printf "%p - %u" # 查找當(dāng)前目錄下所有的java文件并以文件名-文件所有者格式打印
find . -name "*.py" -delete # 刪除當(dāng)前目錄下所有的py文件
find -name "*.py" -exec chmod 777 {} \; # 將當(dāng)前目錄下的所有py文件權(quán)限設(shè)為所有人可讀可寫可執(zhí)行
find -name "*.py" -ok chmod 777 {} \; # 功能一樣,不過執(zhí)行之前有詢問操作
grep
grep主要用于查找文件里符合條件的字符串
【常用參數(shù)】
-
-n
顯示結(jié)果在文本中的行號(hào) -
-r
遞歸查找 -
-i
忽略大小寫 -
-E
以正則表達(dá)式進(jìn)行匹配 -
-v
顯示不包含指定文本的所有行
grep -nr xiaoyu *.py # 遞歸查找當(dāng)前文件夾下所有的py文件中含有關(guān)鍵字xiaoyu的位置并顯示行數(shù)
grep -v xiaoyu *.py # 查找當(dāng)前文件夾下所有的py文件中不包含xiaoyu關(guān)鍵字的所有行
grep -E ^xiao /root/*.py # 查找root文件夾下所有的py文件中以xiao開頭的位置
軟件安裝
在日常使用的Linux系統(tǒng)中粹断,安裝軟件的方式主要有兩種符欠。Red Hat
家族的.rpm
包,一般使用yum
進(jìn)行安裝瓶埋;另一個(gè)Debian
家族的.deb
包希柿,一般使用apt
進(jìn)行安裝诊沪。
以樹莓派的Raspberry Pi OS
系統(tǒng)為例,它屬于Debian
家族安裝,其軟件包后綴為.deb
曾撤,可以使用apt-get為系統(tǒng)安裝軟件端姚,系統(tǒng)大部分操作基本上和Ubuntu
類似。
倉庫安裝軟件
apt-get
apt-get適用于deb包從互聯(lián)網(wǎng)軟件倉庫中搜索挤悉、安裝渐裸、卸載軟件或者操作系統(tǒng),其中apt的全稱是Advanced Package Tool尖啡。
【常用操作】
apt-get install packagename #安裝一個(gè)新的軟件包
apt-get remove packagename #卸載一個(gè)已安裝的軟件包(保留配置文檔)
apt-get remove --purge packagename #卸載一個(gè)已安裝的軟件包(刪除配置文檔)
apt-get autoremove packagename #刪除包及其依賴的軟件包
apt-get autoremove --purge packagname #刪除包及其依賴的軟件包+配置文件橄仆,比上面的要?jiǎng)h除的徹底一點(diǎn)
dpkg --force-all --purge packagename #有些軟件很難卸載剩膘,而且還阻止了別的軟件的應(yīng)用衅斩,就能夠用這個(gè)(有風(fēng)險(xiǎn))
【注意事項(xiàng)】
- 在部分操作系統(tǒng)中執(zhí)行apt-get需要root權(quán)限,所有一般在執(zhí)行以上命令時(shí)會(huì)加上
sudo
sudo apt-get update # 刷新軟件源
sudo apt-get upgrade # 將系統(tǒng)中所有軟件包一次性升級(jí)到最新版本
- 以上apt-get針對(duì)Debian家族的系統(tǒng)怠褐,如果是Redhat家族的系統(tǒng)請(qǐng)自行切換成
yum
安裝畏梆,方法基本相似。
編譯安裝軟件
我們剛學(xué)會(huì)了使用apt-get
安裝軟件奈懒,但是如果遇到apt倉庫中沒有的軟件奠涌,我們就需要學(xué)會(huì)更高級(jí)的軟件安裝方法:編譯源碼安裝
;
【基本步驟】
- 下載源碼
wget https://downloads.apache.org/httpd/httpd-2.4.53.tar.gz
- 解壓
tar -xzvf httpd-2.4.53.tar.gz # 解壓壓縮包
cd httpd-2.4.53 # 進(jìn)入解壓后的文件夾
- 配置
檢查當(dāng)前設(shè)備是否具備編譯所需的工具磷杏,執(zhí)行命令./configure
溜畅,寫成/configure prefix=/usr/
可以指定軟件安裝的路徑; - 編譯
執(zhí)行make
命令极祸,添加參數(shù)-j4
表明調(diào)用幾個(gè)CPU來執(zhí)行編譯工作遥金。 - 安裝
執(zhí)行make install
命令
重定向與管道
理解命令的去向
在Linux系統(tǒng)中一個(gè)命令的去向可以有三個(gè)方向:終端顯示浴捆、文件稿械、另外一個(gè)命令的入?yún)ⅰ?/p>
命令一般是通過鍵盤輸入,然后輸出到終端、文件,它的標(biāo)準(zhǔn)用語分別是標(biāo)準(zhǔn)輸入stdin
、標(biāo)準(zhǔn)輸出stdout
、標(biāo)準(zhǔn)錯(cuò)誤輸出stderr
重定向
重定向是指本來要顯示在終端的結(jié)果,重新輸送到別的地方(文件中或者作為其它命令的輸入)
輸出重定向
- 使用
>
輸出重定向,如果文件不存在則系統(tǒng)新建一個(gè)侯谁,如果輸出的文件已經(jīng)存在热芹,則覆蓋原始文件伊脓。
echo "hello" > hello.txt
- 使用
>>
輸出重定向榄笙,表示新內(nèi)容追加到文件末尾米丘;
echo "hello" >> hello.txt
- 使用
2>
輸出重定向,表示標(biāo)準(zhǔn)錯(cuò)誤輸出
cat hello.txt > res.txt 2> errors.log
- 使用
2>&1
輸出重定向糊探,表示標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出都重定向到一個(gè)地方
cat hello.txt > res.txt 2>&1 # 覆蓋
cat hello.txt >> res.txt 2>&1 # 追加
輸入重定向
- 使用
<
輸入重定向
cat < hello.txt # 指定cat命令的輸入內(nèi)容為hello.txt的內(nèi)容
輸出結(jié)果與cat hello.txt
相同瞪慧,但是系統(tǒng)的工作流程是不同的印机。
- 使用
<<
輸入重定向
wc -m << END # 輸入這個(gè)命令后楣责,終端就進(jìn)入鍵盤輸入模式秆麸,其中END為結(jié)束命令
管道
管道,顧名思義就是可以像管道一樣把兩個(gè)命令的輸入輸出連起來,英文是pipeline
在Linux中可以用符號(hào)|
表示闯冷。
例如我們對(duì)city.txt這個(gè)文本文件進(jìn)行查看、排序、降重,可以寫成:
cat hello.txt | sort | uniq
這樣我們就能找出進(jìn)過排序與降重的城市列表了。
【注意事項(xiàng)】
cat愉择、sort破花、uniq烦租、grep等命令均支持管道符延赌,是因?yàn)檫@些命令均可以從標(biāo)準(zhǔn)輸入中讀取要處理的文本(即從標(biāo)準(zhǔn)輸入中讀取參數(shù))除盏;而對(duì)于部分命令,例如rm挫以、kill等命令則不支持從標(biāo)準(zhǔn)輸入中讀取參數(shù)者蠕,因?yàn)槠渲恢С謴拿钚兄凶x取參數(shù)。
進(jìn)程
進(jìn)程查看
在Windows系統(tǒng)中掐松,如果某個(gè)應(yīng)用卡住了踱侣,我們可以在任務(wù)管理器里找到對(duì)應(yīng)進(jìn)程,然后強(qiáng)制結(jié)束大磺。那么在Linux系統(tǒng)中如何查看進(jìn)程呢抡句?
w
可以查看當(dāng)前系統(tǒng)中有哪些用戶處于登錄狀態(tài)及其他信息
pi@raspberrypi4b:~ $ w
23:44:34 up 4 min, 3 users, load average: 0.33, 0.44, 0.21
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
pi tty7 :0 19:48 3:56m 0.88s 0.16s /usr/bin/lxsess
pi tty1 - 19:48 3:56m 0.15s 0.12s -bash
pi pts/0 192.168.123.122 23:41 2.00s 0.13s 0.03s w
【數(shù)據(jù)解讀】
第一行顯示的是任務(wù)隊(duì)列信息
23:44:34表示當(dāng)前時(shí)間,up 4 min表示系統(tǒng)正常運(yùn)行了4分鐘杠愧,3 users表示當(dāng)前有三個(gè)用戶在登錄待榔,load average代表負(fù)載均衡信息,三個(gè)值分別代表最近1分鐘流济、5分鐘锐锣、15分鐘的平均負(fù)載。
-
USER
表示當(dāng)前登錄的用戶 -
TTY
表示登錄的終端名稱 -
FROM
表示連接到服務(wù)器的IP地址 -
LOGIN@
表示登錄時(shí)間 -
IDLE
用戶多久沒有活躍了 -
JCPU
該終端所有相關(guān)進(jìn)程使用的CPU的時(shí)間 -
PCPU
表示CPU執(zhí)行當(dāng)前程序所消耗的時(shí)間 -
WHAT
表示當(dāng)前用戶正在運(yùn)行的程序
ps
用于顯示當(dāng)前系統(tǒng)中的進(jìn)程绳瘟,是當(dāng)前時(shí)刻系統(tǒng)的進(jìn)程快照雕憔,不會(huì)實(shí)時(shí)更新。
pi@raspberrypi4b:~ $ ps
PID TTY TIME CMD
1580 pts/0 00:00:00 bash
1701 pts/0 00:00:00 ps
【數(shù)據(jù)解讀】
-
PID
表示進(jìn)程號(hào)稽荧,每一個(gè)進(jìn)程都有一個(gè)唯一的進(jìn)程號(hào)橘茉; -
TTY
表示進(jìn)程所運(yùn)行的終端名稱 -
TIME
表示進(jìn)程運(yùn)行的時(shí)間 -
CMD
比礙事產(chǎn)生這個(gè)進(jìn)程的程序名
【常用參數(shù)】
-
-ef
列舉所有進(jìn)程 -
-u
列舉出當(dāng)前用戶運(yùn)行的進(jìn)程 -
-aux
通過CPU和內(nèi)存使用來過濾進(jìn)程(通常和grep
搭配使用) -
-axjf
通過樹形結(jié)構(gòu)來顯示進(jìn)程
top
獲取進(jìn)程的動(dòng)態(tài)列表
【數(shù)據(jù)解讀】
第一行:同
w
命令第一行相同,顯示的是任務(wù)隊(duì)列信息姨丈;第二行:總進(jìn)程數(shù)目、處于運(yùn)行態(tài)擅腰、休眠態(tài)蟋恬、停止態(tài)、僵尸態(tài)的進(jìn)程數(shù)目趁冈;
第三行:顯示的是CPU狀態(tài)信息歼争,
-
us
【user space】— 用戶空間占用CPU的百分比。 -
sy
【sysctl】— 內(nèi)核空間占用CPU的百分比渗勘。 -
ni
【nice】— 改變過優(yōu)先級(jí)的進(jìn)程占用CPU的百分比 -
id
【idolt】— 空閑CPU百分比 -
wa
【wait】— IO等待占用CPU的百分比 -
hi
【Hardware IRQ】— 硬中斷占用CPU的百分比 -
si
【Software Interrupts】— 軟中斷占用CPU的百分比
第四行:內(nèi)存的狀態(tài)
第五行:交換分區(qū)的信息
表格抬頭含義:
-
PR
:進(jìn)程優(yōu)先級(jí) -
NI
:nice值沐绒,負(fù)值表示高優(yōu)先級(jí),正值表示低優(yōu)先級(jí) -
VIRT
:進(jìn)程使用的虛擬內(nèi)存總量 -
RES
:進(jìn)程使用的物理內(nèi)存大學(xué) -
SHR
:共享內(nèi)存大小 -
S
:進(jìn)程狀態(tài)
【常用參數(shù)】
-
-c
COMMAND下顯示完整的命令行包含參數(shù) -
-i
只顯示活躍進(jìn)程
kill
用于結(jié)束某個(gè)進(jìn)程旺坠,可通過ps 或者 top找到相關(guān)進(jìn)程的pid然后使用kill結(jié)束該進(jìn)程
kill 455 # 結(jié)束進(jìn)程ID為455的進(jìn)程
kill 537 455 # 結(jié)束進(jìn)程ID為537和455的進(jìn)程
kill -9 1753 # 強(qiáng)制結(jié)束進(jìn)程
管理進(jìn)程
默認(rèn)情況下乔遮,用戶創(chuàng)建的進(jìn)程都是前臺(tái)進(jìn)程,一般的前臺(tái)進(jìn)程從鍵盤讀取數(shù)據(jù)取刃,把結(jié)果輸出到顯示器蹋肮。后臺(tái)進(jìn)程則不必等待程序運(yùn)行結(jié)束出刷,就可以輸入其它命令。需要在執(zhí)行的命令后添加&
符號(hào)坯辩,表示啟動(dòng)一個(gè)后臺(tái)進(jìn)程馁龟。
&
啟動(dòng)后臺(tái)進(jìn)程,該后臺(tái)進(jìn)程與終端相關(guān)聯(lián)漆魔,一旦關(guān)閉終端坷檩,進(jìn)程就結(jié)束了。
sudo apt-get upgrade &
nohup
啟動(dòng)進(jìn)程使其不受掛斷操作(關(guān)閉終端操作)的影響改抡,一般情況下nohup
與&
結(jié)合使用表明啟動(dòng)后臺(tái)進(jìn)程且不受掛斷操作影響淌喻。
nohup ./frps -c frps.ini > /dev/null 2>&1 & # 后臺(tái)讀取配置信息啟動(dòng)frps,無論是否啟動(dòng)成功都將結(jié)果重定向到/dev/null
這時(shí)如果需要結(jié)束該進(jìn)程需要在top
中找到其PID
然后使用kill
結(jié)束該進(jìn)程雀摘。
bg
在Linux系統(tǒng)中裸删,處于前臺(tái)運(yùn)行狀態(tài)的進(jìn)程,使用快捷鍵Ctrl + Z
可以將進(jìn)程轉(zhuǎn)為后臺(tái)暫停狀態(tài)阵赠。同樣涯塔,處于后臺(tái)暫停狀態(tài)的進(jìn)程可以使用bg
命令轉(zhuǎn)為前臺(tái)運(yùn)行狀態(tài)。
【常用寫法】
bg % 1 # 不添加參數(shù)時(shí)默認(rèn)作用于最近的一個(gè)后臺(tái)進(jìn)程清蚀,如果添加參數(shù)則會(huì)作用于指定標(biāo)號(hào)的進(jìn)程匕荸。
fg
對(duì)于后臺(tái)運(yùn)行的進(jìn)程或者后臺(tái)暫停的進(jìn)程,使用命令fg
都可以將其轉(zhuǎn)為前臺(tái)運(yùn)行的進(jìn)程枷邪。
對(duì)于進(jìn)程前后臺(tái)的切換榛搔,其控制方法可以看下面的運(yùn)行狀態(tài)圖:
守護(hù)進(jìn)程
一個(gè)運(yùn)行起來的程序被稱為進(jìn)程,在Linux中有些進(jìn)程不與任何進(jìn)程關(guān)聯(lián)东揣,不論用戶的身份如何践惑,都在后臺(tái)運(yùn)行。這些進(jìn)程的父進(jìn)程是PID
為1的進(jìn)程嘶卧,PID
為1的進(jìn)程只有在系統(tǒng)關(guān)閉時(shí)才會(huì)被銷毀尔觉。它會(huì)在后臺(tái)一直運(yùn)行等待分配工作,我們將這類進(jìn)程稱之為守護(hù)進(jìn)程芥吟。
守護(hù)進(jìn)程的名字通常會(huì)在最后有一個(gè)d
侦铜,表示daemon
守護(hù)的意思,例如systemd
钟鸵、httpd
最后
希望能通過本文的學(xué)習(xí)钉稍,能夠讓小伙伴對(duì)Linux系統(tǒng)的基本操作有一個(gè)全面的認(rèn)識(shí),希望大家一邊看著文中的內(nèi)容一邊動(dòng)手操作棺耍,這樣才能真正掌握知識(shí)贡未。