Linux學習筆記(13~20)

續前“Linux學習筆記(7~12)”

13、bash腳本編程字符串測試及for循環

  • bc<<<" "
  • for循環
    • 求1-100的和
      • for 變量 in 列表; do
        • 循環體
      • done
    • 生成列表:`seq [起始數] [ 步進數] 結束數`
    • declare -i sum=0:聲明sum爲一個整型( let sum =0) [-x],聲明爲環境變量
    •  for i in `seq 1 $Lines`;do echo "Hello,`head -n $i /etc/passwd | tail -1 | cut -d: -f1`";done:向每個用戶問好,

14、vi:Visual Interfacee

  • vim:VI iMproved,語法着色,
  • 全屏編輯器,模式化編輯器。
  • # vim /path/to/somefile
  • 文件可以不存在,目錄必須存在
  • 打開文件
    • # vim +行數 filename:定位到某行
    • # vim + filename:定位到文件末尾
    • # vim +/pattern:打開文件並定位到第一次被模式匹配到的行的行首
  • vim
    • vim模式
      • 編輯模式(命令模式):默認狀態
      • 輸入模式:輸入到文件中的字符
      • 末行模式:文件管理類的命令
    • 模式轉換
      • 編輯-->輸入:
        • i:在當前光標所在的字符前轉換爲輸入模式。
        • a:在當前 字符後轉換爲輸入模式。
        • o:在當前光標所在行下新建一行並轉換爲輸入模式
        • I:當前光標所在行的行首轉換爲輸入模式
        • A:當前光標所在行的行尾轉換爲輸入模式
        • O:在當前光標所在行上新建一行並轉換爲輸入模式
      • 輸入-->編輯
        • ESC
      • 編輯-->末行
        • 輸入 :
      • 末行模式下
        • 10d:刪除第10行
        • 10,20d:刪除第10--20行
        • set nu:顯示行號,set nonu取消顯示行號
        • !sh命令:
      • 末行-->編輯
        • ESC,ESC
  • 關閉文件
    • 末行下:鍵入w保存,q退出而不保存,wq保存並且退出,q!不保存並且退出,w!強行保存,wq==x保存退出
    • 編輯模式下:ZZ保存退出
  • 移動光標
    • 逐字符移動:hljk對應左右下上。
    • 移動指定數字的字符:編輯模式 數字h
    • 逐單詞移動:w移到下一個單詞的詞首,e跳到當前或下個單詞詞尾,b跳到當前或前一個單詞的詞首,數字w 一次跳多個單詞
    • 行內跳轉:0跳到行首(絕對),^跳到行首(第一個非空白字符),$行尾
    • 行間跳轉:數字G,直接跳到某行,G最後一行,末行模式下直接輸入行號回車即可
    • 翻屏:CTRL+F,CTRL+L,向下,上翻一屏,CTRL+d,u 向下,上翻半屏。
  • 刪除d
    • 單個字符:x,數字x 刪除光標所在處(向後)的字符
    • d命令:d$,刪到行尾部,d0,刪除到行首,dw,逐單詞刪除,數字d跳轉符 dw de db dd(刪行,刪除當前光標所在行)
    • 末行模式下,10,20d,刪除第10到20行,.,+5d 從當前行開始再向下五行,.,100d從當前行到第100行
    • 最後一行$,向下n行+n,
    • vim最近修改的內容可以撤銷
  • 粘貼p
    • p,小寫,刪除或複製的爲整行,粘貼至下方,否則,粘貼至光標所在字符後面
    • P,大寫,刪除或複製的爲整行,粘貼至上方,否則,粘貼至光標所在字符前面
  • 複製y
    • 用法同d,yy複製一行,y0,.,+3y
  • 修改c,先刪除內容再轉換爲輸入模式
    • 用法同d,cc刪除整行並轉換爲輸入模式,...
  • 替換r
    • r,字符,將r處字符替換
    • R,進入替換模式,
  • 撤銷編輯u
    • u:undo撤銷,撤銷前一次操作,可多次使用,連續u,撤銷n次(最多50)
    • 數字u:撤銷最近多次操作。
  • 撤銷撤銷
    • CTRL+r:撤銷剛纔的撤銷操作,還原最近一次撤銷操作。
  • 重複前一次編輯操作
    • . 點命令,
  • 可視化模式
    • v :按字符選取
    • V:按矩形塊兒選取
  • 查找
    • /pattern:全文
    • ?pattern:從光標到文首
    • n:下一個
    • N:上一個
    • 支持正則
  • 查找並替換
    • 末行模式下s命令:addr1,addr2s@pattern@string@g|i 同sed
    • 1,$:同%,表示全文
    • 替換實例:%s/paern/string/g 全文將pattern替換爲string,有/ 需要寫爲\/ ,pattern中的. 需要轉義。
  • 如何使用vim打開多個文件
    • 複製粘貼可以跨文件,
    • 末行下:next,prev上下切換文件,last,first最後第一個文件
    • vim file1 file2 file3:同時打開多個文件
    • 退出::qa退出所有文件
  • 分屏顯示一個文件
    • 窗口拆分,CTRL+w,s水平拆分窗口,CTRL+w,箭頭 切換 CTRL+w,v垂直切分窗口
  • 分窗口顯示多個文件
    • -o:水平分隔顯示
    • -O:垂直分隔顯示
  • 將當前文件的部分內容另存爲另外一個文件
    • :w
    • :addr1,addr2w /path/to/file
  • 將另外一個文件的內容填充在當前文件中
    • :r path/to/somefile在光標下方粘貼
  • 與shell交互
    • :!command
  • 高級
    • :set nu,:set nonu行號
    • :set ic顯示忽略大小寫,:set noic
    • 設置自動縮進 :set autoindent
    • 搜索文本,背景不高亮 :set nohlsearch
    • 開啓語法高亮 :syntax on
    • 非正常退出文本,再次打開報錯
  • 配置文件
    • /etc/vimrc:全局
    • ~/.vimrc:用戶
    • 在於用,不在於記憶:# vimtutor vim課程
  • 腳本
    • #!/bin/bash
    • #
    • for I in {1..10};do
    • if id user$I&>/dev/null;then
    • echo "user$I exist."
    • else
    • useradd user$I &>/dev/null
    • echo "user$I" | passwd --stdin user$I &> /dev/null
    • echo "add user$I success!"
    • fi
    • done
  • 三種測試
    • 整數測試
      • le, lt ,ge, gt, eq, ne
    • 字符測試
      • == != > < n z
    • 文件測試
      • e f d r w x
    • 組合測試條件
      • -a:與 也可 [ ] && [ ]
      • -o:或
      • !:非
        • 取反滿足摩根定律
  • 腳本運算
    • let I=$[$I+1]
    • let sum+=$I 加等,其他類比
    • let I++

15、文件查找

  • lacate
    • 非實時,模糊,根據全系統文件數據庫完成:
    • locate filename
    • 手動更新數據庫:updatedb
    • 安裝:mlocate
  • find
    • 實時,精確,速度慢,遍歷指定目錄中所有文件,支持多種查找標準
    • find 查找路徑==當前 查找標準==指定路徑下所有 找到以後的動作==打印到屏幕
    • 查找標準
      • -name ‘filename’,且filename支持正則表達式
      • -iname ‘filename’,文件名匹配不區分大小寫
      • -regex pattern,基於正則表達式進行文件名匹配
      • -user username ,基於屬主進行查詢
      • -group groupname
      • -uid uid,用戶刪除後,其文件顯示屬主爲原先id
      • -nouser,查找無屬主的文件
      • -nogroup,查找無屬組的文件
      • -type filetype
        • f:普通文件
        • d:目錄
        • c:字符設備
        • b:塊設備
        • l:鏈接
        • p:管道
        • s:套接字設備
      • -size 【+,-】數字【k,m,g】
      • 訪問時間
        • -mtime
        • -ctime
        • -atime
          • [+ | - ] 天數
        • -mmin
        • -cmin
        • -amin
      • -perm mode(644):根據權限
        • -mode:對應位完全包含即可顯示
        • /mode:只要有一位匹配即可顯示
        • mode:精確匹配
    • 動作
      • 默認爲-print
      • -ls:類似ls -l,顯示匹配到的文件的信息
      • -ok command {} \; {}爲文件名稱佔位符,每一個操作都需要用戶確認
      • -exec:同-ok ,但操作不需要用戶確認
      • -xargs:從標準輸入接收並執行find ... | xargs echo {} >> /tmp/jj.txt
    • 組合條件
      • -a:默認選項
      • -o
      • -not

16、特殊權限

  • SUID
    • 無論哪個用戶啓動文件,該文件的屬主是程序文件自身的屬主,而不是啓動者。
    • 賦予SUID:chmod u+s file,原有x,則爲s,否則顯示爲S。
    • 擁有suid,則任何用戶啓動文件,以文件所有者的權限執行。
  • SGID
    • 無論哪個用戶啓動文件,該文件的屬組是程序文件自身的屬主,而不是啓動者所屬的基本組。
    • chmod g+s file,
    • 目錄擁有sgid,在目錄下建立的文件,文件的基本組不再是用戶的基本組,而是目錄的基本組
    • 測試執行順序
      • 添加用戶:useradd user1
      • 添加基本組:groupadd develop
      • 改目錄屬組:chmod g+w /tmp/project/
      • 目錄屬組添加sgid: chmod g+s /tmp/project/
      • 將用戶附加組改爲與目錄相同:usermod -a -G develop user2
      • 此後,user2在/tmp/project下間的新文件,屬組爲develop,若無sgid,間的文件屬組爲用戶基本組,
  • Sticky:在一個公共目錄,每個用戶均可創建文件,刪除自己的文件,但不可以刪除別人的文件
    • chmod o+t dir
  • 000---111:SUID,SGID,Sticky。
    • chmod 1755 file : 1代表Sticky,3755,3代表011,SGID和Sticky
    • umask爲四位,第一位爲特殊權限,

17、facl及用戶及Linux終端

  • FACL:filesystem access control list
    • 利用文件擴展保存額外的訪問控制權限
    • mask,額外的用戶(組)給的權限不會超過mask,
    • setfacl:設置facl
      • -m:設定
        • u:UID:perm
          • setfacl -m u:Hadoop:rw filename
          • setfacl -m d:u:Hadoop:rw filename 爲目錄設置默認的訪問控制列表
        • g:GID:perm
          • setfact -m g:mygroup:rw filename
      • -x:取消設定
        • setface -x u:Hadoop filename
      • --mask:
    • getfacl:查看facl
  • 檢查順序(權限應用次序)
    • owner-->facl,user-->group-->facl,group-->other
  • 幾個命令
    • whoami:查看當前登陸的用戶
    • who:顯示當前登陸到系統上的用戶
      • 終端類型
        • 控制檯:console,直接連到主機上的物理設備,不屬於終端,
        • pty:物理終端,相當於控制檯,VGA
        • tty#:虛擬控制檯,通常是在本地,虛擬終端,VGA
        • ttys#:串行終端
        • pts/#:僞終端,ssh
      • -r:顯示當前運行級別
      • -H:顯示頭部
      • -r:顯示當前運行級別及上次運行級別
      • 每隔5秒,查看user1是否登陸,如登陸,顯示
        • sleep
    • w:顯示登陸用戶以及what
    • last:顯示登陸日誌 /var/log/wtmp文件,登陸歷史以及重啓歷史
      • -n:僅顯示最近n次
    • lastb:顯示/var/log/btmp文件,顯示用戶錯誤的登陸嘗試
      • -n
    • lastlog:顯示每個用戶上一次成功登陸時間
      • -u username
    • basename:顯示路徑的基名(文件名)
      • basename $0:執行腳本時的腳本路徑及名稱
    • mail:
      • -s:指定 subject
      • # cat /etc/fstab | mail -s "how are you" root 管道命令
      • #  mail -s "how are you" root < /etc/fstab 輸入重定向
    • hostname:顯示主機名(實時的,非環境變量$HOSTNAME)
    • RANDOM:生成隨機數,0-32768
      • echo $RANDOM
      • 隨機數生成器:/dev/random,熵池,會被取空,
      • /dev/urandom,不會取空,軟件模擬生成,

18、bash腳本編程之case語句與腳本選項進階

面向過程

  • 控制結構
    • 順序
    • 選擇
      • if:單分支,雙分支,多分支
      • case語句
        • case SWITCH in
        • value 1)
          • statement
          • ;;
        • esac
    • 循環

19、磁盤管理

  • 機械式硬盤
  • RAM:易失
  • 分區:partition
    • 文件系統
  • MBR:master boot record 主引導分區
    • 主引導記錄
    • 屬於磁盤,512byte
      • 446byte:bootLoader,程序,
      • 64byte:每16標識一個分區
      • 2byte:魔數 magic number 標記mbr是否有效。
  • 真空避灰塵
  • metadate
    • 文件系統
    • 元數據存儲區
    • 塊位圖:bitmap
    • inode:索引節點
    • 硬鏈接:不同文件名指向同一個文件塊兒,指向同一個inode,# ln 源文件 目標文件,不能爲文件夾創建,增加被硬鏈接的次數
    • 符號鏈接,軟鏈接:存儲另一個文件的路徑,大小爲路徑字符數,# ln -s 源文件 目標文件,可應用於目錄,只保留路徑的字符。
    • 本文件被硬鏈接的次數:防止一個文件被多個文件鏈接,誤刪。
  • # du
    • -s:顯示每一個的大小
    • -h:人性化
  • # df
    • 顯示磁盤分區使用情況
    • -h
    • -P
  • 設備文件
    • b:按塊爲單位,隨機訪問的設備
      • 硬盤
    • c:按字符爲單位,線性設備
      • 鍵盤
    • /dev
      • 主設備號:標識設備類型
      • 次設備號:標識同一設備類型的不同設備
    • # mknod 創建設備文件
      • mknod mydev c 66 0
      • -m 指定權限
    • # tty
      • 查看當前終端設備
      • echo “hello” >> /dev/pts/1
    • 硬盤設備的設備文件名
      • IDE,ATA:hd
        • a,b,c....來區別同一類型下的不同設備
        • /dev/hda /dev/hdb
        • 分區:hda1,hda2,...had4 邏輯分區從hda5開始
        • 查看當前設備磁盤及其分區# fdisk -l
        • 管理磁盤分區fdisk
      • SATA,SCSI,USB:sd
  • 格式化
    • 低級格式化:廠商完成
    • 高級格式化:創建文件系統# mkfs -t ext3
  • 文件系統類型
    • 管理方式不同
    • /,/usr,/var,/tmp
    • 只有/可以自引用。普天之下莫非王土,率土之濱莫非王臣。
  • fdisk
    • # fdisk /dev/sda 打開交互式界面
      • p:顯示當前硬盤的分區,包括沒保存的
      • n:創建新分區
        • e:擴展
        • p:主分區
      • d:刪除一個分區
      • w:保存退出
      • q:不保存退出
      • t:修改分區類型
      • l(L):顯示支持的所有類型
    • # partprobe 5.x
      • 通知內核重讀硬盤分區表
      • /proc/partitions
  • VFS
    • 虛擬文件系統,對應內核,沙漏模型。
  • 塊大小:block size
    • 1024,2048,4096
  • 位圖,bitmap
    • 加快數據查找速度
    • super block
    • boot block每個分區都有,引導操作系統,
    • index node:inode
  • mkfs
    • -t:fstype,
    • # mke2fs:專門管理ext系列文件
      • -j :創建ext3類型的文件
      • -b BLOCK_SIZE:指定塊兒大小,默認4096,,1024,2048
      • -L LABEL:指定分區卷標
      • -m #:指定預留給超級用戶的塊數百分比
      • -i # :指定爲# 個字節指定一個inode,默認8192
  • blkid 設備名
    • 查詢或查看磁盤設備的相關屬性
    • # e2label 設備:查看或設置卷標
  • # tune2fs -j 設備名
    • 不損害文件,調整文件系統類型(ext2-->ext3)
    • -L:設定或修改卷標
    • -m # :調整預留百分比
    • -r #:指定預留塊兒數
    • -o acl:指定默認掛載選項
    • -c # 指定掛載次數達到# 次後自檢,0或-1關閉
    • -i # 指定掛載# 天后進行自檢,0或-1關閉
    • -l:顯示超級塊兒的信息
      • # dumpe2fs:顯示文件屬性信息,更加詳細
        • -h:只顯示超級塊兒信息

20、壓縮及歸檔

  • 壓縮格式:gz,bz2,xz,zip,Z
  • 壓縮算法
  • 壓縮命令
    • compress,uncompress
    • gzip:.gz
      • 默認會刪除原文件
      • -d:解壓縮
        • gunzip:解壓縮,完成後刪除原文件
      • -# :指定壓縮比,1-9,默認6
      • zcat:臨時查看壓縮文件的內容
    • bzip2:.bz2
      • 比gzip壓縮比大,使用格式類似。
      • -k:壓縮時保留原文件
      • -d:解壓縮
        • bunzip2
      • bzcat:臨時查看壓縮文件的內容
    • xz:.xz
      • 壓縮比更大
      • -d:解壓縮
        • xzdec:解壓縮到屏幕
        • unxz
        • xzcat
  • archive:歸檔
    • zip:可以壓縮目錄,既歸檔又壓縮
      • # zip 目的.zip 源..... 壓縮後不刪除源文件
      • unzip:
    • tar:只歸檔不壓縮
      • -c:創建歸檔文件
      • -f file.tar:操作的歸檔文件
      • # tar -cf test.tar test*
      • -x:展開歸檔
      • --xattrs:歸檔時,保留文件的擴展屬性信息
      • -t:不展開tar,查看歸檔了哪些文件
      • -zcf:既歸檔又壓縮(gzip)
      • -zxf:解壓(gzip)及展開歸檔
      • -jcf:bzip2
      • -jxf:
      • -Jcf:xz
      • -Jxf:
  • cpio:歸檔工具,與tar類似
  • read NAME。。。:交互式,給NAME賦值
    • -p “PROMPT”:給出提示,
    • -t #:超時
  • 腳本編程:while循環
    • 適用於循環次數未知的場景
    • while [ CONDITION ]; do
      • statement 。。。
    • done
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章