3月18日學習筆記

一、特殊權限(chattr、lsattr)
二、特殊權限(set_uid、set_gid、sticky_bit)
三、搜索文件(which、whereis、find、locate)
四、鏈接文件的建立(ln -s、ln)


一、特殊權限設置

chattr命令      這個命令爲文件或目錄添加特殊權限,較常用的有i、a這兩個權限。

chattr +i 名稱(文件或目錄) 
    文件:文件添加此權限後無法寫入數據,無法重命名、刪除此文件。
    目錄:目錄添加此權限後無法再寫入文件、無法刪除目錄內的文件或目錄、無法移動或重命名目錄內的數據。
chattr -i    爲文件或目錄去掉i權限
實例:
[root@laoqi tmp]# chattr +i 2        //給目錄2添加i權限
[root@laoqi tmp]# lsattr -d 2         //查看目錄2的權限
----i--------e- 2                                //顯示有i權限



chattr +a     追加特殊權限
    文件    無法寫入數據
    目錄:只能追加信息,不能刪除或移動內容。
chattr -a 文件或目錄名         去掉a權限
實例:
[root@laoqi tmp]# chattr +a 1           //爲文件1添加a權限
[root@laoqi tmp]# lsattr 1                  //查看文件1的特殊權限
-----a-------e- 1                                   //文件1目前有a權限
[root@laoqi tmp]# vi 1                     //vi進入該文件,無法寫入任何數據



注:默認一個文件沒有任何特殊權限

lsattr 常用選項

    -V 顯示lsattr版本
    -a 顯示所有文件,包括隱藏文件
    -d 顯示目錄本身特效
    -R 遞歸顯示



[root@laoqi tmp]# ls -ld /usr/bin/passwd 
-rwsr-xr-x. 1 root root 25980 2月  22 2012 /usr/bin/passwd

上面的rws的s 是set_uid權限  這個權限可以讓其他用戶擁有屬主的權限

如果把這個文件的set_uid權限去掉,則普通用戶無法修改自己的密碼。
實例:chmod u+s   /usr/bin/passwd
注意:如果屬主沒有x執行權限,添加s權限後,會變成大S,且沒有任何意義
什麼樣的文件可以設置s權限?:可執行文件、必須是二進制文件




  set_gid 簡寫sgid     讓其他用戶新建目錄或文件時,繼承父目錄所屬組。
實例:
[root@laoqi tmp]# mkdir 2
[root@laoqi tmp]# chmod 777 2
[root@laoqi tmp]# chmod g+s 2
[root@laoqi tmp]# su - xiaoqi
[xiaoqi@laoqi ~]$ cd /tmp/
[xiaoqi@laoqi tmp]$ mkdir 2/123                                   //用戶xiaoqi建立了一個目錄
[xiaoqi@laoqi tmp]$ ls -ld 2/123
drwxrwsr-x. 2 xiaoqi root 4096 3月  20 00:21 2/123       //屬組並不是xiaoqi,而是root





sticky_bit 特殊權限  防刪除位   用戶1創建的文件,只有用戶1才能刪除。
使用方法 :chomd o+t 目錄名
實例:
[xiaoqi@laoqi tmp]$ ls -ld /tmp/           
drwxrwxrwt. 4 root root 4096 3月  20 00:20 /tmp/         //tmp目錄下的文件,只有創建它的用戶才能修改




刪除目錄下的文件,有寫權限

強制寫入(刪掉原來的文件,重新建立一個文件  屬主和屬組都變了)
set_uid、set_gid、stick_bit可以分別用數字來表示:
set_uid     4
set_gid     2
stick_bit      1
這樣在給文件添加權限時,就可以這樣設置了:
實例:chmod 4755 /tmp/2     給/tmp/2添加set_uid權限
實例:chmod 6644 /tmp/2     給/tmp/2添加set_gid權限和set_uid權限
實例:chmod 5644 /tmp/2     給/tmp/2添加set_uid權限和sticky_bit權限


三、搜索文件


which    在PATH變量指定的路徑中,搜索某個系統命令的位置,並且返回第一個搜索結果。也就是說,使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪個位置的命令。
實例:
[root@laoqi ~]# which grep
/bin/grep


whereis      只能用於程序名的搜索,而且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s),如果省略參數,則返回所有信息。
whereis 會在固定的幾個目錄中搜索  /bin 、/sbin//、/usr/bin/、 /usr/sbin/、 /usr/share/man/man1/

/bin   /usr/bin   /usr/share      侷限於這兩個目錄下

實例:whereis grep
[root@laoqi ~]# whereis grep                    
grep: /bin/grep /usr/share/man/man1/grep.1.gz           //返回所有信息(二進制文件、man說明文件、源代碼文件)
[root@laoqi ~]# whereis -b grep                                   //只搜索二進制文件
grep: /bin/grep 
[root@laoqi ~]# whereis -m grep                                  //只搜索man說明文件
grep: /usr/share/man/man1/grep.1.gz
[root@laoqi ~]# whereis -s grep                                   //只搜索源代碼文件
grep:


locate   相當於find -name     不搜索具體目錄,而是搜索一個數據庫(var/lib/locatedb) ,這個數據庫中含有本地所有文件信息。LINUX系統自動創建這個數據庫,並且每天自動更新一次,所以使用locate命令查不到最新變動過的文件。爲了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新數據庫。
實例:locate /etc/sh     搜索etc目錄下所有以sh開頭的文件
實例:locate ~/m     搜索用戶主目錄下,所有以m開頭的文件
實例:locate -i ~/m     搜索用戶主目錄下,所有以m開頭的文件,並且忽略大小寫。
不檢索/tmp下的文件
updatedb     手動更新數據庫
yum  install  -y  mlocate 


find      查找命令
使用格式: find 指定目錄 指定條件 指定動作
     指定目錄     所要搜索的目錄及其所有子目錄。默認爲當前目錄
     指定條件     所要搜索的文件的特徵。
     指定動作     對搜索結果進行特定的處理
  指定條件:  -type d    //類型爲目錄的文件
                    -type f     //類型爲普通文件
                    -name “文件名”      //根據文件名搜索
  指定動作    -mtime +1     //修改時間(修改文件內容)一天以上
                   -mtime -1      //一天以內
                   -mmin -10    //10分鐘以內
                   -mmin +10   //10分鐘以上
                   -atime +1     //訪問時間一天以上
                   -ctime +1     //改變時間(修改文件信息)一天以上
實例:find . -name 'my*'     搜索當前目錄(含子目錄)中,所有文件名以my開頭的文件


實例:find . -name 'my*' -ls     搜索當前目錄中,所有以my開頭的文件,並顯示它們的詳細信息。


實例:find . -type f -mmin -10     搜索當前目錄中,所有過去10分鐘更新過的普通文件。如果不加-type f參數,則搜索普通文件+特殊文件+目錄


實例:find /etc/init.d/ -type d           //搜索/etc/init.d目錄下所有的目錄文件
          find /etc/init.d/ ! -type d        //搜索/etc/init.d目錄下非目錄的文件(!是取反的意思)
          find /etc/ -type d -name "cron.d"           //搜索/etc/下文件名爲cron.d的目錄文件
          find /etc/ -type d -a -name "cron.d"      //搜索/etc/下文件名爲cron.d的目錄文件
          find /etc/ -type d -o -name "cron.d"      //搜索/etc/的目錄文件或文件名爲cron.d的文件
          find /etc/ -type d -name "cron.d" -mtime -1  //搜索/etc/下最近一天修改過的名爲cron.d的目錄文件
-name  根據文件名查詢

stat命令查看文件的三個time(ctime、mtime、atime)
實例:stat 文件名


擴展:
進行哪些操作會修改3個time的時間呢?
vi文件     三個time都變(注:只進入vi,不修改就退出,只修改atime)
cat 文件     atime會變
echo 追加一個文本    m和 c

四、linux下的鏈接文件
ln  鏈接命令
軟連接 






ln -s  建立軟鏈接
ln -s /root/3.txt /tmp/21.txt     創建軟鏈接要使用絕對路徑


如果建立軟鏈接使用相對路徑會怎麼樣?
查看軟鏈接信息,鏈接到的也是一個相對路徑,根本看不到鏈接到哪裏了
使用pwd -P,查看到的信息也是錯誤的


如何檢查一個軟鏈接的真實路徑呢?
pwd -P     真正路徑
pwd -L     邏輯路徑


硬鏈接
不可以作用於目錄
ln 文件名
ls -l
不能作用在不同分區 因爲inode號會衝突
可以刪除其中一個文件,同級
硬鏈接可以同步修改
硬鏈接=複製+同步+刪除源文件無礙+不能跨分區+不能作用於目錄
軟鏈接=快捷方式+同步+刪除源文件廢廢+能跨分區+也能作用於目錄
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章