一、linux文件系統結構
? sudo apt-get install treetree --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 ?-A ? ?#顯示除.和..以外的任何文件 ls ?-i ? ?#查看文件的節點號 ls ?--color #以不同顏色顯示文件、目錄、可執行文件 ls --help ?#查找幫助 ? ls t* ?# 查找以t開頭的文件
ls --help #查看命令參數
? drwxr-xr-x 2 python python ? ? 4096 3月 28 11:20 Templatesdrwxr-xr-x 2 python python ? ? 4096 3月 28 11:20 Videos
?
第一部分:表示文件類型 d代表目錄,- 代表普通文件,l代表軟連接,c 表示字符設備,b表示塊設備 第2部分,2-10列代表文件的權限:rwxr-xr-x. 第3部分:數字代表文件的鏈接數 第四部分:root代表文件的所有者 第5部分:root表示文件屬于哪個用戶組 第6部分:數字的表示文件大小,以字節為單位 第7部分:時間,表示文件的上次修改時間 第8部分:文件名
#文件權限drwxr-xr-x. 2 root root 4096 Nov 20 07:36 tmpr:read 可讀w:write 可寫x:excute 可執行-:表示無權限 ?權限(ugo):2-4位 ? ower 文件的所有者 ? ?5-7位 ? group:用戶組8-10位 other:其他用戶 ?
-
ll
以列表方式顯示,其實是ls -la的別名,這個配置在~/.bashrc中 白色代表普通文件 綠色代表可執行文件 藍色代表目錄
-
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 源文件 目標文件。軟連接的特點:軟鏈接有自己的文件屬性及權限等;可對不存在的文件或目錄創建軟鏈接;軟鏈接可交叉文件系統;軟鏈接可對文件或目錄創建;創建軟鏈接時,鏈接計數 inode 不會增加;刪除軟鏈接并不影響被指向的文件,但若被指向的原文件被刪除,則相關軟連接被稱為死鏈接
-
常見快捷鍵
快捷鍵 | 說明 |
---|---|
ctrl + c | 終止正在正在執行的命令 |
ctrl + a | 回到命令開始 |
ctrl + e | 回到命名結尾 |
ctrl + u | 清空命令行 |
ctrl + l 或者clear | 清屏 |
tab | 命令、文件名、目錄名自動補齊 |
-
常見命令錯誤
-
命令敲錯了 -bash: kkkd: command not found
-
多個空格
-
這個命令還沒有安裝 command not found
三、目錄管理
-
絕對路徑和相對路徑
linux的目錄和windows不同,不區分盤符,只有一個根目錄,根目錄用/表示。
-
絕對路徑:從根目錄到當前文件(目錄)的路徑,比如:/home/python
-
相對路徑:以當前目錄為基準,表示上級目錄或子目錄
-
用 . 表示當前目錄
-
用..表示上級目錄
-
-
linux目錄分隔符只能用正斜線(/)表示
-
用 ~ 表示用戶主目錄,用 - 表示來源目錄(你從哪個目錄切換到當前目錄的)
-
-
目錄切換
cd 目錄名 #切換目錄. #當前目錄.. #代表上級目錄/ ? #代表根目錄~ ? #用戶家目錄(宿主目錄) root用戶的家目錄/root ? 普通用戶的家目錄/home/用戶名cd /etc/yum.repos.dcd / #切換到根目錄cd - #切換到來源目錄cd ~ #返回用戶的家目錄cd ? #返回用戶的家目錄pwd #顯示當前目錄的絕對路徑名
-
提示信息
[root@localhost ~]# cd / [root@localhost /]$ root代表用戶名 localhost 主機名 ~ 用戶的家目錄 / 用戶當前所處的目錄(/ 根目錄) # 表示超級管理員在操作 $ 普通用戶在操作
-
創建目錄
sudo mkdir 目錄名 sudo mkdir -p 目錄名 ? #遞歸創建目錄 sudo mkdir -p h1802/1/2 ? python@ubuntu:~/tmp/2$ sudo mkdir -p 3/{4,5}/{6,7,8} python@ubuntu:~/tmp/2$ tree -L 3 . └── 3├── 4│?? ├── 6│?? ├── 7│?? └── 8└── 5├── 6├── 7└── 8 ?
-
刪除目錄 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 ../3.txt ./31.txt ? #移動到當前目錄下,改名為31.txt sudo mv 1.txt 2.txt ? #如果在同一個目錄就是文件重命名 將1.txt重命名為2.txt rename 's/原文件名中需要替換的部分/替換后的部分/' 源文件名 rename 's/tx/txt/' 2.tx #將2.tx替換為2.txt
-
文件拷貝
sudo cp 源文件 ? 目標文件 sudo cp -r 源目錄 ? 目標目錄 ? #遞歸拷貝目錄 sudo cp -r 4/8 5/7/ root@ubuntu:/home/python/tmp/2/3# tree -L 4 . ├── 4 │?? ├── 1.txt │?? ├── 42.js │?? ├── 8 │?? │?? ├── 2.php │?? │?? ├── 3.py │?? │?? └── 5.hello │?? └── 9.php └── 5├── 6│?? ├── 2.php│?? ├── 3.py│?? └── 5.hello├── 7│?? └── 8│?? ? ? ├── 2.php│?? ? ? ├── 3.py│?? ? ? └── 5.hello└── 8
-
文件刪除
sudo rm 文件名 sudo rm -i 文件名 #刪除前逐一確認 sudo rm -f 文件名 #刪除文件不帶提示 sudo rm -rf 目錄名 #遞歸刪除目錄,不管目錄是否為空
-
文件查看
cat 文件名 #輸出文件內容,從前往后輸出, cat 文件1 文件2 >> 文件3 # 將兩個文件合并指定文件tac 文件名 #cat的反寫,從后往前輸出head -n N 文件名 #顯示文件的前幾行,可以指定查看的行數,默認顯示10行 head -N 文件名tail -n N 文件名 #顯示文件的最后幾行,可以指定查看的行數(N) tail -N 文件名 # tail -f cat 文件名 #實時顯示文件內容watch -d -n 秒數 cat 文件名 #實時顯示文件內容 有高亮sudo vim 文件名 more 文件名 #從前往后查看,可以翻屏 ,不能往前翻 回車一行行查看,空格翻屏(f翻屏) q退出 less 文件名 #和more類似,可以前翻頁,g首頁 G尾頁,b前翻頁,空格和f后翻頁,q退出 stat 文件名 #查看文件詳細信息 #文件的三個時間:atime: accesstime 訪問時間mtime:modifytime 修改時間ctime: changetime 修改狀態時間(修改文件元數據)
-
文件查找
-
find
# find 用于在系統內搜索指定文件 用法:find [路徑] [參數] [文件名]-name 按文件名查找-iname 按文件名查找,不區分大小寫-mtime +/-n #-n表示n天以內修改的文件,+n表示修改超過n天的文件-user #按文件屬主查找-size [+/-]n[c/k/M/G] #查找文件長度為n塊,+表示大于,-表示小于;c是字節 -perm 權限數值 #按照文件權限進行查找-maxdepth N #查找的目錄深度-ls #以列表形式顯示-type [f/d/l] # 按類型查看-exec 執行shell命令,形式: -exec command {} \;find / -name "文件名" #從根目錄查找指定文件名的文件,如果不指定目錄,則從當前目錄查找 find . -name "文件名" #從當前目錄查找指定文件名的文件 find -name "文件名" #從當前目錄查找指定文件名的文件find /csl/sh1702 -name "2.txt" #查找指定目錄先的文件 find /tools -mtime -3 #查找tools目錄下修改時間是3天以內的文件 find /tools -mtime +3 #查找tools目錄下修改時間是3天以上的文件 find -mtime -3 -maxdepth 1 -lsfind /tools -size 12c #查找長度為12字節的文件 find /var ‐size +10k ‐size ‐100k ‐name '*.log' #在/var目錄下,查找10-100k find -size +10k -maxdepth 1 -ls#按文件的所屬用戶查找 find -maxdepth 1 -user root#刪除當前目錄及其子目錄下的所有后綴為txt的文件,注意{}和\中間有空格,最后有一個; find . -name '*.txt' -exec rm {} \; #只查找當前目錄下,權限是700的文件,并以列表形式顯示 find -perm 700 -maxdepth 1 -ls sudo find -maxdepth 2 -name '1.txt' -ls
-
grep
#grep 是global search regular expression(RE) and print out the line的縮寫,意思是全面搜索正則表達式并把行打印出來。是一種強大的文本搜索工具,它能使用正則表達式搜索文本內容,并把匹配的行打印出來。 用法:grep [options] 'pattern' filename-i 不區分大小寫-c 只顯示匹配行的數量-r 遞歸查找子目錄-l 列出文件內容符合指定的范本樣式的文件名稱。-n 顯示行號-w 只匹配單詞,不是匹配單詞一部分-E 按正則表達式搜索--color 以不同顏色顯示匹配的關鍵字--include '*.py' #僅搜索py文件--exclude '*.py' #不搜索py文件# 在1.txt搜索this,要按照完整單詞的模式進行匹配,并且顯示匹配行grep -n -w 'this' 1.txt#在當前目錄下所有文件中搜索this,并不同顏色顯示關鍵字sudo grep 'this' * --color顯示匹配行數sudo grep -c 'this' 1.txt搜索指定的1.txt,遞歸查找子目錄grep -r -w -l 'this' --include '1.txt'# 顯示當前目錄下所有的文件,不顯示目錄ls -la | grep -E '^-'| 管道符,他可以將前一個命令的輸出作為后一個命令的輸入
-
-
which和whereis
-
which 命令名 #查找命令
-
whereis 文件名 #只能搜索命令、源文件、二進制文件
-
-
文件內容統計(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 指定分割符為':' #列數從左向右: 1,2,3...
?
-
uniq
報告或刪除文件中重復的行。uniq只比較相鄰行,所以它一般會和sort命令進行組合使用。
用法:uniq [選項]... [文件] -c //在每行前加上表示相應行目出現次數的前綴編號 -d //只輸出重復的行 -D //只輸出重復的行,不過有幾行輸出幾行 -i //忽略大小寫
?
-
sort
sort將文件/文本的每一行作為一個單位,相互比較,比較原則是從首字符向后,依次按ASCII碼值進行比較,最后將他們按升序輸出。
sort(選項)(參數)選項:-u忽略相同行-k 按指定列排序-n 按數值排序-t 分割符-r 逆序#指定passwd文件按第三列 的數值比較,列之間的分隔符為:cat /etc/passwd | sort -n -t ':' -k 3 #查找你最常用的10條命令history | awk '{print $2}' | sort | uniq -c | sort -r -n -k 1 | head -n 10
?
五. 文件權限
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 000 沒有權限rwx 7 可讀可寫可執行rw- 6 可讀可寫r-x 5 可讀可執行r-- 4 可讀rwxrw-r-- 764 文件擁有者可讀可寫可執行 文件所屬的組可讀可寫 其他人可讀#2.符號表示u 表示文件的擁有者 g 文件所屬的組o 其他人a 所有的人 allu+/-/= u=rwx g+x o-r a+x == +x+ 表示增加權限- 削減權限= 賦權限chmod o-x 32.txt #削減其他用戶的可執行權限chmod a=rwx 32.txt #給所有人賦可讀可寫可執行權限chmod o+x,g+w 32.txtchmod o=x 32.txt
-
chmod
用法:chmod 權限 文件名/目錄chmod -R 權限 目錄 遞歸修改目錄及其子目錄的所有文件的權限#數字表示chmod 641 1.sh #符號表示chmod a=rwx 1.shchmod g-w 1.shchmod g-w,o+x 1.shchmod -R o+w tmp #遞歸修改tmp及其子目錄中所有文件的權限
-
chown(change owner) 修改文件的所有者
要求:所有者必須在/etc/passwd文件中chown 用戶名 文件名/目錄名 chown 用戶名:組名 文件名/目錄名chown :組名 文件名/目錄名chown -R 用戶名 文件名/目錄名chown csl 1.shchown csl:csl 1.sh #修改用戶和所屬組
-
修改用戶組 chgrp(change group )
組必須存在,組的信息在/etc/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#創建一個用戶沒有指定組,則默認創建一個和用戶名一樣的組,作為用戶的主組sudo useradd -u 1202 -g python -md /test2 -s /usr/sbin/nologin test2
所有的用戶都在/etc/passwd文件中luoming:x:501:501::/home/luoming:/bin/bash用戶名 密碼 用戶id 用戶所屬組的id 用戶的家目錄 shelluid gid#Ubuntu 特別提供了一個adduser 命令以交互模式創建用戶,sudo 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 liwenkaisudo 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暫時提升用戶權限
我們也可以使用su切換用戶身份,可以切換到root或管理員,完成工作后再切換回來
用法:sudo 命令 #需輸入用戶自己的密碼用法: su 賬戶名 #需要輸入目標用戶的密碼 root切換到普通用戶不用輸入密碼 普通用戶切換,必須輸入密碼 因為Ubuntu默認不提供root密碼,不能直接由su切換到root,可以先使用sudo來獲取root權限 $ sudo su root #臨時切換到root#啟用root賬戶 $ sudo password root #根據提示為root輸入密碼#設置sudo提升權限的時候不需要輸入密碼,需要修改/etc/sudoers文件sudo vi /etc/sudoers #也可以使用工具:sudo visudo編輯# Allow members of group sudo to execute any command #將sudo組添加NOPASSWD: %sudo ALL=(ALL:ALL) NOPASSWD: ALL #然后按esc :wq!#如果新添加的用戶不屬于sudo組,是不能使用sudo提升權限的,需要將用戶添加到sudo組 #以屬于sudo組的用戶登錄 sudo usermod -a -G sudo 用戶名
7.其他命令
-
id 查看用戶的id和組信息
-
groups查看用戶的組
-
whoami 查看當前的用戶是誰
七. 組管理
#添加一個組groupadd 組名1702:x:1001:組名 密碼 gidgroupdel 組名 #刪除組groupmod -n 新組名 舊組名groups 顯示用戶的組#所有的組信息都在/etc/group文件中記錄#用戶密碼在/etc/shadow