第一種查看方式
[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
!! #調用上一次執行的命令