Linux 基礎學習2 [TOC] 文件目錄結構 文件和目錄被組織成一顆倒置的樹狀結構 文件系統從根開始,“/” 文件名稱嚴格區分大小寫 隱藏文件以"."開頭 路徑的分隔符為"/" 文件命名規範 文件字元最長為255個字元 包括路徑在內文件名稱最長為4095個 顏色表示 藍色文件 目錄 綠色文件 可 ...
目錄
Linux 基礎學習2
文件目錄結構
- 文件和目錄被組織成一顆倒置的樹狀結構
- 文件系統從根開始,“/”
- 文件名稱嚴格區分大小寫
- 隱藏文件以"."開頭
- 路徑的分隔符為"/"
文件命名規範
- 文件字元最長為255個字元
- 包括路徑在內文件名稱最長為4095個
- 顏色表示
- 藍色文件 --> 目錄
- 綠色文件 --> 可執行文件,可執行的程式
- 紅色文件 --> 壓縮文件或者包文件
- 淺藍色文件 --> 鏈接文件,主要是使用
ln
命令建立的文件
- 白色文件 --> 一般性文件,如文本文件,配置文件,源碼文件等
- 紅色閃爍:表示鏈接的文件有問題
- 黃色:表示設備文件
- 灰色文件 -->其他文件
- 除了斜杠和NULL,其他所有字元都可以使用
- 對大小寫敏感
文件系統結構
- /boot 引導文件的存放位置,內核文件、引導載入器都在此目錄
- /bin 所有的用戶都可以使用的命令
- /sbin 管理類的命令
- /lib 啟動時程式使用的基本庫文件 .so結尾
- /lib64 專門存放X86_64系統上得輔助庫文件
- /etc 存放配置文件
- /home/USERNAME 普通用戶的家目錄
- /root 管理員的家目錄
- /media 攜帶型移動設備的掛載點
- /mnt 臨時文件的掛載點
- /dev 設備文件和特殊文件的存放位置
- /opt 第三方的應用的安裝位置
- /tmp 臨時文件的存放位置
- /usr 存放安裝程式
- /var 存放經常變化的文件,比如日誌
- /proc 存放內核啟動和進程相關的虛擬文件
- /sys 輸出當前系統上的硬體相關的文件
- /srv 系統上允許的服務用到的數據
linux應用程式的組成
- 二進位文件
- /bin
- /sbin
- /usr/bin
- /usr/sbin
- /usr/local/bin
- /usr/local/sbin
- 庫文件
- /lib
- /lib64
- /usr/lib
- /usr/lib64
- /usr/local/lib
- /usr/local/lib64
- 配置文件
- /etc
- /etc/name
- /usr/local/etc
- 幫助文件
- /usr/share/man
- /usr/share/doc
- /usr/local/share/man
- /usr/local/share/doc
絕對路徑和相對路徑
- 絕對路徑
- 以根開始
- 完整的文件的存放位置
- 可以讀取到任何一個文件或者文件夾
- 相對路徑
- 不以根開始
- 相對當前的位置來決定
- 可以簡短的表示一個文件或者文件夾
- . 當前目錄
- .. 父級目錄
目錄名和基名
[root@localhost log]#basename /etc/sysconfig/network-scripts/ifcfg-ens33
ifcfg-ens33
[root@localhost log]#basename /etc/sysconfig/network-scripts
network-scripts
[root@localhost log]#dirname /etc/sysconfig/network-scripts
/etc/sysconfig
[root@localhost log]#dirname /etc/sysconfig/network-scripts/ifcfg-ens33
/etc/sysconfig/network-scripts
切換目錄
cd 切換目錄 change directory
- 可以使用相對路徑
- 可以使用絕對路徑
切換到家目錄
[root@localhost log]#cd
[root@localhost ~]#
切換到上一次的目錄
[root@localhost ~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cd -
/root
[root@localhost ~]#cd -
/etc/sysconfig/network-scripts
顯示當前的工作目錄
pwd print working directory
[root@localhost network-scripts]#pwd
/etc/sysconfig/network-scripts
# 查看鏈接的真正目錄
[root@localhost /]#cd lib
[root@localhost lib]#pwd -P
/usr/lib
列出目錄或者文件
ls list
命令格式:Usage: ls [OPTION]... [FILE]...
ls -a 顯示所有文件
[root@root ~]# ls -a
. .cshrc file15 file3 .passwd.swo
.. file1 file16 file4 .tcshrc
anaconda-ks.cfg file10 file17 file5 teaching_plan.zip
ls -l 以長格式顯示文件列表
[root@root ~]# ls -l
total 8
-rw-------. 1 root root 1414 Aug 22 2019 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Mar 1 18:28 file1
-rw-r--r--. 1 root root 0 Aug 22 17:21 10
許可權 硬碟的引用次數 屬主 屬組 大小 訪問時間 文件名稱
ls -R 遞歸顯示目錄
[root@root ~]# ls -R
.:
anaconda-ks.cfg file12 file16 file2 file5 file9
file1 file13 file17 file20 file6 teaching_plan.zip
ls -d 顯示目錄本身
[root@root ~]# ls -d
.
ls -1(數字1) 文件分行顯示
[root@root ~]# ls -1
anaconda-ks.cfg
file1
file10
file11
file12
ls -S 安裝文件大小排序
[root@root ~]# ls -S
teaching_plan.zip file11 file15 file19 file4 file8
ls -r 倒序顯示
[root@root ~]# ls -r
teaching_plan.zip file6 file20 file17 file13 file1
ls -t 按照時間來排序
[root@root ~]# ls -t
file18 file11 file15 file3 file7 teaching_plan.zip
ls -lh 顯示人類易讀的方式
[root@root ~]# ls -1h
anaconda-ks.cfg
file1
file10
file11
file12
file13
ls -d */ 顯示當前目錄下的文件夾
l. 只顯示隱藏文件
linux下的目錄類型
- - 用來表示文件
- d 用來表示目錄
- b 塊設備
- c 字元設備
- l 表示符號鏈接文件
- s socket套接字
查看文件狀態
File: ‘anaconda-ks.cfg’
Size: 1747 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 33574992 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2019-08-22 12:09:03.288000381 +0900 # 訪問時間
Modify: 2019-08-22 11:47:12.262947345 +0900 # 修改時間
Change: 2019-08-22 11:47:12.262947345 +0900 # 改動時間
atime 訪問時間 查看文件內容就會改變
mtime 修改時間 改變內容發生變化
ctime 改動時間 元數據發生變化
touch
創建空文件和刷新時間,如果文件存在,則刷新時間,如果文件不存在,則創建文件
-a 只修改atime和ctime
-m 只修改mtime和ctime
文件通配符
- * 所有
- ? 匹配的是任意單個字元
- ~ 表示用戶的家目錄
- [123] 其中一個
- [^123] 取反
- [0-9] 表示數字
- file[a-z] 字母(有坑)缺少Z
- file[A-Z] 字母(有坑)缺少a
- [:lower:] 小寫字母
- [:upper:] 大寫字母
- [:alpha:] 所有字母 a-zA-Z
- [:alnum:] 表示字母和數字
- [:digit:] 表示數字
創建目錄
mkdir 創建目錄
- -p 遞歸創建
- -v 顯示詳細過程
顯示目錄樹
安裝:yum install -y tree
tree 顯示目錄樹
[root@root ~]# tree
.
├── anaconda-ks.cfg
├── file1
├── file10
├── file11
├── file12
├── file13
├── file14
├── file15
├── file16
├── file17
├── file18
├── file19
├── file2
├── file20
├── file3
├── file4
├── file5
├── file6
├── file7
├── file8
├── file9
└── teaching_plan.zip
0 directories, 22 files
-d 只顯示文件夾
[root@root ~]# tree -d
.
0 directories
-L # 只顯示#層
[root@root ~]# tree -L 1
.
├── anaconda-ks.cfg
├── file1
├── file10
├── file11
├── file12
├── file13
├── file14
├── file15
├── file16
├── file17
├── file18
├── file19
├── file2
├── file20
├── file3
├── file4
├── file5
├── file6
├── file7
├── file8
├── file9
└── teaching_plan.zip
0 directories, 22 files
刪除目錄
rmdir 只能刪除非空目錄
-p 遞歸刪除空父目錄
-v 顯示刪除過程
rm -rf 刪除非空目錄
複製文件和文件夾
cp copy 預設情況下是別名,原來本身命令是不提示覆蓋的
Usage: cp [OPTION]... [-T] SOURCE DEST
or: cp [OPTION]... SOURCE... DIRECTORY
or: cp [OPTION]... -t DIRECTORY SOURCE...
-i 顯示提示信息
-n 不覆蓋
-r -R 遞歸複製
-d 只複製鏈接文件,不複製源文件
-a 歸檔
-v 顯示過程
-b 備份原來的文件
--backup=number 備份文件加上數字
-p 保留原來的屬性
- 如果源文件是文件的話
- 目標是文件
- 目標文件如果不存在的話,則新建目標文件,並把內容寫到目標文件中
- 如果目標文件存在的話,本來的命令是直接覆蓋,建議使用-i來提示用戶
- 目標是文件夾
- 在文件夾中新建一個同名的文件,並把文件內容寫到新文件中
- 目標是文件
- 如果源文件為多個文件的話
- 目標必須是文件夾,文件夾必須存在,其他情況都會報錯
- 如果源文件是文件夾的話
- 目標文件是文件: 不可以
- 目標文件必須是文件夾,必須使用-r選項
- 如果目標文件不存在:則直接創建目標文件夾,並把源文件夾的數據都複製到目標文件夾
- 如果目標文件存在:
- 如果是文件的話,則報錯
- 如果是文件夾:則在目標文件夾中創建同名文件夾,並把所有數據都複製到新文件夾
移動、重命名
mv move
Usage: mv [OPTION]... [-T] SOURCE DEST
or: mv [OPTION]... SOURCE... DIRECTORY
or: mv [OPTION]... -t DIRECTORY SOURCE...
-i 提示
-f 強制
-b 備份
--backup=number 備份後面加數字
-v 顯示過程
刪除
rm remove
Usage: rm [OPTION]... FILE...
-i 提示
-r -R 遞歸刪除
-f 強制刪除
rm -rf 慎用
rm -rf /*
cd /
rm -rf *
鏈接
軟鏈接
- 相當於windows的快捷方式
- 創建命令 ln -s 源文件 目標文件
- 可以對目錄做軟鏈接
- 指向另外的一個文件或者目錄的路徑,大小是路徑的長度的字元
- 對磁碟引用次數沒有影響
- 可以跨分區
- 源文件發生改變,軟鏈接會跟著發生變化
源文件刪除,軟鏈接不能訪問
硬鏈接
- 磁碟引用次數會發生變化
- 指向的是硬碟上的同一塊區域
- 磁碟的引用數會隨著硬鏈接次數來增加
- 不能對目錄做硬鏈接
- 不能跨越分區
- 源文件發生改變,硬鏈接也會跟著變化
源文件刪除以後,硬鏈接可以訪問
查看文件類型
file
輸入和輸出
- 標準輸入 預設是來自鍵盤的輸入 stdin 0
- 標準輸出 預設輸出到終端視窗 stdout 1
- 標準錯誤輸出 預設輸出到終端視窗 stderr 2
I/O重定向
> 覆蓋
- > 將標準輸出重定向到文件中
- 2> 將錯誤輸出重定向到文件中
- &> 將所有的輸出都重定向到文件中
禁止、允許覆蓋
- 禁止覆蓋 set -C
- 允許覆蓋 set +C
>> 追加
>> 將標準輸出追加到文件中
2>> 將錯誤輸出追加到文件中
&>> 將所有輸出追加到文件中
標準輸入和錯誤輸入分開保存
[root@localhost ~]#ls f 45yuio > log.log 2> error.log
[root@localhost ~]#cat log.log
f
[root@localhost ~]#cat error.log
ls: cannot access 45yuio: No such file or directory
合併所有的輸出
- &> 覆蓋重定向
- &>> 追加重定向
- command > file 2>&1
- command >> file 2>&1
- ():合併多個文件的輸出
- /dev/null 黑洞
從文件導入stdin
tr 字元替換
-t 截斷
-d 刪除
-s 壓縮,去重
-c 取反
[root@localhost ~]#tr 'a-z' 'A-Z' < /etc/issue
\S
KERNEL \R ON AN \M
[root@localhost ~]#tr 'a-z' 'A-Z'
qwertyy
QWERTYY
12345678
12345678
ASDFGHJ
ASDFGHJ
qwertyuio
QWERTYUIO
^C
[root@localhost ~]#tr ab 12
ab
12
abb
122
asdfghjkl
1sdfghjkl
^C
[root@localhost ~]#tr abc 12
ab
12
abc
122
abc
122
^C
[root@localhost ~]#tr ab 123
ab
12
abb
122
avc
1vc
qbc
q2c
abc
12c
[root@localhost ~]#tr -t abc 12
abc
12c
ab
12
[root@localhost ~]#tr -d abc
qwertyui
qwertyui
an^H^H
n
abc
artyibrtyuiocrtyuiop
rtyirtyuiortyuiop
^C
[root@localhost ~]#tr -d abc < /etc/issue
\S
Kernel \r on n \m
[root@localhost ~]#cat /etc/issue
\S
Kernel \r on an \m
[root@localhost ~]#tr -s a
abc
abc
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabc
abc
^C
[root@localhost ~]#tr -sc a
aasdaaaaaaa
aasdaaaaaaa
^[[A^H^H^C
[root@localhost ~]#tr -sc a
aaaaaaaaabbbbbbbbbbbbbccccccccddddddddddd
aaaaaaaaabcd
[root@localhost ~]#tr -dc a
aaaaaaaaaaaabbbbbbbbbb
asdfghjkqwertyuiozxcvbnmxcvbnm,.
aaaaaaaaaaaaa
ctrl+d 結束
[root@localhost ~]#tr -dc "a\n"
asdfghjk
a
wertyujk;l'
asdfghj
a
[root@localhost test]#tr -d a < issue > issue 處理完成以後不能寫會到源文件,要寫到新的文件中
[root@localhost test]#seq 1 10 > b
[root@localhost test]#cat b
1
2
3
4
5
6
7
8
9
10
[root@localhost test]#tr -d "\n" < b
12345678910[root@localhost test]#tr -d "\n" < b
[root@localhost test]#tr "\n" " " <b
1 2 3 4 5 6 7 8 9 10 [root@localhost test]#tr "\n" " " <b >c
[root@localhost test]#cat c
1 2 3 4 5 6 7 8 9 10 [root@localhost test]#tr " " "\n" <c
1
2
3
4
5
6
7
8
9
10
多行發送給stdin
# 第一種方式
[root@localhost test]#cat > f1
qwert
wertyui
wertyui
wertyuiopasdfghjk
sdfghjkl
sdfyhjkl;sdfghjkl;xcvb
# 第二種方式
[root@localhost test]#cat > f2 <<EOF
> qwerty
> qwertyu
> wertyui
> qwertyu
> EOF
EOF 不是必須得,只要兩個相同就可以
管道
管道使用“|”來表示
命令1|命令2|命令3
- 把命令1的輸出結果當做命令2的輸出結果,把命令2的輸出結果當成命令3的輸入結果
- 預設情況下,管道只能傳送標準輸出
- 如果需要把錯誤輸出也傳遞,則需要|&
- 一般用來組合多個命令
- 有一些命令是不接受管道的
[root@localhost test]#ls f1|tr 'a-z' 'A-Z'
F1
[root@localhost test]#ls f
ls: cannot access f: No such file or directory
[root@localhost test]#ls f|tr 'a-z' 'A-Z'
ls: cannot access f: No such file or directory
[root@localhost test]#ls f|&tr 'a-z' 'A-Z'
LS: CANNOT ACCESS F: NO SUCH FILE OR DIRECTORY
[root@localhost test]#echo file{1..20}|touch
touch: missing file operand
Try 'touch --help' for more information.
作 者:郭楷豐
出 處:https://www.cnblogs.com/guokaifeng/
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角 【推薦】一下。您的鼓勵是博主的最大動力!
自 勉:生活,需要追求;夢想,需要堅持;生命,需要珍惜;但人生的路上,更需要堅強。帶著感恩的心啟程,學會愛,愛父母,愛自己,愛朋友,愛他人。