學習筆記(8)
2.cmd='hostname' #cmd 執行cmd所指向的命令 hostname
3.[[ ]] 支持擴展正則表達式,[[ == *i* ]] 匹配包含i的字符串 man bash 查找[[,要使用轉義字符 pattern matching
4.cmd1 || cmd2 && cmd3 邏輯判斷說明
cmd2 is always true
cmd1 true cmd2 不執行,cmd3 執行
cmd1 false cmd2 執行,cmd3 不執行
cmd1 && cmd2 || cmd3
cmd2 is always true
cmd1 is true cmd2 執行,cmd3 不執行
cmd1 is false cmd2不執行,cmd3 執行
5.read x y z << 'i j k' 使用文件賦值需要使用空格分隔
read x y z < f1
6.補充正則表達式 yes or No
[[ $ANS =~ ^[Yy]+([Ee][Ss])?$ ]] && echo "yes"
[[ $ANS =~ ^[Nn]+[Oo]?$ ]] && echo "No"
7.source . 運行腳本在當前的shell中運行,用於導入腳本中的變量導入當前shell
8.腳本中不支持別名的使用,一般不在腳本中使用別名
9.全局配置和局部配置中的通用文件:~/.bashrc, etc/bashrc, /etc/profile.d/*.sh
全局用戶配置文件(執行順序):/etc/profile, /etc/profile.d/*.sh, ~/.bash_profile, ~/.bashrc, /etc/bashrc
局部用戶配置文件(執行順序): ~/.bashrc, /etc/bashrc, /etc/profile.d/*.sh
10.~/bash_logout 配置文件可以用來退出刪除文件等等,如添加rm -rf /tmp/*
11.$-符號在/etc/profile 中有用到
h: hashall ,hash所有外部命令的 set +h 將h選項關閉
i: 包含i說明當前shell是一個交互式的shell
m: 監控模式,可以控制進程的啟動、停止,前臺執行和後臺執行
B: 大括號擴展
H: 展開歷史命令,可使用!!,!n 等
12.新添加的PATH變量的盡量放到前面,防止新添加變量與PATH中自帶的命令有沖突
13.只有bash中使用.或source來讀取變量,如vimrc 是自動調用,不需要。
14./var/lib/mlocate/mlocate.db 可以通過該數據庫文件的時間來判斷數據庫的更新時間,如果需要更新可以使用 updatedb
15.locate -r "^/etc/.*\.conf$" 可以指定路徑,匹配的是全路徑的結尾包含.conf所有的文件
16.find /data --maxdepth 3 --mindepth 3 -name f1 指定只在第三級目錄中的f1文件
find /data -name "*f1*" 通配符而不是正則表達式,註意要加雙引號
find 搜索節點編號可以查找相同 硬鏈接
find /home -user wang -ls 長格式
find /home -user wang -name "*.sh" -ls 並且關系(等價於-a選項,默認是並且關系)
17.systemctl restart sshd 重啟sshd
18.pdf 實驗
19.空文件占用inode 可以考慮查找後刪除, # find / -type f -empty 查找空文件
20.mspaint 畫圖(windows中)
21.find中的括號要使用轉義 防止當成子shell執行如:find /tmp \(-not -user root -a -not -name "f*"\) -ls
22.find -prune 去除某個目錄搜索
# find /etc -path '/etc/sane.d' -a -prune -o name "*.conf"
23.find -perm -666 110 110 為位有沒有權限, 至少有rw權限,777包含在內
find -perm /002 或者關系 檢查權限 0 不檢查 1檢查 /並集 -交集
+ 和/ 的含義相同 一個6版本 一個7版本
24. -delete 不提示 慎用 -ls
25.find -name "f*" -ok rm {} \; 有提示 -exec 不提示
26.find .. mv {} {}.bak \; 改名
...cp {} {}.orig \;
27.find / -size +10M -exec mv {} /data{}
28.xagrs -0 切割成換行 參數在一行需要分行 -n2 兩個一組傳遞給touch
29.echo f{1..10000}|xargs -n1 touch 每行一個參數,一個一個傳遞給touch
30.-n 控制一次傳多少參數 xargs -n2 將以空格分隔的一行內容以2個一組獨立分行,用於無法接受太多參數的情況
31.compress file 直接壓縮
32.compress -c f > file.z
33.zcat m.z > mm
34.壓縮工具要查看後綴名,對於壓縮後的文件如果刪除或者修改後綴名將無法解壓縮
35.壓縮文件不需要指定後綴名,系統會自動添加響應的後綴名
36.tar -zcpvf data.tar.gz /data
37.xvf 不看後綴統統可以解壓縮,xz bz2 gz
38.tar -T -X 使用的是文件列表
39.cat 可以合並使用split -b 1M -d mybackup.tar.gz mybackup-parts分割的文件
cat mybackup-parts > mybackup.tar.gz
40.cpio 壓縮文件和解壓縮文件、查看文件需要使用重定向符號(cpio命令是通過重定向的方式將文件進行打包備份)
如: cpio -tv < /boot/initramfs-3.10.0-514.el7.x86_64.img 查看該cpio壓縮文件裏的文件內容
cpio -idv < /boot/initramfs-3.10.0-514.el7.x86_64.img
find ./kernel | cpio -ov kernel.cpio 使用find查找目錄中的所有文件並壓縮
41.sed -n 關閉模式空間的默認打印
42.pattern 正則表達式 除 [[]] ==
43.sed -n '/root/p' /etc/passwd
sed -n '$p'
44.sed 支持正則表達式 擴張正則表達式
45.sed -n -e '2p' -e '6p' f1
46.sed '2d' f1 sed '2!d' 除了第二行全刪,模式匹配的後面為取反號
47.模式空間單行處理,默認打印輸出
48.sed -n '/root/=' /etc/passwd =加行號
$= 就是文件的最後一行
49.sed '2,5a=====' f1 追加
50.sed -i.bak '**' ... 修改前加備份 好用
51.單雙引號有沖突是 區分開就可以
52.sed '2,5a\ ====' 斜線便是開始 後面是附加的內容 註意有空格
53.sed '2,5c\ ====' 代替
54.sed '2w f2' f1 符合條件的行保存至f2 r是讀入
55.sed 沒有地址默認全文檔
56.sed 支持正則表達式 也支持後向引用
57.sed -r 's/(.*)/\1magedu/' /etc/passwd
58.sed -r 's/(.*)/magedu\1/' /etc/passwd
59.sed -r 's@/(bin/bash)$@/s\1@' /etc/passwd
60.sed -r 's/(quiet)"$/\1 xyz' /etc/default/grub
61.sed -r '/GRUB_CMDLINE_LINUX/s/"$/ xyz"/' /etc/default/grub
62.ip地址替換 ifconfig ens33 2!d;s@... 直接處理第2行 全行替換某一個,去除行中內容
63.sed -r 's/(.*\/)([^/]+\/?$)/\2/' echo "/etc/sysconfig/network"
64.&引用前面的字符串
65.去除ifconfig ens33的ip地址
ifconfig ens33 |sed -n '2p' | sed -r 's/.*inet (.*)( netmask.*)/\1/'
ifconfig ens33 |sed -n '2p' | sed -r 's/.*inet //' | sed -r 's/ netmask.*//'
ifconfig ens33 |sed -r '2!d;s/.*inet (.*) net.*/\1/' 2!d 除了第2行的其余的行全部刪除
66.取出某一行的文本內容可以使用
sed -n '2p' /etc/passwd 只打印第2行的內容
sed '2!d' /etc/passwd 除了第2行的內容全部刪除
67.取出路徑中的dirname : echo "/etc/sysconfig/network/" | sed -r 's@(.*/)((.+/?)+)$@\1@'
取出路徑中的basename: echo "/etc/sysconfig/network/" | sed -r 's@(.*/)((.+/?)+)$@\1@'
68.只打印文本的最後一行 #sed -n '$p' /etc/passwd
打印包含root的行 # sed -n '/root/p' /etc/passwd
打印以root開頭的行 # sed -n '/^root/p' /etc/passwd
打印以root開頭的行至sync開頭行之間的所有行: sed -n '/^root/,/^sync/p' /etc/passwd
打印奇數行: # echo {1..10} | xargs -n1 | sed -n '1~2p' 打印奇數行 (xargs的 -n1 表示一行輸出的以空格分隔的行轉換成回車,並且每行一個)
打印偶數行: # echo {1..10} | xargs -n1 | sed -n '2~2p' 打印偶數行
輸出符合條件的行至某文件: sed -n '/^root/,/^sync/w /tmp/part.txt' /etc/passwd
打印出文件的空行的行號: sed -n '/^$/=' /etc/rc.d/init.d/functions
69.sed 在使用追加、插入、修改的時候如果要加入空格記得使用\ 轉義
sed '1,2a\ ' /etc/passwd 追加是在所在行的行下追加
sed '1,2c\HHHHHHHHH' /etc/passwd 將第一行和第二行 以HHHHHHHH 來替換
sed '1,2iaaaaaaaaa' /etc/passwd 將aaaaaaaaa 插入至所在行的行前
70.sed -i.bak '/^$/d' test 刪除test文件中的空白行,並使用-i.bak做原始文件的備份並修改原文件
71.nl /etc/passwd |sed '2,5d' 將/etc/passwd 添加行號後,再刪除2到5行
72.sed -n '/^root/s/^root/&er/p' /etc/passwd 搜索文件中的root開頭的行,並將第一個root轉換為rooter
sed -n '/^root/s/root/&er/gp' /etc/passwd 修改該行中所有的root為rooter 註意打印的時候要用gp
73.sed -e 's/root/HHHH/g' -e 's/sbin/GGGGG/g' /etc/passwd
sed -n -e 's/root/HHHH/gp' -e 's/sbin/GGGGG/gp' /etc/passwd 註意使用gp 和是用 -e
74.locate的數據庫文件位置: /var/lib/mlocate/mlocate.db
75.find 命令默認是遞歸查找的,所以不需要添加*
76.交互式登錄:
1.直接通過終端輸入賬戶密碼登錄
2.使用su - username 切換的用戶
執行順序: /etc/profile, /etc/profile.d/*.sh, ~/.bash_profile, ~/.bashrc, /etc/bashrc
非交互式登錄:
1.圖形化窗口打開的終端
2.執行腳本
3.su usernma的部分切換
執行順序: ~/.bashrc /etc/bashrc, /etc/profile.d/*.sh
77. [root@node1 boot]# file initramfs-3.10.0-514.el7.x86_64.img
initramfs-3.10.0-514.el7.x86_64.img: ASCII cpio archive (SVR4 with no CRC)
查看cpio壓縮後裏面文件內容: # cpio -tv < /boot/initramfs-3.10.0-514.el7.x86_64.img
78.find中的時間-n 表示的是n天以內, +n 表示的n天以前
79.正則表達式使用^號來錨定行首,使用[^] 來排除[]之內的任意字符,在通配符中只有排除任意字符的使用,正則表達式大部分情況下是用來查找文本內容的,
可以通過^錨定行首內容並通過正則表達式對所找到的行進行字符的查找,常用到正則表達式的命令有 grep sed [[ =~ ]] vim中 find,其余的ls 使用的是通配符,在[[ == ]]中也可以使用通配符,在[[ =~ ]] 中使用的是擴展的正則表達式,sed可以指定-r選項來使用擴展的正則表達式,find 需要使用-regex 來使用正則表達式,如果為給出,則使用的是文件的通配符
80.查找以.conf結尾的文件 #locate "\.conf$" 註意要轉義,因為.在正則表達式中為單個任意字符,需要轉義成普通字符,也可以寫成 # locate -r '[.]conf$',在[]中的.不需要轉義
學習筆記(8)