linux文件屬性和類型


Linux文件屬性和類型

1.linux文件屬性

第一種查看方式

[root@beua ~]# ls -l ks.cfg
-rw-------. 1 root root 4434 May 30 13:58 ks.cfg

-rw-------.    ①:第一個字符是文件類型,其他則是權限
1           ②:硬鏈接次數
root        ③:文件屬於哪個用戶
root        ④:文件屬於哪個組
4434         ⑤:文件大小
May30 13:58    ⑥⑦⑧:最新修改的時間與日期
ks.cfg       ⑨:文件或目錄名稱

2.linux文件類型

-rwxr-xr-x. 1 root root 117680 Oct 31 03:16 /bin/ls
srw-rw-rw-. 1 root root 0 Apr 3 16:57 /dev/log
brw-rw----. 1 root disk 8, 0 Apr 3 16:57 /dev/sda
crw--w----. 1 root tty 4, 1 Apr 3 16:57 /dev/tty1
lrwxrwxrwx. 1 root root 22 Mar 28 03:33 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
-rw-r--r--. 1 root root 158 Apr 1 18:09 /etc/hosts
prw-------. 1 root root 0 Apr 3 16:57 /run/dmeventd-client
drwxrwxrwt. 22 root root 4096 Apr 3 20:57 /tmp

#最前面那個字母含義:

- 通常指的是文件 s socket文件(mysql) b block 塊設備(磁盤\分區光盤) c 字符設備 l 鏈接文件(呈現淺藍色) p 管道文件 d 目錄文件(呈現藍色狀態)

第二種查看方式:

當無法通過ls -l的屬性識別該文件是什么類型時,可以通過file進行查看

我們會將文件標注對應的后綴. .txt .sh .mp3 .mp4 .exe .zip Linux的文件加上后綴能夠便於我們快速的識別.這個文件是什么類型.

3.linux系統鏈接文件

#軟鏈接使用場景 1.軟件升級 2.企業代碼發布 3.不方便目錄移動

#先執行刪除,然后執行ln操作, && (&&前面的命令執行成功,則立即執行&&后面的命令)

[root@beua ~]# rm -f /root/qq && ln -s /root/qq_v1.2/ /root/qq  #版本升級
[root@beua ~]# rm -f /root/qq && ln -s /root/qq_v1.1/ /root/qq

4.硬鏈接與軟鏈接區別

1)ln命令創建硬鏈接,ln -s命令創建軟鏈接。

2)目錄不能創建硬鏈接,並且硬鏈接不可以跨越分區系統。

3)目錄軟鏈接特別常用, 並且軟鏈接支持跨越分區系統。

4)硬鏈接文件與源文件的inode相同,軟鏈接文件與源文件inode不同。

5)刪除軟鏈接文件,對源文件及硬鏈接文件無任何影響。

6)刪除文件的硬鏈接文件,對源文件及鏈接文件無任何影響。

7)刪除鏈接文件的源文件,對硬鏈接無影響,會導致軟鏈接失效。

8)刪除源文件及其硬鏈接文件,整個文件會被真正的刪除。

總結: 軟鏈接就是快捷方式,不同的inode同時指向同一個block,刪除軟鏈接,源文件沒有任何影響,刪除源文件則軟鏈接失效.

硬鏈接是多個相同的inode指向同一個block,其實就是用於給文件做備份.(只有刪除所有文件,硬鏈接才會失效)

*當前的磁盤空間還剩余500GB,但就是無法往里面寫入數據.
No space left on device 要不是真的沒有磁盤空間(),要么就是inode被占滿

5.linux命令執行流程(擴展)

⑴ping 探測對端主機是否存活

1) 命令是否通過絕對路徑執行

2) 命令是否存在alias別名

3) 用戶輸入的是shell內置命令還是外置命令 type -a

4) Bash內部命令直接執行,外部命令檢測是否存在緩存

5) 查找系統全局$PATH,變量中保存的全部都是命令存放的路徑,有執行,無報錯command not found

⑵什么是內部命令,什么是外部命令

內部命令: shell程序自帶的命令。 外部命令: 在系統PATH變量的某個路徑下的可執行程序。

⑶如何檢查用戶輸入的命令是內部命令還是外部命令

cd命令屬於shell內部命令

type -a cd
cd is a shell builtin
cd is /usr/bin/cd

#ping屬於外部命令, 同時會打印當前命令路徑

type -a ping
ping is /bin/ping
⑷如果是外置命令,Bash可以通過查找PATH變量,獲取該命令的絕對路徑。

打印當前環境變量目錄:

[root@beua ~]# echo $PATH
  /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

PS: PATH由多個路徑組成,每個路徑值之間用冒號間隔,對這些路徑的增加和刪除操作都將影響到Bash解釋器對Linux命令的查找

⑸如果是外置命令還會涉及到一個內存緩存,也就是說,當我們出現重復執行相同的命令,會通過緩存調取執行,也就意味着不會搜索PATH路徑。
表緩存命令所在位置
[root@beuai ~]# hash
hits command
1 /usr/bin/tty
3 /sbin/ifconfig
已緩存命令,如果移動位置會導致無法找到該命令
[root@beua ~]# mv /sbin/ifconfig /bin/
[root@beua ~]# ifconfig
-bash: /sbin/ifconfig: No such file or directory
刪除緩存過的ifconfig命令, 即可執行
[root@beua ~]# hash -d ifconfig
[root@beua ~]# ifconfig
#當然可以清空緩存表
[root@beua ~]# hash -r
#注意: 命令緩存hash需要注意如下情況:

1.只要執行外部命令1次就會對該命令進行緩存

2.如果將命令移動了位置,該如何執行

a.使用絕對路徑執行

b.刪除hash表的緩存指令

總結: 命令執行的流程

1) 檢查執行的命令是否使用的是絕對路徑執行的。

2) 檢查ping命令是否存在alias別名

3) 檢查ping命令是內部命令還是外部命令

4) 如果是內部命令Bash直接執行,如果是外部命令,首先檢查Hash緩存,存在則直接調取

5) 如果該命令不存在Hash緩存,則通過PATH路徑進行逐行查找該命令所在的位置

6) 如果PATH路徑沒有查找到該命令所在的路徑,則返回錯誤碼。command not found

6.符號: 通配符

.     #代表當前目錄,但文件名以點開頭則代表隱藏文件 如果在grep時,使用.代表匹配任意的單個字符 
..     #代表上一級目錄, 上級目錄的inode和..的inode是一致(硬鏈接) /usr/local cd ..
~     #回到當前用戶的家目錄
*     #所有
\     #轉義字符
#     #命令行是不執行命令,但會保留在history中,文件中有#代表不執行
$()    #小括號中必須是命令,與其類似的還有 ``
>     #標准重定向,會覆蓋文件的內容
^     #在匹配字符的時候,以什么開頭
$     #在匹配字符的時候,以什么結尾
|      #將左邊命令的輸出,交給右邊命令的輸入
||     #前者命令執行不成功,后者命令執行
&&     #前者命令執行成功,后者命令則執行
!      #調用歷史history中的命令 !Number !string
!!     #調用上一次執行的命令

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM