linux必背的80個命令(Linux命令萬字總結這次我必拿下)
2023-05-07 14:18:53 5
前言大家好,我是小雨。今天給大家分享一篇硬核的Linux基礎知識總結。
Linux系統的基本操作對於大多數計算機類相關學生或者相關從業人員都很重要,本文以樹莓派上的Linux系統為實例,從基礎出發,詳細介紹Linux系統中最需要掌握的知識點,介紹常見的命令參數與用法。
什麼是Linux這裡就不搬概念了,Linux本質上和Window一樣都是運行在計算機上的作業系統,但是有一個核心區別就是Linux是開源的。
Linux主要學習範疇
運行在桌面端的Linux像Windows一樣有圖形化界面,我們可以用滑鼠操作,但是大多數Linux系統運行在伺服器上沒有圖形化界面,那我們怎麼執行呢?使用Shell工具,它就像一個外部用戶與Linux內核溝通的橋梁,例如複製粘貼重命名文件,這些都是通過Linux命令來執行的,我們所要學習的就是要理解這些命令並使用這些命令。
如何使用Shell工具知道了Linux基本概念後,我們該如何使用Shell工具來登錄遠程Linux系統呢?
在Windows系統上如果你的電腦上的作業系統是Windows,可以使用putty工具或者Xshell(具體按照方法可自行搜索)登錄Linux系統,在指定界面按照提示輸入Linux系統的IP位址、用戶名、登錄密碼即可登錄;
Xshell登錄
在其他系統上如果你的電腦上的系統是macOS或者Linux類系統(Ubuntu、CentOS、Kylin、Raspberry Pi OS)那麼直接打開終端工具輸入命令:
ssh 用戶名@IP位址
再按提示輸入登錄密碼就可以登錄了。
在樹莓派上遠程登錄伺服器
如果是單純的學習Linux基礎知識也可以直接打開終端就可以了!
使用Xshell連接Linux伺服器這裡以Windows上的終端工具Xshell登錄樹莓派的Linux系統為例,登錄成功後,系統會顯示上一次登錄的時間。
使用Xshell連接樹莓派
pi表示用戶名(樹莓派的用戶名默認為pi)raspberrypi4b表示這臺Linux系統的主機名,可以自定義;$ 表示當前用戶所具有的權限(root用戶為#,普通用戶為$)~ 表示當前所在目錄為家目錄使用命令行工具通用的快捷鍵在學習Linux命令之前,有一些快捷鍵是必須要掌握的,它能大大提高你的Linux命令使用效率。
↑↓:通過↑↓鍵來選擇過往執行過的Linux命令;Tab:命令或者參數僅需輸入前面幾位就可以使用Tab鍵來補全;Ctrl R: 歷史命令檢索,使用Ctrl R用於查找使用過的命令。顯示所有執行過的命令,使用history可以顯示所有命令執行歷史,使用history 數字可以查看最近n次使用過的命令;使用! 編號可以直接執行歷史命令中對應編號的命令。Ctrl L:清除屏幕並將當前行移動值頁面頂部;Ctrl C:終止當前終端中正在執行的命令Ctrl U:從光標位置剪切至行首Ctrl K:從光標位置剪切至行尾Ctrl W:剪切光標左側的一個單詞Ctrl Y:粘貼Ctrl A:光標調到命令行的開頭Ctrl E:光標跳到命令行結尾Ctrl D:關閉當前Shell會話文件和目錄Linux的文件目錄系統Linux不像Windows分了C盤和D盤,它只有一個根目錄,根目錄有若干文件夾,每一個文件夾都有它特定的用途:
└── / // 根目錄 ├── bin // binary的縮寫,存放系統命令,bin目錄裡面包含了會被所有用戶使用的可執行程序 ├── boot // 系統啟動目錄,保存與系統啟動相關的文件,包含內核文件、啟動引導程序 ├── dev // device的縮寫,設備文件保存位置 ├── etc // 系統配置文件保存位置,系統中採用默認安裝方式的服務配置文件都會保存在這 ├── home // 用戶的家目錄,Linux中每一個用戶在home目錄下都有一個自己用戶名的家目錄 ├── lib // 系統調用的函數庫保存位置 ├── media // 媒體,掛載目錄,建議掛載一些媒體設備 ├── mnt // mount表示掛載目錄,一般表示臨時掛載一些裝置(U盤、SD卡、移動硬碟) ├── opt // 第三方安裝軟體保存的位置,手工安裝源碼可以安裝在這裡,/usr/local/也可以作為安裝目錄 ├── proc // 虛擬文件系統,該目錄保存在內存中,保存系統的內核、進程、外部設備的網絡狀態等 ├── root // 超級用戶root的家目錄 ├── sbin // system binary表示系統二進位文件,系統環境設置相關的目錄,包含系統級重要的可執行程序 ├── srv // service 表示服務,包含一些網絡啟動後所需要取用的數據 ├── sys // 虛擬文件系統,該目錄的數據都保存在內存中,保存與內核相關的信息 ├── tmp // 臨時目錄,系統存放臨時文件的目錄 ├── usr // Unix Software resource 表示Unix系統軟體資源,系統默認軟體都安裝在這 ├── var // variable表示動態的,包含程序的數據比如log文件 └── lost found // 當系統以外崩潰或者關機時,產生的文件碎片就存在這裡,是根分區的備份恢復目錄
瀏覽和切換目錄Windows有圖形界面,瀏覽和切換目錄可以直接在我的電腦裡點擊滑鼠,而Linux如何在命令行交互界面中瀏覽文件目錄呢?
ls列出文件和目錄(Linux中最常用的命令之一)。
【常用參數】
-a 顯示所有隱藏的文件和目錄-l 顯示詳細的文件信息-t 按文件最近一次修改的時間排序-i 顯示文件的inode標識cd表示切換目錄
【常用寫法】
cd / 表示跳轉到根目錄下cd ~ 表示跳轉到家目錄下cd .. 表示跳轉到上級目錄下cd pi 表示跳轉到當前目錄下的相對路徑(當前目錄下必須要有這個文件夾),通常搭配ls命令一起使用;cd /home/pi 後面加上絕對路徑(包含根目錄到當前目錄的路徑),表示可以跳轉到該絕對路徑下cd 不添加任何參數也表示跳轉到當前用戶的家目錄下pwd顯示當前目錄的路徑(顯示從根目錄開始到當前目錄的絕對路徑)
which查看Linux中某個可執行程序的位置
pi@raspberrypi4b:/home $ which python3/usr/bin/python3
du列舉出當前目錄的文件大小信息
-h 表示以方便閱讀的形式展現輸出結果,如果是文件大小就會顯示具體的K、M、G-a 表示同時列出目錄下所有文件的大小信息cat一次性查看文件的所有內容並將其輸出到終端中來,適合查看內容不多的文本文件
pi@raspberrypi4b:~/swift $ cat hello.txt hello raspiberry 4b !
less分頁顯示文本內容,適合查看內容較多的文本文件
【快捷指令】
空格鍵 下一頁b鍵 上一頁回車鍵 下一行y鍵 上一行d鍵 前進半頁u鍵 後退半頁q鍵 停止讀取=鍵 顯示當前內容在文本文件中第幾頁第幾號位置以及內容所佔百分比/鍵 進入搜索模式,按n鍵跳轉到下一個搜索到,按N鍵跳轉到上一個搜索點head和tail顯示文件的開頭或者末尾幾行 默認顯示10行,可以添加參數n指定顯示n行文本內容,tail還有一個重要的用處就是查看log日誌文件,可以實時查看日誌文件結尾的更新情況。使用參數-f可以每隔一秒查看文件是否有更新,也可以使用參數-s指定間隔時間查看文本內容是否更新
tail -f -s 3 access.log
touch創建一個文件
touch hello.txt
如果指定的文件在當前文件夾中不存在,則直接創建一個空白的新文件; 如果想要一次性創建多個文件,可以使用命令:
touch file1.txt file2.txt file3.txt
mkdir創建一個目錄,類似於Windows中新建一個指定名稱的文件夾;
【常用參數】
-p 遞歸創建目錄結構mkdir -p one/two/three
文本編輯在Linux系統的命令行中如果需要對文本進行編輯,主要有兩個應用nano和vim,其中vim是vi的增強版本。這裡主要介紹一下vim的基本使用。
vim【常用寫法】
vim hello.txt # 當前目錄下有hello.txt就直接編輯,若沒有則新建一個該名稱的空白文件
vim打開文本時,默認啟動正常模式(只能跳轉光標,不可編輯文本),需要輸入鍵盤i鍵才會啟動編輯模式。編輯好文件後,如果想保存輸入:進入命令模式,此時輸入的命令顯示在控制臺最後一行。wq表示保存退出,按回車執行操作。如果不想保存文本,q!表示不保存退出。
【注意事項】
vim文本編輯器對於新手來說,使用不太習慣,但是如果熟練使用vim編輯器後,該工具能非常有效的提高工作效率。
vim操作指南
解壓縮在Linux系統中,將多個文件壓縮成一個壓縮包的過程,主要分成兩部分: 第一步:將多個文件打包成一個tar包 第二步:將tar包壓縮成壓縮文件。
tartar的主要用途是將文件夾或者多個文件創建成一個tar包(歸檔)
【常用寫法】
tar -czvf xiaoyu.tar.gz xiaoyu/ # 將xiaoyu文件夾歸檔並壓縮tar -xzvf xiaoyu.tar.gz # 將壓縮包xiaoyu.tar.gz解壓
【參數解讀】
-c 代表創建打包-x 代表解包-z 代表處理的是gzip壓縮包-v 代表解壓壓縮過程可見-f 代表結果輸出文件zip/unzip如果需要在Linux中處理zip壓縮包,可以使用unzip解壓,zip進行壓縮。
【常用寫法】
unzip xiaoyu.zip # 解壓zip壓縮包unzip -l xiaoyu.zip # 只查看內容,不解壓zip xiaoyu.zip xiaoyu/ # 將xiaoyu文件夾壓縮為xiaoyu.zip
文件基本操作cp拷貝文件和目錄
【常用寫法】
cp file1 file1_copy 在當前文件夾下創建一份file1的副本;cp file2 dir1 將文件file2複製一份到dir1目錄下;cp file3 dir2/file3_copy 將文件file3複製一份到dir2目錄下,並命名為file3_copy;cp *.java dir3 將當前文件夾下的所有Java文件複製到dir3目錄下。rm刪除文件或目錄
【常用參數】
-r 遞歸刪除-i 刪除前給出提示信息-f 強制刪除【常用寫法】
rm file1 刪除當前文件夾下的file1文件rm -r dir1 刪除當前文件夾下dir1文件夾(文件夾必須使用遞歸方式刪除)rm *.txt 刪除當前文件夾下的所有txt文件sortsort可以快速對文本文件的行進行排序
【常用寫法】
sort city.txt 可以對city.txt中的每一行按首字母順序輸出到屏幕【案例講解】
我們創建一個文本文件city.txt,寫入以下內容:
GuangzhouShengzhenAnhuiWuhuBeijingZhengzhouXiamenn
執行sort city.txt命令後系統會輸出:
sort排序效果
【常用參數】
-o將排序後的結果寫入新文件sort -o city_sorted.txt city.txt-r 倒序排序-R 隨機排序-n 以每一行開頭的數字大小為順序進行排序uniquniq命令用於刪除文本文件中的重複內容
【常用寫法】
uniq city.txt 用於去除city.txt文本文件中的重複行數,並輸出到屏幕uniq city.txt city_uniq.txt 去重後將結果輸出到city_uniq.txt中;【常用參數】
-c 統計重複的行數-d 只顯示重複的行數【注意事項】
uniq只能去除文本文件中連續重複的行數
scpscp是secure copy的縮寫,可以通過網絡安全地把文件從一臺電腦拷貝到另一臺電腦。
【基本用法】
scp 源文件 目標文件 其中原文件和目標文件的格式為user@ip:file_name
scp ./hello.txt [email protected]:~/ # 將本系統目錄下的hello.txt文件拷貝到伺服器的家目錄下scp [email protected]:~/hello.txt ./hello.txt # 將伺服器家目錄下的hello.txt文件拷貝到本系統當前目錄下
lnln是Link的縮寫表示創建連結,在Linux系統中文件名與文件內容是分開存儲的,每一個文件名通過inode標識綁定到對應的文件內容。為了保護某些重要文件的安全已經方便系統操作,Linux系統設計了兩種連結:硬連結和軟連結。
(1)硬連結
硬連結
如果我們使用命令ln file1 file2讓file2與file1進行硬連結,此時假若刪除file1,會發現file2不會受到影響,對於硬連結來說刪除連結任意一方的文件,共同指向的文件內容並不會從硬碟中刪除。只有同時刪除了file1與file2,它們所共同指向的文件內容才會消失。
(2)軟連結
軟連結
軟連接類似於Windows裡的快捷方式,執行創建軟連結命令ln -s file1 file3後,系統會創建file3指向file1的軟連結。此時file3隻是file1的快捷方式,它指向file1顯示file1的內容。但是file3與file1的inode並不同,我們刪除file3,file1不會受到影響。但是如果刪除file1的話,file3就會變成死連結。
【案例思考】
刪除原文件file1後,硬連結文件file2不受影響,軟連接文件file3開始無法訪問
用戶與權限用戶的管理在Linux系統中允許多個用戶存在,這些用戶被劃分到不同的組中。但是Linux系統中的root用戶(超級管理員用戶)最特殊,它被劃分到root組中,具有系統中的最高權限。為了保護各個用戶在系統中的文件安全,Linux系統定義了各種文件權限級別:可讀、可寫、可執行。
sudo以root身份執行命令
sudo vim nginx.conf
假如nginx.conf這個文件對於普通用戶執行vim工具只有可讀權限,如果要編輯該文件則需要以root用戶身份來執行。這時候只需要使用sudo命令即可。
useradd添加新用戶
【常用參數】
-d 指定用戶的登入目錄-g 指定用戶的所屬的群組-u 指定用戶的iduseradd建立帳戶後,使用passwd來設定帳戶的密碼,使用userdel來刪除帳戶。注意執行這些命令都需要root用戶權限。
useradd -g root -d /home/xy xiaoyu # 新建一個用戶名為xiaoyu的用戶,屬於root組家目錄在/home/xy文件夾下passwd xiaoyu # 修改xiaoyu用戶的密碼userdel xiaoyu # 刪除xiaoyu用戶名,其家目錄下的文件夾依然保留userdel xiaoyu -r # 刪除xiaoyu用戶名的同時刪除家目錄下的文件夾
su全稱switch user表示切換用戶
su xiaoyu # 切換為普通用戶xiaoyusu # 切換回root用戶
如果以root用戶登錄系統後再su切換成普通用戶,可以使用exit切換回root用戶身份。
群組的管理Linux中每一個用戶都屬於一個特定的群組,如果創建用戶時沒有指定特定的群組,系統會為用戶分配一個與用戶名相同的群組,並把用戶規劃給該群組。
groupadd創建群組,用法和useradd相同
groupadd com # 創建com組groupdel com # 刪除com組
groups查看用戶對應的組名稱
groups xiaoyu # 查看用戶xiaoyu所在的組
chgrp用戶修改文件的群組
chgrp com file1.txt # 將file1.txt的文件群組修改為com
chown修改文件的所有者
chown xiaoyu file1.txt # 將file1.txt這個文件的所有者設置為xiaoyuchown xiaoyu:com file1.txt # 將file1.txt這個文件的所有者設置為xiaoyu,所屬的群組設置為com
chown設置文件屬主
文件權限管理chmod修改文件的訪問權限
chmod 777 hello.java # 將hello.java這個文件設置為所有用戶可讀可寫可執行
chmod設置文件權限
在Linux系統中,不同的用戶處於不同的地位擁有不同的權限。為了保護系統的安全,Linux系統對不同的用戶訪問同一文件(包括目錄)的權限做了不同的規定。
可以使用ll或者ls -l命令,查看當前目錄下文件的屬性以及文件所屬的用戶和組。
pi@raspberrypi4b:~/swift $ ls -ltotal 0drwxr-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 file2lrwxrwxrwx 1 root root 5 Apr 27 14:44 file3 -> file1
其中drwxr-xr-x表示文件或目錄的權限,我們來解讀一下這些字母分別代表什麼含義:
d:表示目錄,普通文件用-表示,連結文件用l表示;r:表示文件可讀w:表示文件可寫x:表示文件可執行-:表示沒有相應的權限 文件或者目錄的權限字符串是根據以下規則來進行劃分的:權限字符串的含義
每個文件的熟悉由10個字符來確定,第0位確定文件類型,第1-3位確定文件屬主(文件的所有者)擁有該文件的權限,第4-6位確定文件的屬組(所有者同組用戶)擁有該文件的權限,第7-9位確定其它用戶擁有該文件的權限。
【案例分析】
我們試著用上面的知識解讀一下-rwxrw-r--的權限信息;
第0位是-,表明它是一個普通文件;第1-3位是rwx,表明文件所有者具有可讀可寫可執行權限;第4-6位是rw-,表明文件所有者的同組用戶具有可讀可寫權限;第7-9位是r--,表明其它用戶具有可讀權限。數字分配權限回到前面的圖,我們發現有的時候可以通過數字來賦予文件權限,比如chmod 777 file.txt,這是什麼意思呢?原來Linux系統中將讀權限設置為數字4、寫權限設置為數字2、執行權限設置為數字1,如果需要表示權限只需要做一些簡單加法就行。
【案例分析】
我們試著理解chmod 540 hello.py這個語句給hello.py這個文件賦予的權限。
5 = 4 1 0 表示文件所有者具有可讀可執行權限4 = 4 0 0 表示文件所有者同組用戶具有可讀權限0 = 0 0 0 表示其它用戶沒有任何權限 對應的字符表示的權限應寫成-r-xr-----字母分配權限除了使用字符數字,Linux系統中還可以通過字母來分配權限;
u:user的縮寫,表示文件所有者g:group的縮寫 ,表示文件所有者同組用戶o:other的縮寫 ,表示其他用戶a:all的縮寫 ,表示所有用戶 :表示添加權限-:表示去除權限=:表示賦予權限【案例分析】
chmod u rx hello.c 表示文件hello.c的所有者增加讀和執行權限;chmod g w hello.c 表示文件hello.c的所有者同組用戶增加可寫權限;chmod o-x hello.c 表示文件hello.c的其它用戶去除可執行權限;chmod go-r hello.c 表示文件hello.c的同組用戶和其它用戶去除讀權限;chmod a x hello.c 表示文件hello.c的所有用戶增加可執行權限;chmod u=rwx,g=rw,o=r hello.c 表示文件hello.c的文件所有者具備可讀可寫可執行,同組用戶具備可讀可寫,其它用戶具備可讀權限;查找在Linux系統中,我們通常需要檢索某一個文件,這時候就需要相關的查找工具。
locate搜索包含關鍵字的所有文件和目錄,支持正則表達式。
locate file1.txt
【注意事項】
locate命令在執行的過程中會檢索當前系統文件資料庫,而不是全磁碟檢索。由於新創建的文件並不會立刻更新到文件資料庫中,所以無法被locate檢索到。如果想要立刻檢索可以使用sudo updatedb命令更新一下文件資料庫。如果系統無法使用locate命令(系統顯示command not found),可以手動安裝一下mlocate軟體包。findfind是一款Linux內置工具,主要的功能是找文件,甚至可以在找到文件後再進行後續操作,功能非常強大。
【常用寫法】
根據文件名查找:find . -name "XXXXX" # 表示在當前目錄中查找名為XXXXX的文件find . -iname "XXXXX" # 當前目錄查找XXXXX文件名不區分大小寫
根據文件類型查找:find . -type d -name "XXXXX" # 在當前目錄查找XXXXX的目錄
type 的值可選為:
文件類型 | 含義 | 文件類型 | 含義 |
f | 普通文件 | p | 管道 |
d | 目錄 | c | 字符設備 |
l | 軟連接 | b | 塊設備 |
find /root -size 10G # 查找root目錄下超過10M的文件find . -size 12k # 查找當前目錄下等於12k的文件find /tmp -size -1M # 查找tmp目錄下小於1M的文件
根據文件最近訪問時間查找find -name "*.java" -atime 7 # 7天之前訪問過的java文件find . -mtime -1 # 近1天修改過的文件
查找結果並執行操作find . -name "*.java" -printf "%p - %u" # 查找當前目錄下所有的java文件並以文件名-文件所有者格式列印find . -name "*.py" -delete # 刪除當前目錄下所有的py文件find -name "*.py" -exec chmod 777 {} \; # 將當前目錄下的所有py文件權限設為所有人可讀可寫可執行find -name "*.py" -ok chmod 777 {} \; # 功能一樣,不過執行之前有詢問操作
grepgrep主要用於查找文件裡符合條件的字符串
【常用參數】
-n顯示結果在文本中的行號-r 遞歸查找-i 忽略大小寫-E 以正則表達式進行匹配-v 顯示不包含指定文本的所有行grep -nr xiaoyu *.py # 遞歸查找當前文件夾下所有的py文件中含有關鍵字xiaoyu的位置並顯示行數grep -v xiaoyu *.py # 查找當前文件夾下所有的py文件中不包含xiaoyu關鍵字的所有行grep -E ^xiao /root/*.py # 查找root文件夾下所有的py文件中以xiao開頭的位置
軟體安裝在日常使用的Linux系統中,安裝軟體的方式主要有兩種。Red Hat家族的.rpm包,一般使用yum進行安裝;另一個Debian家族的.deb包,一般使用apt進行安裝。
常用Linux系統的兩大家族
以樹莓派的Raspberry Pi OS系統為例,它屬於Debian家族安裝,其軟體包後綴為.deb,可以使用apt-get為系統安裝軟體,系統大部分操作基本上和Ubuntu類似。
倉庫安裝軟體apt-getapt-get適用於deb包從網際網路軟體倉庫中搜索、安裝、卸載軟體或者作業系統,其中apt的全稱是Advanced Package Tool。
【常用操作】
apt-get install packagename #安裝一個新的軟體包apt-get remove packagename #卸載一個已安裝的軟體包(保留配置文檔)apt-get remove --purge packagename #卸載一個已安裝的軟體包(刪除配置文檔)apt-get autoremove packagename #刪除包及其依賴的軟體包apt-get autoremove --purge packagname #刪除包及其依賴的軟體包 配置文件,比上面的要刪除的徹底一點dpkg --force-all --purge packagename #有些軟體很難卸載,而且還阻止了別的軟體的應用,就能夠用這個(有風險)
【注意事項】
在部分作業系統中執行apt-get需要root權限,所有一般在執行以上命令時會加上sudosudo apt-get update # 刷新軟體源sudo apt-get upgrade # 將系統中所有軟體包一次性升級到最新版本
以上apt-get針對Debian家族的系統,如果是Redhat家族的系統請自行切換成yum安裝,方法基本相似。編譯安裝軟體我們剛學會了使用apt-get安裝軟體,但是如果遇到apt倉庫中沒有的軟體,我們就需要學會更高級的軟體安裝方法:編譯源碼安裝;
【基本步驟】
下載源碼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 # 進入解壓後的文件夾
配置 檢查當前設備是否具備編譯所需的工具,執行命令./configure,寫成/configure prefix=/usr/可以指定軟體安裝的路徑;編譯 執行make命令,添加參數-j4表明調用幾個CPU來執行編譯工作。安裝 執行make install命令重定向與管道理解命令的去向在Linux系統中一個命令的去向可以有三個方向:終端顯示、文件、另外一個命令的入參。
命令輸出的三個去向
命令一般是通過鍵盤輸入,然後輸出到終端、文件,它的標準用語分別是標準輸入stdin、標準輸出stdout、標準錯誤輸出stderr
標準輸入輸出
重定向重定向是指本來要顯示在終端的結果,重新輸送到別的地方(文件中或者作為其它命令的輸入)
輸出重定向使用>輸出重定向,如果文件不存在則系統新建一個,如果輸出的文件已經存在,則覆蓋原始文件。echo "hello" > hello.txt
2.使用>>輸出重定向,表示新內容追加到文件末尾;
echo "hello" >> hello.txt
3.使用2>輸出重定向,表示標準錯誤輸出
cat hello.txt > res.txt 2> errors.log
4.使用2>&1輸出重定向,表示標準輸出和錯誤輸出都重定向到一個地方
cat hello.txt > res.txt 2>&1 # 覆蓋cat hello.txt >> res.txt 2>&1 # 追加
輸入重定向使用<輸入重定向cat < hello.txt # 指定cat命令的輸入內容為hello.txt的內容
輸出結果與cat hello.txt相同,但是系統的工作流程是不同的。
2. 使用<<輸入重定向
wc -m << END # 輸入這個命令後,終端就進入鍵盤輸入模式,其中END為結束命令
管道管道,顧名思義就是可以像管道一樣把兩個命令的輸入輸出連起來,英文是pipeline在Linux中可以用符號|表示。
管道的功能
例如我們對city.txt這個文本文件進行查看、排序、降重,可以寫成:
cat hello.txt | sort | uniq
這樣我們就能找出進過排序與降重的城市列表了。
【注意事項】
cat、sort、uniq、grep等命令均支持管道符,是因為這些命令均可以從標準輸入中讀取要處理的文本(即從標準輸入中讀取參數);而對於部分命令,例如rm、kill等命令則不支持從標準輸入中讀取參數,因為其只支持從命令行中讀取參數。
進程進程查看在Windows系統中,如果某個應用卡住了,我們可以在任務管理器裡找到對應進程,然後強制結束。那麼在Linux系統中如何查看進程呢?
w可以查看當前系統中有哪些用戶處於登錄狀態及其他信息
pi@raspberrypi4b:~ $ w 23:44:34 up 4 min, 3 users, load average: 0.33, 0.44, 0.21USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATpi tty7 :0 19:48 3:56m 0.88s 0.16s /usr/bin/lxsesspi tty1 - 19:48 3:56m 0.15s 0.12s -bashpi pts/0 192.168.123.122 23:41 2.00s 0.13s 0.03s w
【數據解讀】
第一行顯示的是任務隊列信息 23:44:34表示當前時間,up 4 min表示系統正常運行了4分鐘,3 users表示當前有三個用戶在登錄,load average代表負載均衡信息,三個值分別代表最近1分鐘、5分鐘、15分鐘的平均負載。
USER表示當前登錄的用戶TTY表示登錄的終端名稱FROM表示連接到伺服器的IP位址LOGIN@表示登錄時間IDLE用戶多久沒有活躍了JCPU該終端所有相關進程使用的CPU的時間PCPU表示CPU執行當前程序所消耗的時間WHAT表示當前用戶正在運行的程序ps用於顯示當前系統中的進程,是當前時刻系統的進程快照,不會實時更新。
pi@raspberrypi4b:~ $ ps PID TTY TIME CMD 1580 pts/0 00:00:00 bash 1701 pts/0 00:00:00 ps
【數據解讀】
PID 表示進程號,每一個進程都有一個唯一的進程號;TTY 表示進程所運行的終端名稱TIME 表示進程運行的時間CMD 比礙事產生這個進程的程序名【常用參數】
-ef 列舉所有進程-u 列舉出當前用戶運行的進程-aux 通過CPU和內存使用來過濾進程(通常和grep搭配使用)-axjf 通過樹形結構來顯示進程top獲取進程的動態列表
top命令
【數據解讀】
第一行:同w命令第一行相同,顯示的是任務隊列信息;
第二行:總進程數目、處於運行態、休眠態、停止態、殭屍態的進程數目;
第三行:顯示的是CPU狀態信息,
us【user space】— 用戶空間佔用CPU的百分比。sy【sysctl】— 內核空間佔用CPU的百分比。ni【nice】— 改變過優先級的進程佔用CPU的百分比id【idolt】— 空閒CPU百分比wa【wait】— IO等待佔用CPU的百分比hi【Hardware IRQ】— 硬中斷佔用CPU的百分比si【Software Interrupts】— 軟中斷佔用CPU的百分比第四行:內存的狀態 第五行:交換分區的信息 表格抬頭含義:
PR:進程優先級NI:nice值,負值表示高優先級,正值表示低優先級VIRT:進程使用的虛擬內存總量RES:進程使用的物理內存大學SHR:共享內存大小S:進程狀態【常用參數】
-c COMMAND下顯示完整的命令行包含參數-i 只顯示活躍進程kill用於結束某個進程,可通過ps 或者 top找到相關進程的pid然後使用kill結束該進程
kill 455 # 結束進程ID為455的進程kill 537 455 # 結束進程ID為537和455的進程kill -9 1753 # 強制結束進程
管理進程默認情況下,用戶創建的進程都是前臺進程,一般的前臺進程從鍵盤讀取數據,把結果輸出到顯示器。後臺進程則不必等待程序運行結束,就可以輸入其它命令。需要在執行的命令後添加&符號,表示啟動一個後臺進程。
&啟動後臺進程,該後臺進程與終端相關聯,一旦關閉終端,進程就結束了。
sudo apt-get upgrade &
nohup啟動進程使其不受掛斷操作(關閉終端操作)的影響,一般情況下nohup與&結合使用表明啟動後臺進程且不受掛斷操作影響。
nohup ./frps -c frps.ini > /dev/null 2>&1 & # 後臺讀取配置信息啟動frps,無論是否啟動成功都將結果重定向到/dev/null
這時如果需要結束該進程需要在top中找到其PID然後使用kill結束該進程。
bg在Linux系統中,處於前臺運行狀態的進程,使用快捷鍵Ctrl Z可以將進程轉為後臺暫停狀態。同樣,處於後臺暫停狀態的進程可以使用bg命令轉為前臺運行狀態。
【常用寫法】
bg % 1 # 不添加參數時默認作用於最近的一個後臺進程,如果添加參數則會作用於指定標號的進程。
fg對於後臺運行的進程或者後臺暫停的進程,使用命令fg都可以將其轉為前臺運行的進程。 對於進程前後臺的切換,其控制方法可以看下面的運行狀態圖:
進程前後臺切換
守護進程一個運行起來的程序被稱為進程,在Linux中有些進程不與任何進程關聯,不論用戶的身份如何,都在後臺運行。這些進程的父進程是PID為1的進程,PID為1的進程只有在系統關閉時才會被銷毀。它會在後臺一直運行等待分配工作,我們將這類進程稱之為守護進程。 守護進程的名字通常會在最後有一個d,表示daemon守護的意思,例如systemd、httpd
最後希望能通過本文的學習,能夠讓小夥伴對Linux系統的基本操作有一個全面的認識,希望大家一邊看著文中的內容一邊動手操作,這樣才能真正掌握知識。
看到這了,希望大家能給小雨點個讚![比心]
,