文件查找以及文本處理
- 定義一個對所有用戶都生效的命令別名
例如:lftps='lftp 172.168.0.1/pub'[root@localhost /]# echo "alias lftps='lftp 172.168.0.1/pub'" >> /etc/bashrc [root@localhost /]# source /etc/bashrc [root@localhost /]# alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias lftps='lftp 172.168.0.1/pub' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
-
顯示/etc/passwd文件中不以/bin/bash結尾的行
[root@localhost /]# grep -v "/bin/bash$" /etc/passwd
-
找出/etc/passwd文件中,包含二位數或者三位數的行
[root@localhost /]# grep "\<[1-9]\{2,3\}\>" /etc/passwd
- 顯示/proc/meminfo文件中以大寫或者小寫S開頭的行;用三種方式實現
(1)[root@localhost /]# grep -i '^s' /proc/meminfo (2)[root@localhost /]# grep '^[sS]' /proc/meminfo (3)[root@localhost /]# grep -E "^(s|S)" /proc/meminfo SwapCached: 0 kB SwapTotal: 2097148 kB SwapFree: 2097148 kB Shmem: 7980 kB Slab: 64752 kB SReclaimable: 28244 kB SUnreclaim: 36508 kB
- 使用echo輸出一個絕對路徑,使用egrep取出路徑名,
類似於執行dirname /etcpasswd的結果[root@localhost /]# echo "/etc/sysconfig/netscript " | egrep -o '^/.*/' /etc/sysconfig/
- 找出ifconfig中的ip地址,要求結果只顯示IP地址
[root@localhost /]# ifconfig | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}' 172.20.10.7 255.255.255.240 172.20.10.15 127.0.0.1 255.0.0.0
- vim定製自動縮進四個字符
打開文件/etc/vim/vimrc最後加入,保存 set tabstop=4 set shiftwidth=4
-
編寫腳本,實現自動添加三個用戶,並計算這三個用戶的uid之和
#!/bin/bash id user1 &> /dev/null || useradd user1 id user2 &> /dev/null || useradd user2 id user3 &> /dev/null || useradd user3 user1_id=$(id -u user1) user2_id=$(id -u user2) user3_id=$(id -u user3) id_num=$[$user1_id + $user2_id + $user3_id] echo "The id sum is $id_num"
-
find用法:
用法:
find [OPTIONS] [查找起始路徑] [查找條件] [處理動作]
查找起始路徑:指定具體搜索目標起始路徑;默認爲當前目錄;
查找條件:指定的查找標準,可以根據文件名、大小、類型、從屬關係、權限等等標準進行;默認爲找出指定路徑下的所有文件;
處理動作:對符合查找條件的文件做出的操作,例如刪除等操作;默認爲輸出至標準輸出;
查找條件:
(1)根據文件名查找:-name "pattern" -iname "pattern" 支持glob風格的通配符;*, ?, [], [^] -regex pattern:基於正則表達式模式查找文件,匹配是整個路徑,而非其名;
(2)根據文件從屬關係查找:
-user USERNAME:查找屬主指定用戶的所有文件; -group GRPNAME:查找屬組指定組的所有文件; -uid UID:查找屬主指定的UID的所有文件; -gid GID:查找屬組指定的GID的所有文件; -nouser:查找沒有屬主的文件; -nogroup:查找沒有屬組的文件;
(3)根據文件的類型查找:
-type TYPE: f: 普通文件 d: 目錄文件 l:符號鏈接文件 b:塊設備 文件 c:字符設備文件 p:管道文件 s:套接字文件
(4)根據文件的大小查找:
-size [+|-]#UNIT 常用單位:k, M, G #UNIT:(#-1, #] -#UNIT:[0,#-1] +#UNIT:(#, oo)
(5)根據時間戳查找:
以“天”爲單位: -atime [+|-]# #:[#, #-1) -#:(#, 0] +#:(oo, #-1] -mtime -ctime 以“分鐘”爲單位: -amin -mmin -cmin
(6)根據權限查找:
-perm [/|-]mode mode:精確權限匹配; /mode:任何一類用戶(u,g,o)的權限中的任何一位(r,w,x)符合條件即滿足; 9位權限之間存在“或”關係; -mode:每一類用戶(u,g,o)的權限中的每一位(r,w,x)同時符合條件即滿足; 9位權限之間存在“與”關係;
處理動作:
-print:輸出至標準輸出;默認的動作; -ls:類似於對查找到的文件執行“ls -l”命令,輸出文件的詳細信息; -delete:刪除查找到的文件; -fls /PATH/TO/SOMEFILE:把查找到的所有文件的長格式信息保存至指定文件中; -ok COMMAND {} \; :對查找到的每個文件執行由COMMAND表示的命令;每次操作都由用戶進行確認; -exec COMMAND {} \; :對查找到的每個文件執行由COMMAND表示的命令; 注意:find傳遞查找到的文件路徑至後面的命令時,是先查找出所有符合條件的文件路徑,並一次性傳遞給後面的命令; 但是有些命令不能接受過長的參數,此時命令執行會失敗;另一種方式可規避此問題: find | xargs COMMAND
- find常見用法示例:
(1)查找/var目錄下屬主爲root,且屬組爲mail的所有文件或目錄;[root@localhost /]# find /var -user root -a -group mail -ls 5002 0 drwxrwxr-x 2 root mail 224 Aug 13 14:13 /var/spool/mail 3360 152 -rw------- 1 root mail 154132 Jul 19 16:12 /var/spool/mail/root
(2)查找/usr目錄下不屬於root, bin或mysql的所有文件或目錄;
[root@localhost /]# find /usr -not -user root -a -not -user bin -a -not -user mysql /usr/share/polkit-1/rules.d /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
(3)查找當前系統上沒有屬或屬組,且最近一週內曾被訪問過的文件或目錄; [root@localhost /]# find / \( -nouser -o -nogroup \) -atime -7 -ls find: ‘/proc/2710/task/2710/fd/6’: No such file or directory find: ‘/proc/2710/task/2710/fdinfo/6’: No such file or directory find: ‘/proc/2710/fd/6’: No such file or directory find: ‘/proc/2710/fdinfo/6’: No such file or directory
(4)查找/etc目錄下大於1M且類型爲普通文件的所有文件;
[root@localhost /]# find /etc/ -size +1M -type f -exec ls -lh {} \; -r--r--r--. 1 root root 7.2M Jul 8 17:32 /etc/udev/hwdb.bin -rw-r--r--. 1 root root 3.6M Aug 6 2017 /etc/selinux/targeted/active/policy.kern -rw-r--r--. 1 root root 1.4M Aug 6 2017 /etc/selinux/targeted/contexts/files/file_contexts.bin -rw-r--r--. 1 root root 3.6M Aug 6 2017 /etc/selinux/targeted/policy/policy.30 -rw-r--r--. 1 root root 1.4M Aug 7 2017 /etc/brltty/zh-tw.ctb
(5)查找/etc目錄下所有用戶都沒有寫權限的文件;
[root@localhost /]# find /etc -not -perm /222 -type f -ls
(6)查找/etc目錄至少有一類用戶沒有執行權限的文件;[root@localhost /]# find /etc/ -not -perm -111 -type f -ls
(7)查找/etc/init.d/目錄下,所有用戶都有執行權限,且其它用戶有寫權限的所有文件;[root@localhost /]# find /etc -perm -113 -type f -ls