1. 程式人生 > >學習筆記(8)

學習筆記(8)

學習筆記

1.在/etc/profile.d/env.sh中寫入的配置信息不需要#!/bin/bash

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)