閱讀提示
本文中你將瞭解到Linux運維與實際應用中的超詳細彙總指令。
在大學期間自學linux常常會因爲指令而頭痛,不用就會忘記,查幫助文檔又很繁瑣,在這裏小編整理了大學期間所學的所有常用指令供大家參考,廢話不多說,直接上乾貨。
一、linux文件系統結構
sudo apt-get install tree
tree --help #查看幫助
tree -L 1 #顯示文件目錄
root@ubuntu16 /# tree -L 1
. #系統根目錄
├── bin #存放常見的命令
├── boot #系統啓動文件和核心文件都在這個目錄
├── cdrom #光驅
├── dev #存放設備文件,包括硬盤、光驅、鍵盤、鼠標等
├── etc #系統配置文件都在這個目錄下
├── home #普通用戶的家目錄
├── lib #系統鏈接庫
├── lib64 #64位的鏈接庫
├── lost+found #系統自動生成的,如果文件系統出錯,會在目錄下產生文件,記錄錯誤
├── media #系統自動掛載的光驅、usb等
├── mnt #mount簡寫 掛載其他文件系統
├── opt #可在此安裝第三方軟件
├── proc #系統進程的信息、系統狀態信息
├── root #超管的目錄
├── run #進程運行數據
├── sbin #管理員的命令,普通用戶無法使用
├── srv #服務信息
├── sys #系統相關
├── tmp #臨時目錄,所有用戶都具有讀寫權限
├── usr #unix software resource 用戶的軟件安裝到這個目錄
| ├── bin #應用程序的可執行文件
| ├── sbin #用戶或超管的標準命令
| ├── local #管理員安裝的應用程序目錄
| └── share #共享文件目錄
└── var #存放不斷擴充的文件。比如數據庫文件、日誌文件
├── log #日誌目錄,各種應用的日誌
└── run # /run的軟連接
二、常見命令
-
ls
列出目錄下的文件或子目錄
ls [參數] #中括號表示可選 ls -l #以列表方式顯示文件的詳細信息 ls -a #顯示隱藏文件,隱藏文件的文件名以.開頭 ls -al # ls --help #查看命令參數
drwxr-xr-x 2 python python 4096 3月 28 11:20 Templates drwxr-xr-x 2 python python 4096 3月 28 11:20 Videos
第一部分:表示文件類型 d代表目錄,-代表普通文件,l代表軟連接
第2部分,2-10列代表文件的權限:rwxr-xr-x.
第3部分:數字代表文件的鏈接數
第四部分:root代表文件的所有者
第5部分:root表示文件屬於哪個用戶組
第6部分:數字的表示文件大小,以字節爲單位
第7部分:時間,表示文件的修改時間
第8部分:文件名~~~shell #文件權限 drwxr-xr-x. 2 root root 4096 Nov 20 07:36 tmp r:read 可讀 w:write 可寫 x:excute 可執行 -:表示無權限 權限: 2-4位 ower 文件的所有者 5-7位 group:用戶組 8-10位 other:其他用戶
-
ll
以列表方式顯示,其實是ls -l的別名 白色代表普通文件 綠色代表可執行文件 藍色代表目錄
-
man命令
#命令的幫助文檔 sudo apt-get install man #用法: man 命令名 常用的快捷鍵 空格 f 下翻頁 b 上翻頁 shift + g 到文件末尾 g 文件開頭 q 退出 上下箭頭 前翻和後翻 回車鍵 後翻 home 回到開始
-
history命令
查看你敲過的命令
-
硬鏈接和軟連接
文件都有文件名與數據,這在 Linux 上被分成兩個部分:用戶數據 (user data) 與元數據 (metadata)。用戶數據,即文件數據塊 (data block),數據塊是記錄文件真實內容的地方;而元數據則是文件的附加屬性,如文件大小、創建時間、所有者等信息。在 Linux 中,元數據中的 inode 號(inode 是文件元數據的一部分但其並不包含文件名,inode 號即索引節點號)纔是文件的唯一標識而非文件名。文件名僅是爲了方便人們的記憶和使用,系統或程序通過 inode 號尋找正確的文件數據塊。
爲解決文件的共享使用,Linux 系統引入了兩種鏈接:硬鏈接 (hard link) 與軟鏈接(又稱符號鏈接,即 soft link 或 symbolic link)。鏈接爲 Linux 系統解決了文件的共享使用,還帶來了隱藏文件路徑、增加權限安全及節省存儲等好處。
- 一個 inode 號對應多個文件名,則稱這些文件爲硬鏈接
link 源文件名 新文件名 ln 源文件名 新文件名 stat 文件名 #查看文件信息 ls -i #查看目錄下文件的硬鏈接數 python@ubuntu:/csl$ ls -la total 4 913923 lrwxrwxrwx. 1 root root 5 Mar 18 16:20 2.txt -> 1.txt 913926 -rw-r--r--. 2 root root 0 Mar 18 19:58 31.txt 913926 -rw-r--r--. 2 root root 0 Mar 18 19:58 32.txt 913925 -rwxr-xr-x. 1 root root 0 Mar 18 17:29 5.txt 913924 drwxr-xr-x. 2 root root 4096 Mar 18 17:29 test # 硬鏈接的特點: 1.只能對已存在的文件進行創建; 2.不能交叉文件系統進行硬鏈接的創建; 3.不能對目錄進行創建,只可對文件創建; 4.刪除一個硬鏈接文件並不影響其他有相同inode 號的文件。
- 軟連接
軟鏈接與硬鏈接不同,若文件用戶數據塊中存放的內容是另一文件的路徑名的指向,則該文件就是軟連接。軟鏈接就是一個普通文件,只是數據塊內容有點特殊。軟鏈接類似快捷方式
ln -s 源文件 目標文件。
軟連接的特點:
軟鏈接有自己的文件屬性及權限等;
可對不存在的文件或目錄創建軟鏈接;
軟鏈接可交叉文件系統;
軟鏈接可對文件或目錄創建;
創建軟鏈接時,鏈接計數 i_nlink 不會增加;
刪除軟鏈接並不影響被指向的文件,但若被指向的原文件被刪除,則相關軟連接被稱爲死鏈接
三、目錄管理
-
絕對路徑和相對路徑
linux的目錄和windows不同,不區分盤符,只有一個根目錄,根目錄用/表示。
- 絕對路徑:從根目錄到當前文件(目錄)的路徑,比如:/home/python
- 相對路徑:以當前目錄爲基準,表示上級目錄或子目錄
- 用 . 表示當前目錄,一般執行shell腳本可以用 . 1.sh或者 ./1.sh
- 用…表示上級目錄
- linux目錄分隔符只能用正斜線(/)表示
- 用 ~ 表示用戶主目錄,用 - 表示來源目錄(你從哪個目錄切換到當前目錄的)
-
目錄切換
cd 目錄名 #切換目錄 . #當前目錄 .. #代表上級目錄 / #代表根目錄 ~ #用戶家目錄 root用戶的家目錄/root 普通用戶的家目錄/home/用戶名 cd /etc/yum.repos.d cd / #切換到根目錄 cd - #切換到來源目錄 cd ~ #返回用戶的家目錄 pwd #顯示當前的目錄名
-
提示信息
[root@localhost ~]# cd / [root@localhost /]$ root代表用戶名 localhost 主機名 ~ 用戶的家目錄 / 根目錄 # 表示超級管理員在操作 $ 普通用戶在操作
-
創建目錄
sudo mkdir 目錄名 sudo mkdir -p 目錄名 #遞歸創建目錄 sudo mkdir -p h1801/1/2 sudo mkdir -p 1/{2,3}/{4,5,6} #
-
刪除目錄 rmdir
sudo rmdir [option] 目錄名 #刪除的時候目錄必須爲空 sudo rmdir -p 目錄名 #遞歸刪除空目錄 sudo rmdir -p 1/2/3 #1,2,3目錄都必須不能有文件
四、文件操作
-
文件創建
sudo touch 文件名 [文件名2] [文件名3].... #創建多個空文件,如果文件存在,自動忽略,不會覆蓋 echo 'hello world' > 1.txt #可以將顯示內容輸出到文件,但會覆蓋原來的內容,文件不存在則創建 echo '世界,你好' >> 1.txt #將顯示內容追加到文件末尾,文件不存在則創建 # > >> 輸出重定向
-
文件移動
sudo mv 源文件 目標文件 #銷燬原件 sudo mv 1.txt ./lpl/ #將1.txt移動到字目錄lpl下,文件名不變 sudo mv 1.txt 2.txt #如果在同一個目錄就是文件重命名 將1.txt重命名爲2.txt
-
文件拷貝
sudo cp 源文件 目標文件 sudo cp -r 源目錄 目標目錄 #遞歸拷貝目錄
-
文件刪除
sudo rm 文件名 sudo rm -i 文件名 #刪除前逐一確認 sudo rm -f 文件名 #刪除文件不帶提示 sudo rm -rf 目錄名 #遞歸刪除目錄
-
文件查看
cat 文件名 #輸出文件內容,從前往後輸出, tac 文件名 #cat的反寫,從後往前輸出 head -n N 文件名 #顯示文件的前幾行,可以指定查看的行數,默認顯示10行 tail -n N 文件名 #顯示文件的最後幾行,可以指定查看的行數 tail -f cat 文件名 #實時顯示文件內容 watch -d -n 秒殺 cat 文件名 #實時顯示文件內容 有高亮 sudo vi 文件名 more 文件名 #從前往後查看,可以翻屏 ,不能往前翻 回車一行行查看,空格翻屏 q退 less 文件名 #和more類似,可以前翻頁,g首頁 G尾頁,b前翻頁,空格和f後翻頁,q退出 stat 文件名 #查看文件詳細信息 stat 2.txt File: `2.txt' Size: 146 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 913936 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-9-19 21:44:49.108999194 -0500 Modify: 2017-9-19 21:44:43.773000078 -0500 Change: 2017-9-19 21:44:43.775000065 -0500
-
文件查找
- find
# find 用於在系統內搜索指定文件 用法: find [路徑] [參數] -name 按文件名查找 -mtime +/-n #-n表示n天以內修改的文件,+n表示修改超過n天的文件 -user #按文件屬主查找 -size [+/-]n[c/k/M/G] #查找文件長度爲n塊,+表示大於,-表示小於;c是字節 -perm 權限數值 #按照文件權限進行查找 find / -name "文件名" #從根目錄查找指定文件名的文件 find /csl/sh1702 -name "2.txt" #查找指定目錄先的文件 find /tools -mtime -3 #查找tools目錄下修改時間是3天以內的文 find /tools -size 12c #查找長度爲12字節的文件 find /var ‐perm 0642 ‐size +10k ‐size ‐100k ‐name '*.log' #在/var目錄下,查找10-100k grep hello 2.txt #查找文件內容 ls -al | grep 1.php # |管道操作,將ls -al操作結果傳遞給grep,grep 在查找結果搜索指定文件名 which 命令名 #查找命令 whereis 文件名 #只能搜索命令、源文件、二進制文件
- grep
#grep 用於搜索文件內容 用法: grep [options] 'pattern' filename -i 不區分大小寫 -r 遞歸查找子目錄 -l 列出文件內容符合指定的範本樣式的文件名稱。 -n 顯示行號 -w 只匹配單詞,不是匹配單詞一部分 -E 按正則表達式搜索 --include '*.py' #僅搜索py文件 --exclude '*.py' #不搜索py文件 #只在目錄中所有的.php和.html文件中遞歸搜索字符"echo" grep "Root" -w -n -i /etc/passwd
-
文件內容統計(wc)
用法: wc [options] [文件列表] -l 統計有多少行 -w 統計有多少單詞 $ wc -l /etc/passwd #統計passwd有多少用戶
-
awk
awk就是把文件逐行的讀入,以空格爲默認分隔符將每行切片,切開的部分再進行各種分析處理。
語法:awk '{pattern + action}' {filenames} cat /etc/passwd |awk -F ':' '{print $1}' #$1顯示第一列 -F 指定分割符爲':'
-
sort
sort將文件/文本的每一行作爲一個單位,相互比較,比較原則是從首字符向後,依次按ASCII碼值進行比較,最後將他們按升序輸出。
sort(選項)(參數) 選項: -u忽略相同行 -k 按指定列排序 -n 按數值排序 -t 分割符 -r 逆序 #指定passwd文件按第三列 的數值比較,列之間的分隔符爲: cat /etc/passwd | sort -n -t ':' -k 3
五. 文件權限
1.文件權限修改
-rwxr-xr-x. 1 root root 24 Nov 21 20:26 1.sh
-rw-r--r-x. 1 root root 0 Nov 20 07:37 1.txt
-rw-r--r--. 1 root root 0 Nov 20 07:37 2.txt
#1.數字表示
r 4 100 讀
w 2 010 寫
x 1 001 執行
- 0 沒有權限
rwx 7 可讀可寫可執行
rwxrw-r-- 764 文件擁有者可讀可寫可執行 文件所屬的組可讀可寫 其他人可讀
#2.符號表示
u 表示文件的擁有者
g 文件所屬的組
o 其他人
a 所有的人 all
u+/-/= u=rwx g+x o-r
+ 表示增加權限
- 削減權限
= 賦權限
chmod o-x 32.txt #削減其他用戶的可執行權限
chmod a=rwx 32.txt #給所有人賦可讀可寫可執行權限
chmod o+x,g+w 32.txt
chmod o=x 32.txt
-
chmod
~~~
用法:
chmod 權限 文件名/目錄
chmod -R 權限 目錄 遞歸修改目錄及其子目錄的所有文件的權限#數字表示 chmod 641 1.sh #符號表示 chmod a=rwx 1.sh chmod g-w 1.sh chmod -R o+w tmp #遞歸修改tmp及其子目錄中所有文件的權限 ~~~
-
chown(change owner) 修改文件的所有者
要求:所有者必須在/etc/passwd文件中 chown 用戶名 文件名/目錄名 chown 用戶名:組名 文件名/目錄名 chown :組名 文件名/目錄名 chown -R 用戶名 文件名/目錄名 chown csl 1.sh chown csl:csl 1.sh #修改用戶和所屬組
-
修改用戶組 chgrp(change group )
chgrp 組名 文件名/目錄名 chgrp -R 組名 文件名/目錄名 chgrp -R csl tmp #遞歸修改tmp及其子目錄下文件所屬組
-
lsattr/chattr 修改和查看文件只讀屬性
lsattr 文件名 查看文件的只讀屬性,使用ls無法查看
chattr +/-i 文件名 給文件增加或去除只讀屬性
chattr +/-a 文件名 只能追加數據,不能修改或刪除
lsattr 3.py #3.py有隻讀屬性
----i--------e- 3.pychattr -i 3.py #去掉只讀屬性
chattr +i 3.py #添加只讀屬性
六. 用戶管理
-
用戶和組
- 一個用戶必須有一個主組
- 一個用戶可以有多個組
- 一個組可以有多個用戶
- 用戶賬戶的信息存放在/etc/passwd文件中;用戶的密碼存放到/etc/shadow,該文件只有root可以修改;組賬戶信息存放到/etc/group中
-
useradd 添加一個用戶
~~~ 用法: useradd [-gud] 用戶名 -g 指定主組名或組id -u 指定用戶的id -m 自動建立用戶主目錄 -d 指定用戶的家目錄 -s 指定用戶登錄後使用shell,默認是/bin/bash #創建一個用戶沒有指定組,則默認創建一個和用戶名一樣的組,作爲用戶的主組 所有的用戶都在/etc/passwd文件中 luoming:x:501:501::/home/luoming:/bin/bash 用戶名 密碼 用戶id 用戶所屬組的id 用戶的家目錄 shell uid gid #Ubuntu 特別提供了一個adduser 命令以交互模式創建用戶, adduser csl ~~~
- 刪除用戶 userdel
userdel -r 用戶名 刪除用戶同時刪除家目錄(家目錄要和用戶名一致才能刪除)
#如果用戶登錄了無法刪除,應該先切換用戶,然後kill -9 用戶進程號,然後在刪除
-
修改用戶信息 usermod
usermod [option] 用戶名 -u 用戶id -g 主組id -G 附屬組名稱 -a 將用戶添加到附屬組,必須與-G配合使用 -d 用戶的家目錄 -l 用戶登錄名 sudo usermod -u 1001 -g 999 -l lkz liwenkai sudo usermod -a -G csl python #將用戶python添加到附屬組csl中 sudo usermod -l newusername oldusername #修改用戶名
-
修改用戶密碼
用法:
passwd [-lu] 用戶名
-l 鎖定賬戶密碼
-u 解鎖賬戶密碼
root 可以修改其他用戶的密碼
普通用戶只能修改自己的密碼 -
su和sudo
Ubuntu默認禁止使用root賬戶,在系統安裝的時候,創建的第一個用戶作爲管理員(屬於sudo組),其權限要低於root,但比普通用戶高,普通用戶只能處理自己創建的東西,管理員可以安裝軟件、修改日期、刪除用戶等。在Ubuntu中一般看到提示符是$,當執行需要root權限操作的時候需要提升權限,我們可以使用sudo暫時提升用戶權限
我們也可以使用sudo切換用戶身份,可以切換到root或管理員,完成工作後再切換回來
用法:
sudo 命令 #需要輸入用戶自己的密碼
用法:
su 用戶名 #需要輸入目標用戶的密碼
root切換到普通用戶不用輸入密碼
普通用戶切換,必須輸入密碼
因爲Ubuntu默認提供root密碼,不能直接由su切換到root,可以先使用sudo來獲取root權限
$ sudo su root #臨時切換到root
#啓用root賬戶
$ sudo password root #根據提示爲root輸入密碼
7.其他命令
- id 查看用戶的id和組信息
- groups查看用戶的組
- whoami 查看當前的用戶是誰
七. 組管理
#添加一個組
groupadd 組名
1702:x:1001:
組名 密碼 gid
groupdel 組名 #刪除組
groupmod -n 新組名 舊組名
groups 顯示用戶的組
#所有的組信息都在/etc/group文件中記錄