平時用的不多的或者確實本身就有點模糊的,非常感謝面試官的解釋,這裡記錄下:
檔案許可權 4755的涵義 = 檔案許可權中s/S的意義?
chmod是Linux下設定檔案許可權的命令,後面的數字表示不同使用者或使用者組的許可權。
一般是三個數字:
第一個數字表示檔案所有者的許可權
第二個數字表示與檔案所有者同屬一個使用者組的其他使用者的許可權
第三個數字表示其它使用者組的許可權
許可權分為三種:讀(r=4),寫(w=2),執行(x=1)。綜合起來還有可讀可執行(rx=5=4+1)、可讀可寫(rw=6=4+2)、可讀可寫可執行(rwx=7=4+2+1)。
所以,chmod 755 設定使用者的許可權為:
1.檔案所有者可讀可寫可執行
2.與檔案所有者同屬一個使用者組的其他使用者可讀可執行
3.其它使用者組可讀可執行
chmod 4755與chmod 755 的區別在於開頭多了一位,這個4表示其他使用者執行檔案時,具有與所有者相當的許可權。
文章Linux中的檔案特殊許可權中透過例項很好地解釋了這裡的4的含義:
先看個例項,檢視你的/usr/bin/passwd 與/etc/passwd檔案的許可權
[root@MyLinux ~]# ls -l /usr/bin/passwd /etc/passwd
-rw-r--r--1 root root 154908-1913:54/etc/passwd
-rwsr-xr-x 1 root root 229842007-01-07/usr/bin/passwd
眾所周知,/etc/passwd檔案存放的各個使用者的賬號與密碼資訊,/usr/bin/passwd是執行修改和檢視此檔案的程式,但從許可權上看,/etc/passwd僅有root許可權的寫(w)權,可是為什麼每個使用者都可以直接呼叫/usr/bin/passwd來寫/etc/passwd從而達到修改自己的密碼呢?注意這裡的s代替了x( -rwsr-xr-x 1 root root 229842007-01-07/usr/bin/passwd) , 這裡的s使得其他的使用者執行/usr/bin/passwd時具有與owner root相當的許可權。
這裡的4或s是特殊的檔案許可權,其實s可以用在user或group,還有另一種特殊許可權t:
再看個例項,檢視你的/tmp目錄的許可權
[root@MyLinux ~]# ls -dl /tmpdrwxrwxrwt 6 root root 4096 08-22 11:37 /tmp tmp目錄是所有使用者共有的臨時資料夾,所有使用者都擁有讀寫許可權,這就必然出現一個問題,A使用者在/tmp裡建立了檔案a.file,此時B使用者看了不爽,在/tmp裡把它給刪了(因為擁有讀寫許可權),那肯定是不行的。
如何設定以上特殊許可權:
setuid:chmod u+s xxx
setgid: chmod g+s xxx
stick bit : chmod o+t xxx
或者使用八進位制方式,在原先的數字前加一個數字,三個許可權所代表的進位制數與一般許可權的方式類似,如下:
suid guid stick bit
1 1 1
所以:
suid的二進位制串為:100,換算十進位制為:4
guid的二進位制串為:010,換算十進位制:2
stick bit 二進位制串:001,換算十進位制:1
於是也可以這樣設:
setuid:chmod 4755 xxx
setgid:chmod 2755 xxx
stick bit:chmod 1755 xxx
最後,在一些檔案設定了特殊許可權後,字母不是小寫的s或者t,而是大寫的S和T,那代表此檔案的特殊許可權沒有生效,是因為你尚未給它對應使用者的x許可權.
硬連結和軟連線的大小?
透過下面的測試,硬連結與原始檔是相同的inode節點,指向相同的檔案,肯定是相同的大小;軟連線可以理解為檔案內容中儲存了原始檔的地址或路徑,所以有自己的大小。
[aaa@myvm ~]$ mkdir mytest
[aaa@myvm ~]$ cd mytest
[aaa@myvm mytest]$ echo "AAAAAAAAAAAAAAAAA" >hello
[aaa@myvm mytest]$ ln hello hello2
[aaa@myvm mytest]$ ln -s hello hello3
[aaa@myvm mytest]$ ls -lia
總計 16
5764989 drwxrwxr-x 2 aaa aaa 4096 11-25 16:03 .
5566272 drwx------ 23 aaa aaa 4096 11-25 16:02 ..
5765068 -rw-rw-r-- 2 aaa aaa 18 11-25 16:03 hello
5765068 -rw-rw-r-- 2 aaa aaa 18 11-25 16:03 hello2
5765116 lrwxrwxrwx 1 aaa aaa 5 11-25 16:03 hello3 -> hello
[aaa@myvm mytest]$ echo "BBBBBBBBBBB" >>hello
5765068 -rw-rw-r-- 2 aaa aaa 30 11-25 16:04 hello
5765068 -rw-rw-r-- 2 aaa aaa 30 11-25 16:04 hello2
如何設定當前使用者新建檔案或目錄的預設許可權?
umask用來定義新建檔案或目錄的預設許可權,新的目錄的許可權為777-umask設定的值,新建檔案的許可權為666-umask設定的值。若要長期修改umask的值,可以把它寫進/etc/profile或~/.profile或~/.bash_profile中。
[aaa@myvm mytest]$ umask
0002
[aaa@myvm mytest]$ umask -S
u=rwx,g=rwx,o=rx
[aaa@myvm mytest]$ mkdir aa
[aaa@myvm mytest]$ touch bb
[aaa@myvm mytest]$ ls -la
總計 12
drwxrwxr-x 3 aaa aaa 4096 11-25 16:20 .
drwx------ 23 aaa aaa 4096 11-25 16:20 ..
drwxrwxr-x 2 aaa aaa 4096 11-25 16:20 aa
-rw-rw-r-- 1 aaa aaa 0 11-25 16:20 bb
[aaa@myvm mytest]$ umask 022
[aaa@myvm mytest]$ mkdir aa2
[aaa@myvm mytest]$ touch bb2
drwxrwxr-x 4 aaa aaa 4096 11-25 16:29 .
drwxr-xr-x 2 aaa aaa 4096 11-25 16:29 aa2
-rw-r--r-- 1 aaa aaa 0 11-25 16:29 bb2
find . -name "filename" 中的filename為啥必須加引號?但是ls中不需要?
find [-H] [-L] [-P] [path...] [expression]
ls [OPTION]... [FILE]...
因為這裡的"filename"其實是表示式中的一個pattern,所以必須要加“”來組織shell的解析。 例如find . -name "aa*" -exec rm {}。
如何快速地將遠端機器上的共享目錄下的所有檔案複製到本地供只讀使用?
如果不複製,簡單地mount到本地目錄。但是這裡是要求複製到本地,所以這裡可以使用softlink來將對檔案的複製時間變為固定值。具體可以使用cp的-s引數。
Linux中檔案路勁可以用空格嗎?
windows中用雙引號就可以了,linux中用\加空格來表示。
mkdir my\ \ folder (中間有2個空格)
cd my\ \ folder/
平時用的不多的或者確實本身就有點模糊的,非常感謝面試官的解釋,這裡記錄下:
檔案許可權 4755的涵義 = 檔案許可權中s/S的意義?
chmod是Linux下設定檔案許可權的命令,後面的數字表示不同使用者或使用者組的許可權。
一般是三個數字:
第一個數字表示檔案所有者的許可權
第二個數字表示與檔案所有者同屬一個使用者組的其他使用者的許可權
第三個數字表示其它使用者組的許可權
許可權分為三種:讀(r=4),寫(w=2),執行(x=1)。綜合起來還有可讀可執行(rx=5=4+1)、可讀可寫(rw=6=4+2)、可讀可寫可執行(rwx=7=4+2+1)。
所以,chmod 755 設定使用者的許可權為:
1.檔案所有者可讀可寫可執行
2.與檔案所有者同屬一個使用者組的其他使用者可讀可執行
3.其它使用者組可讀可執行
chmod 4755與chmod 755 的區別在於開頭多了一位,這個4表示其他使用者執行檔案時,具有與所有者相當的許可權。
文章Linux中的檔案特殊許可權中透過例項很好地解釋了這裡的4的含義:
先看個例項,檢視你的/usr/bin/passwd 與/etc/passwd檔案的許可權
[root@MyLinux ~]# ls -l /usr/bin/passwd /etc/passwd
-rw-r--r--1 root root 154908-1913:54/etc/passwd
-rwsr-xr-x 1 root root 229842007-01-07/usr/bin/passwd
眾所周知,/etc/passwd檔案存放的各個使用者的賬號與密碼資訊,/usr/bin/passwd是執行修改和檢視此檔案的程式,但從許可權上看,/etc/passwd僅有root許可權的寫(w)權,可是為什麼每個使用者都可以直接呼叫/usr/bin/passwd來寫/etc/passwd從而達到修改自己的密碼呢?注意這裡的s代替了x( -rwsr-xr-x 1 root root 229842007-01-07/usr/bin/passwd) , 這裡的s使得其他的使用者執行/usr/bin/passwd時具有與owner root相當的許可權。
這裡的4或s是特殊的檔案許可權,其實s可以用在user或group,還有另一種特殊許可權t:
再看個例項,檢視你的/tmp目錄的許可權
[root@MyLinux ~]# ls -dl /tmpdrwxrwxrwt 6 root root 4096 08-22 11:37 /tmp tmp目錄是所有使用者共有的臨時資料夾,所有使用者都擁有讀寫許可權,這就必然出現一個問題,A使用者在/tmp裡建立了檔案a.file,此時B使用者看了不爽,在/tmp裡把它給刪了(因為擁有讀寫許可權),那肯定是不行的。
如何設定以上特殊許可權:
setuid:chmod u+s xxx
setgid: chmod g+s xxx
stick bit : chmod o+t xxx
或者使用八進位制方式,在原先的數字前加一個數字,三個許可權所代表的進位制數與一般許可權的方式類似,如下:
suid guid stick bit
1 1 1
所以:
suid的二進位制串為:100,換算十進位制為:4
guid的二進位制串為:010,換算十進位制:2
stick bit 二進位制串:001,換算十進位制:1
於是也可以這樣設:
setuid:chmod 4755 xxx
setgid:chmod 2755 xxx
stick bit:chmod 1755 xxx
最後,在一些檔案設定了特殊許可權後,字母不是小寫的s或者t,而是大寫的S和T,那代表此檔案的特殊許可權沒有生效,是因為你尚未給它對應使用者的x許可權.
硬連結和軟連線的大小?
透過下面的測試,硬連結與原始檔是相同的inode節點,指向相同的檔案,肯定是相同的大小;軟連線可以理解為檔案內容中儲存了原始檔的地址或路徑,所以有自己的大小。
[aaa@myvm ~]$ mkdir mytest
[aaa@myvm ~]$ cd mytest
[aaa@myvm mytest]$ echo "AAAAAAAAAAAAAAAAA" >hello
[aaa@myvm mytest]$ ln hello hello2
[aaa@myvm mytest]$ ln -s hello hello3
[aaa@myvm mytest]$ ls -lia
總計 16
5764989 drwxrwxr-x 2 aaa aaa 4096 11-25 16:03 .
5566272 drwx------ 23 aaa aaa 4096 11-25 16:02 ..
5765068 -rw-rw-r-- 2 aaa aaa 18 11-25 16:03 hello
5765068 -rw-rw-r-- 2 aaa aaa 18 11-25 16:03 hello2
5765116 lrwxrwxrwx 1 aaa aaa 5 11-25 16:03 hello3 -> hello
[aaa@myvm mytest]$ echo "BBBBBBBBBBB" >>hello
[aaa@myvm mytest]$ ls -lia
總計 16
5764989 drwxrwxr-x 2 aaa aaa 4096 11-25 16:03 .
5566272 drwx------ 23 aaa aaa 4096 11-25 16:02 ..
5765068 -rw-rw-r-- 2 aaa aaa 30 11-25 16:04 hello
5765068 -rw-rw-r-- 2 aaa aaa 30 11-25 16:04 hello2
5765116 lrwxrwxrwx 1 aaa aaa 5 11-25 16:03 hello3 -> hello
如何設定當前使用者新建檔案或目錄的預設許可權?
umask用來定義新建檔案或目錄的預設許可權,新的目錄的許可權為777-umask設定的值,新建檔案的許可權為666-umask設定的值。若要長期修改umask的值,可以把它寫進/etc/profile或~/.profile或~/.bash_profile中。
[aaa@myvm mytest]$ umask
0002
[aaa@myvm mytest]$ umask -S
u=rwx,g=rwx,o=rx
[aaa@myvm mytest]$ mkdir aa
[aaa@myvm mytest]$ touch bb
[aaa@myvm mytest]$ ls -la
總計 12
drwxrwxr-x 3 aaa aaa 4096 11-25 16:20 .
drwx------ 23 aaa aaa 4096 11-25 16:20 ..
drwxrwxr-x 2 aaa aaa 4096 11-25 16:20 aa
-rw-rw-r-- 1 aaa aaa 0 11-25 16:20 bb
[aaa@myvm mytest]$ umask 022
[aaa@myvm mytest]$ mkdir aa2
[aaa@myvm mytest]$ touch bb2
[aaa@myvm mytest]$ ls -la
總計 16
drwxrwxr-x 4 aaa aaa 4096 11-25 16:29 .
drwx------ 23 aaa aaa 4096 11-25 16:20 ..
drwxrwxr-x 2 aaa aaa 4096 11-25 16:20 aa
drwxr-xr-x 2 aaa aaa 4096 11-25 16:29 aa2
-rw-rw-r-- 1 aaa aaa 0 11-25 16:20 bb
-rw-r--r-- 1 aaa aaa 0 11-25 16:29 bb2
find . -name "filename" 中的filename為啥必須加引號?但是ls中不需要?
find [-H] [-L] [-P] [path...] [expression]
ls [OPTION]... [FILE]...
因為這裡的"filename"其實是表示式中的一個pattern,所以必須要加“”來組織shell的解析。 例如find . -name "aa*" -exec rm {}。
如何快速地將遠端機器上的共享目錄下的所有檔案複製到本地供只讀使用?
如果不複製,簡單地mount到本地目錄。但是這裡是要求複製到本地,所以這裡可以使用softlink來將對檔案的複製時間變為固定值。具體可以使用cp的-s引數。
Linux中檔案路勁可以用空格嗎?
windows中用雙引號就可以了,linux中用\加空格來表示。
mkdir my\ \ folder (中間有2個空格)
cd my\ \ folder/