文件目錄結構
ls 查看文件
ll 查看詳細文件
- 文件和目錄被組織成一顆倒置的樹狀結構
- 文件系統從根開始,'/'
- 文件名嚴格區分大小寫
- 隱藏文件以.開頭
- 文件的分隔符為'/'
文件命名規范
- 文件字符最長的字符為255
- 包括路徑在內文件名稱最長為4095個
- 顏色
- 藍色 --> 文件夾
- 綠色 --> 可執行文件
- 紅色 --> 壓縮文件
- 晴朗藍 --> 鏈接文件(windows中快捷方式)
- 灰色 --> 其他文件
- 白色 --> 文件
- 除了 '/'和NULL.其他所有字符都可以使用
- 對大小寫敏感
文件系統結構
/boot # 引導文件的存放位置,內核文件,引導加載器都在此目錄
/bin # 所有用戶都可以使用的命令.
/sbin # 管理類命令,即root用戶可以使用的命令. system 管理
/lib # 啟動時程序使用的基本庫文件,windows庫文件以.dll結 尾,linux庫文件以.so結尾
/lib64 # 存放x86-64系統上的輔助庫文件,windows系統中 program files/program files(x86)
/etc # 存放配置文件的目錄
/home # 普通用戶家目錄
/root # 管理員家目錄
/media # 便攜式移動設備的掛載點
/mnt # 臨時文件的掛載點
/dev # 設備文件(硬件設備)和特殊文件存放位置
/opt # 第三方的應用安裝位置
/tmp # 重啟之后清空此文件夾下文件,臨時文件的放置點,類似於windows回收站
/usr # 存放安裝程序
/var # 存放經常變化的文件,比如目錄. /var/log
/proc # 存放內核啟動和進程相關的虛擬文件,(進程被表示文件)
/sys # 輸出當前系統上的硬件相關文件
/srv # 系統上允許永達ode數據
linux應用程序的組成
- 二進制文件
- /bin
- /sbin
- /usr/bin
- /usr/sbin
- /usr/local/bin
- /usr/loacl/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
- 可以使用相對路徑
- 可以使用絕對路徑
切換家目錄
cd # 切換家目錄
cd - # 回到上一次目錄
顯示當前的工作目錄
pwd # 顯示當前工作目錄 print working directory
[root@localhost network-scripts]#pwd
/etc/sysconfig/network-scripts
pwd -p # 查看鏈接的真正目錄
[root@localhost /]# cd lib
[root@localhost lib]# pwd -p
/usr/lib
列出目錄或者文件
-rw-r--r--. | 1 | root root | 0 | Aug 22 17:21 | 10 |
---|---|---|---|---|---|
權限 | 硬盤引用次數 | 屬主 屬組 | 大小 | 訪問時間 | 文件名稱 |
ls list
ls -a # 顯示所有文件
ls -l # 以長格式顯示文件列表
-rw-r--r--. 1 root root 0 Aug 22 17:21 10
權限 硬盤引用次數 屬主 屬組 大小 訪問時間 文件名稱
ls -R # 遞歸顯示目錄
ls -d # 顯示目錄本身
ls -1 # 文件分行顯示
ls -S # 按照文件大小排序
ls -r # 倒序顯示
ls -t # 按照時間排序
ls -lh # 顯示人類易讀方式
ls -d */ # 顯示當前目錄下文件夾
ls l. # 只顯示隱藏文件
ls -lut # 時間倒敘排列
# 這里全是段命令可以自由組合
linux下的目錄類型
- 用來表示文件
d 用來表示目錄
b 塊設備
c 字符設備
| 表示符號鏈接文件
s socket套接字文件
stat查看文件狀態
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
# Size 磁盤大小 Blocks 塊大小 IO Block Io塊大小
# Access 權限 Uid 用戶
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 # 改動時間
Access # 最近訪問時間 atime 查看cat文件內容就會改變
Modify # 最近修改時間 mtime 改變內容時發生變化
Change # 最近改動時間 ctime 元數據發生變化就會改變
touch
創建空文件和刷新時間,如果文件存在,則刷新時間,不存在則創建文件
touch -a 修改atime和ctime
touch -m 修改mtime和ctime
# 無論是-a 還是-m ctime都會改變
文件通配符
* # 表示0-多個字符
? # 匹配任意單個字符
~ # 表示家目錄
[123] # 表示其中一個
[-] # 范圍
# 根據ascii碼
file[a-z] # 字母(有坑) 缺少Z
file[A-Z] # 字母(有空) 缺少a
[^] # 取反
[:lower:] # 小寫字母
[:upper:] # 大寫字母
[:alpha:] # 所有字母
[:alpha:] # 所有字母
[:alnum:] # 表示字母和數字
[:digit:] # 表示數字
創建目錄
mkdir # 創建目錄
-p a/b/c # 遞歸創建
-v # 顯示創建詳細過程
顯示目錄樹
yum install-y tree # 安裝目錄樹
tree # 顯示目錄樹
tree -d # 僅顯示文件夾
-L num # 僅顯示num層,排除當前目錄
刪除目錄
rmdir # 只能刪除非空目錄
-p # 遞歸刪除空父目錄
-v # 顯示刪除過程
rm -rf # 刪除非空目錄
復制文件和文件夾
cp copy默認情況下是別名,原來本身命令(\cp)是不提示覆蓋
使用方法:
Usage: cp [OPTION]... [-T] SOURCE DEST
or: cp [OPTION]... SOURCE... DIRECTORY
or: cp [OPTION]... -t DIRECTORY SOURCE
cp # copy
-i # 顯示覆蓋提示信息
-n # 不覆蓋
-f # 非強制的
-R -r # 遞歸復制,如果復制文件夾,不加遞歸復制會報錯
-s # 拷貝一個鏈接文件
-d # 只復制鏈接文件不復制原文件
-a # 歸檔
-v # 顯示復制過程
-b # 覆蓋之前,備份原來的文件
--backup=number # 備份
-p # 復制時保留原來的屬性
- 如果源文件是文件
- 目標文件是文件
- 目標文件如果不存在,則新建目標文件,並把內容寫到目標文件中
- 如果目標文件存在,本來的命令是直接覆蓋.建議使用-i提示用戶.
- 目標是文件夾
- 在文件夾中新建一個同名的文件,並把文件內容寫到新文件中
- 目標文件是文件
- 如果原文件為多個文件
- 目標必須是文件夾,而且文件夾必須存在.其他情況都會報錯
- 如果原文件是文件夾
- 目標文件是文件:不可以
- 目標文件必須是文件夾,必須使用-r選項
- 如果目標文件不存在:則直接創建目標文件夾,並把原文件夾的數據都復制到目標文件夾
- 如果目標文件存在:
- 如果是文件,則報錯
- 如果是文件夾:則在目標文件夾中創建同名文件夾,並把目標放在新的文件夾中.
移動,重命名
mv move
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 *
# 這里需要提前用VMware 提前快照,然后恢復快照
# 右擊里面點擊拍攝快照
鏈接
軟鏈接
ln -s 源文件 目標文件 # 創建命令
1.相當於windows快捷方式
2.可以對目錄做軟鏈接,執行另外的一個文件或者目錄的路徑,大小是路徑的長度的字符
3.對磁盤引用次數沒有影響
4.可以跨分區
5.源文件發生改變,軟鏈接會跟着發生變化
6.源文件刪除,軟鏈接不能訪問,再添加相同名字時,即可引用
硬鏈接
ln 原文件 目標文件 # 創建硬鏈接
1.磁盤引用次數發生變化
2.指向的是硬盤上的同一塊區域
3.硬盤的引用數會隨着硬鏈接的次數而增加
4.不能對目錄做硬鏈接
5.不能跨越分區
6.源文件發生改變,硬鏈接會發生改變
7.源文件刪除,硬鏈接可以訪問,磁盤引用數減少
CP
查看文件類型
file
輸入和輸出
1.標准輸入 默認是來自鍵盤的輸入 stdin 0
2.標准輸出 默認輸出到終端窗口 stdput 1
3.標准錯誤輸出 默認輸出到終端窗口 stderr 2
I/O重定向
> 覆蓋
1. > 將>標准輸出重定向到文件中
2. 2> 將錯誤輸出重定向到文件中
3. &> 將所有的輸出都重定向到文件中
禁止,允許覆蓋
1. 禁止覆蓋set -C
2. 允許覆蓋set +C
>> 追加
1. >> 將標准輸出追加到文件中
2. 2>> 將錯誤輸出追加到文件中
3. &>> 將所有的輸出都重定向到文件中
標准輸入和錯誤輸入分開保存
[root@localhost ~]# ls f 45yu > 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
- ():合並多個文件的輸出 (錯誤1;錯誤2) 2> file
- &> /dev/null(類似於黑洞,無限制接收)
- /dev/zero
從文件導入stdin\
tr 字符替換
# 參數
-t 截斷
-d 刪除
-s 壓縮,去重
-c 取反
tr字符替換
tr 'a-z' 'A-Z' < /etc/issue
# 按字符順序替換
tr ab 12
ab
12
abb
122
# 分贓不均則默認取最后
tr abc 12
abc
122
# 解決分贓不均問題(截斷)
tr -t abc 12
abc
12c
# 刪除
tr -d abc
a1b1c
11
# 去重
tr -s a
aaaaabc
abc
# 取反
tr -sc a
aasdaaaa
# tr -d a 默認會把回車刪掉,要ctrl+d刪除
# 解決辦法 tr -dc 'a\n'
讀入文件和輸出文件不能是同一文件,要寫到新的文件中
tr -d <issue>issue
多行發送給stdin
1. cat > f1
# ctrl c可以結束
2. cat > f2 <<EOF
# <<后面的值隨便寫,但是必須以它結束,約定俗成EOF
> EOF
# 結束,結束之后,才能顯示.
管道
管道使用 "|" 來表示
命令1|命令2|命令3
- 把命令1的輸出結果當做命令2的輸出結果,把命令2的輸出結果當做命令3的輸入結果
- 默認情況下,管道只能傳送標准輸出
- 如果需要把錯誤輸出也傳遞,則需要|&
- 一般用來組合多個命令
有一些命令是不接受管道的
# 如touch,cat等