Linux雜記1

junwind 發表於 2021-04-28
Linux
萬用字元 *[] [^]
命令列游標  home  end  ctrl+u  ctrl+k  ctrl+箭頭  ctrl+l
echo $HISTFILE, $HISTFILESIZE, $HISTSIZE 
!100  !-5  !!  !$ (esc + .)  !string
$(cmd)   `cmd`
mkdir -pv ./test/{x/m,y}  ./test2/{a,d}_{b,c}

cp複製的檔案,屬主,屬組是當前執行cp的使用者本身
複製連結時,預設是複製連結指向的那個檔案本身
cp -a /etc /backup/etc-`date +%F`  歸檔複製

/etc/default/useradd
/etc/skel
/etc/shells

$SHELL
PATH=$PATH:/bin/go
export PATH

suid 特殊許可權位,程式的屬主為該執行檔案本身的屬主,如果本身的owner有x,則為小寫s,否則大寫S

umask    建立檔案預設的許可權=最大許可權-umask值
    注意:檔案一般不給執行許可權
    umask
    umask 027
    grep 'umask' /etc/profile /etc/bashrc

bash配置檔案  /etc/profile.d/*.sh  /etc/profile  ~/.bash_profile  ~/.bashrc /etc/bashrc
立即生效修改後的配置檔案  . file , source file

type set 
set 檢視所有變數
set -C  禁止覆蓋重定向  (可以使用強制覆蓋 >|)
set +C  解除

stdin 0 
stdout 1
stderr 2 

重定向  改變標準輸入,輸出的裝置源
    >  >>  >|
    2>  2>> 
    &>  &>>
    < 
    ls /var > out1 2> out2
    ls /var > out 2> out 
    ls /var &> out

cat < /etc/fstab  接受檔案並列印,一般就預設帶有stdin重定向
tr a-z A-Z < /etc/passwd

here doc
    cat << END
    ...
    END

    cat >> file << EOF
    ...
    EOF

tee  讀取stdin,寫到stdout,和檔案各一份
    tee file < /etc/file2
    echo xxx | tee file

管道: 前一個命令的標準輸出stdout,當前後一個命令的標準輸入stdin
    cut -d: -f1 /etc/passwd | sort | tr 'a-z' 'A-Z'

egrep
   egrep -ivo --color pattern file...
   egrep -A|B|C # ...   
   .  單個任意字元
   *  其前面的字元任意次   .*
   ?  其前面的字元0次或1次
   []  [^]
   +  {1,}
   {m,n}
   ^  $  ^$
   \<   \>   \b
   ()   \1  \2 
   a|b   C|cat   (C|c)at 

練習
1. 將一個目錄下的所有檔案的檔名換成大寫?  

2. 顯示一個檔案的行數,只顯示行數,不顯示額外資訊?

3. 統計/usr/bin/目錄下的檔案個數

4. 取出當前系統上所有使用者的shell,要求,每種shell只顯示一次,並且按順序進行顯示 ? 統計每種shell出現的次數?

5. 如何顯示/var/log目錄下每個檔案的內容型別?不使用萬用字元,能否實現?

6. 取出/etc/inittab檔案的第6行

7. 取出/etc/passwd檔案中倒數第9個使用者的使用者名稱和shell, 顯示到螢幕上並將其儲存至/tmp/users檔案中

8. 顯示/etc目錄下所有以pa開頭的檔案,並統計其個數;

9. 不使用文字編輯器,將alias cls=clear一行內容新增至當前使用者的.bashrc檔案中;

10. 顯示所有以數字結尾且檔名中不包含空白的檔案?

11. 匹配某檔案中 1~255之間的整數?

12. 匹配 ifconfig 顯示中的ip地址?
\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])\>(\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>){2}\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>

13. hadoop使用者臨時切換其基本組為mygroup (會涉及到給組設定密碼 gpasswd,newgrp 臨時切換,login機制,exit還原)

14. /etc/shadow 除了root,其他使用者應該是沒有任何許可權的,為什麼普通使用者還是可以修改自己的密碼,即有w許可權? suid

15. 若某使用者的umask為023,則其建立的檔案和目錄的許可權是?
    目錄  754  rwx r-x rw- 
    檔案  643  rw- r-- -wx   實際建立檔案的許可權是 -rw-r--r--  因為檔案預設不允許有x許可權

16. 手動新增一個使用者hive,uid,gid為5000,基本組為hive,額外組為mygroup
    /etc/group  /etc/passwd  /etc/shadow 
    cp -r /etc/skel /home/hive
    chown -R hive:hive /home/hive 
    chmod -R go= /home/hive 

17. 檔名萬用字元的使用
    字母a開頭,數字3結尾   a*3
    以任意一個字元開頭,後跟一個y,又跟任意字元的  [a-z]y* 
    以非字母開頭 [^a-z]*
    包含空白字元  ls *[[:sapce:]]*
    以a或m開頭  ls [am]*
    以數字結尾,且不包含空白  ls . | egrep '[0-9]$' | egrep -v '[[:space:]]'
    包含特殊符號  ls *[[:punct:]]*

18. 手動建立一個使用者
    新建一個沒有家目錄的使用者openstack  
    複製/etc/skel為/home/openstack  
    改變/home/openstack及其內部檔案的屬主屬組均為openstack  
    /home/openstack及其內部檔案,屬組和其它使用者沒有任何訪問許可權  

19. 建立一個使用者tom,其uid為2002,基本組為distro(gid為3003),額外組為linux

20. 建立一個使用者jerry,其全名為jerry is jerry,預設shell為csh

21. 修改tom的uid為4004,基本組為linux,額外組為distro和jerry  
    usermod -u 4004 -g linux -G distro,jerry tom 

22. 給jerry加密碼,並設定其密碼最短使用期限為2天,最長為50天  
    passwd -n 2 -x 50 jerry 

23. 將tom的預設shell改為bash    
    usermod -s /bin/bash tom 
    chsh tom 
    直接改/etc/passwd

24. 新增系統使用者hbase,且不允許其登入系統  
    useradd -r -s /sbin/nologin hbase

25. 新增一個永久的命令別名

26. 使用者登入後,列印一段歡迎資訊

27. 設定某使用者一個永久umask
本作品採用《CC 協議》,轉載必須註明作者和本文連結
六月的風