亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Linux Shell腳本攻略 讀書筆記

系統 4098 0

Linux Shell腳本攻略 讀書筆記

?

Linux Shell腳本攻略 讀書筆記
Linux Shell腳本攻略

這是一本小書,總共253頁,但內容卻很豐富,書中的示例小巧而實用,對我這樣總是在shell門前徘徊的人來說真是如獲至寶;
最有價值的當屬文本處理,對這塊我單獨整理出來一篇blog,詳見 《Linux Shell文本處理工具集錦》
下面是文本處理之外的簡單介紹,如果你覺得自己的shell需要充充電,強烈建議讀讀這本 《linux Shell腳本攻略》

嗨,Echo一下

從 echo開始:
帶引號的 echo和不帶引號的 echo區別:
使用帶引號時,bash 不會對單引號中的變量進行求值,而是原樣輸出;
而使用雙引號,或者不使用引號,則會對變量進行解析:

        
          echo '$var' // $var

echo $var // 5

echo "$var" // 5
        
      
  • 對比printf 的格式化輸出
    printf "%-5s %-10s %-4s" NO NAME HELLO //左對齊 寬度為 5 10 4
    具體的值使用右邊引號外的;
  • 對比 python中的輸出:
    printf " %s " % "hello"

  • 讓echo支持轉義字符:-e

                
                  [/home/weber#]echo -e '1\t2'
    
    1    2
                
              

給終端來點顏色

  • 在終端彩色輸出:

                
                  echo -e '\e[1;31m this is red text\e[0m'
    
    this is red text
                
              
  • 更有用的是為我們提示符著色:
    vi .profile添加:
    export PS1='[[\e[34;1m]$PWD#\e[0m]'
    image

  • 注意環境變量的賦值錯誤
    var=value //賦值操作 echo $var
    var = value //判斷相等操作

                
                  [/home/weber#]var=5
    
    [/home/weber#]echo 'this is $var'
    
    this is $var
    
    [/home/weber#]echo "this is $var"
    
    this is 5
                
              
  • 獲取變量值的長度:

                
                    length=${#var} //語法真詭異
                
              
  • 打印程序的退出狀態:
                
                    echo $?
                
              
  • 對.bashrc 修改的簡便方法:
                
                    echo 'a=/abc/' >> ~/.bashrc
                
              
  • 為rm打造回收站功能:
                
                    alias rm='cp $@ ~/backup; rm $@' 
                
              

shell的控制結構

  • 條件判斷

                
                  if condition;
    
    then
    
    commands;
    
    elif condition;
    
    then
    
    commands
    
    else
    
    commands
    
    fi
                
              
  • 循環結構

                
                  for var in list;
    
    do
    
    commands;
    
    done
                
              

    list可以是字符串或是序列;
    echo {1..50} 生成列表
    echo {a..z}

  • 更親切的for循環(類C)

                
                  for((int i = 0 ; i < 10 ;i++))
    
    {
    
    commands;
    
    }
                
              
  • while循環

                
                  while condition
    
    do
    
    commands;
    
    done
                
              

算術比較

  • 語法
    if[ $var -eq 0 ] && action;
    -gt :大于
    -lt: 小于
    -ge: 大于等于
    -le: 小于等于
    -a: 邏輯與
    -o: 邏輯或

  • 字符串的比較,最好使用雙中括號
    [[ $str1 == $str2 ]]
    [[ $str != $str ]]
    支持 > 、 <
    判空:-z 非空: -n

  • if更友好:
    if [[ -n $str ]] && [[ -z $str2 ]];
    then
    commands;
    fi

  • 避免if語句過長
    [ condition ] && action ;//condition為真,則執行action
    [ condition ] && action; // condition 為假,則執行aciton
    注意:condition 和[ ] 之間必須有空格,否則報錯;

目錄操作

  • 創建長路徑目錄:

                
                    mkdir -p colin/soft/redis/
                
              
  • 粘滯位和setuid:

                
                    chmod a+t file_dir/
                
              

    設置了粘滯位,只有目錄的所有者才有權限刪除該目錄

  • 讓所有用戶都有權限執行文件:

                
                    chown root.root file 
    
      chmod +s file
                
              

    設置setuid文件權限后,它運行其它用戶以文件所有者身份來執行文件;
    tips:只有linux 的elf二進制文件才可設置這個文件權限;

  • 文件寫保護

                
                    chattr +i file //文件不可修改、不可刪除
                
              
  • touch的妙用
    touch可用來生成空白文件;如果文件存在,則更新時間戳;
    eg:批量生成100個空白文件

                
                  for name in test{0..100}.txt
    
    do
    
    touch $name
    
    done
                
              
  • 只列出目錄的方法

    1. ls -d */
    2. ls -F| grep '/$' //-F會在文件尾部列出文件類型;
    3. ls -l| grep '^d' //-l第一行第一個字符是文件類型;
    4. find . -type d -maxdepth 1 -print
  • 切換目錄快速定位
    壓入并切換:
                
                   pushd /var/www
    
     dirs: 顯示當前路徑棧
                
              
    選擇路徑回切(通過索引編號):
                
                   pushd +3
                
              
    移除最近壓入棧的路徑并切換到下一個目錄:
                
                   popd
                
              

網站下載

wget url:直接下載文件或者網頁;
--limit-rate :下載限速,別太快
-o:指定日志文件;輸出都寫入日志;
-c:斷點續傳

        
              wget -c ftpUrl
        
      

下載整個站點所有頁面

        
          wget --mirror me115.com
        
      

或者:

        
          wget -r -N -l DEPTH me115.com
        
      

-l:指定頁面層級的深度;
-N:允許對文件使用時間戳;

格式化文本形式下載網頁

        
          lynx -dump URL > web.txt
        
      

-dump選項將網頁已ASCII字符形式下載到文本文件中;

更多

如果需要更豐富的下載功能,考慮使用curl;其支持多種協議,
還支持POSF、cookie、認證、用戶代理字符串等特性;
如果你想將網頁處理流程自動化,cURL是很好的選擇;

tar 歸檔工具

  • 歸檔:

                
                    tar -cvf output.tar dir/
                
              

    -c:創建規定
    -f:指定文件名
    -v:在歸檔或解開時顯示更多的詳細信息

  • -r:追加文件到歸檔中:

                
                    tar -rvf output.tar dir2/
                
              
  • -t:顯示歸檔內容;

                
                    tar -tf output.tar
                
              
  • 提取歸檔文件:

                
                    tar -xvf output.tar
                
              
  • 歸檔時排序版本控制目錄(svn、cvs、git等目錄信息):

                
                    tar --exclude-vcs -czvf source_code.tar.gz source/
                
              

rsync 備份系統快照

        
          rsync -av source_path destination_path
        
      

-a:表示歸檔;-v:歸檔時顯示詳細信息
-z:指定在網絡傳輸時使用數據壓縮;
路徑可以是遠程路徑:
eg:rsync -avz source_dir usrname@host:path;
(如果不希望使用交互式的密碼輸入,可使用SSH密鑰來實現)

注:source_dir末尾如果使用路徑/,那么rsync會將source_dir目錄中的所有
內容復制到目的端;如果沒有帶/,則會將source_dir本身復制到目的端;

備份時排除部分文件:

        
          rsync -avz /home/code /mnt/disk/bakup --exclude "*.txt"
        
      

可使用一個列表文件指定需要排除的的文件:
--exclude-from FILEPATH

ftp自動傳輸

使用ftp選項-i關閉交互會話;
eg ftp.sh:

        
          !/bin/bash

HOST='me115.com'

USER='colin'

PASSWD='passwd'

ftp -i -n $HOST <<EOF

user ${USER} ${PASSWD}

binary

cd /home/linux

put test.php

quit

EOF
        
      

磁盤管理

  • 顯示文件大小
                
                    du -h filename
                
              
  • 統計文件夾的詳細大小及總計

                
                    du -ch svn_archives/
                
              

    -s 只輸出合計信息;

  • 找出指定目錄中最大的文件

                
                    du -ak source_dir | sort -nrk 1| head
                
              

    -a:掃描指定目錄下所有文件(遞歸到最深一級目錄)
    結果單位指定:-k KB -m MB -h 人性化顯示(打算排序的時候,不要用這個,因為單位不統一了)
    上述結果中包含了目錄,如果只看文件,不需要目錄:

                
                    find . -type f -exec du -k {} \; | sort -nrk 1| head
                
              

故障排查

  • 當前登錄用戶:who
  • 當前登錄主機的用戶列表:users
  • 排除重復用戶:users | tr ' ' '\n' | sort |uniq
  • 系統運行時長: uptime
  • 獲取登錄會話信息:last (單個用戶 last colin)
  • 列出系統開放端口及運行的服務:
                
                  lsof -i
    
    或者:
    
    netstat -tnp
                
              

使用syslog記錄日志

向syslog文件/var/log/messages中記錄日志信息:

        
          logger hello,this is colin
        
      

發送帶標記的日志信息

        
          logger -t ME115  hello,colin coming
        
      

/etc/rsyslog.d/下配置了標記和日志的對應關系;

殺死進程

  • 通過進程名獲取進程id
                
                    ps -C command_name
                
              
  • 通過命令名終止進程:
                
                    killall process_name
                
              
  • 通過名稱強殺進程:

                
                    kill -9 process_name
                
              
  • 找出命令所在位置: 

                
                    which php
    
      whereis php
                
              
  • 列出命令簡短描述信息:

                
                    whatis ls
                
              

用/proc收集信息

  • 獲取cpu信息:
                
                    cat /proc/cpuinfo
                
              
  • 獲取內存信息:
                
                    cat /proc/meminfo
                
              
  • 獲取分區信息:
                
                    cat /proc/partitions
                
              
    每一個運行的進程在/proc下都有一個以該進程id命名的目錄,
    /proc/PID/下的重要文件:
    environ:包含與進程相關的環境變量;
    exe:到進程工作目錄的符號鏈接;
    fd:進程所使用的文件描述符

Posted by: 大CC | 18NOV,2013
博客: blog.me115.com
微博: 新浪微博

Linux Shell腳本攻略 讀書筆記


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲黄色高清 | 一级在线视频 | 男女性高爱麻豆 | 97免费观看 | 一区二区不卡在线观看 | 日本aa在线观看 | 在线观看三级拍拍视频 | 在线精品国精品国产不卡 | 精品九九在线 | 久久亚洲国产精品五月天婷 | 国产h视频免费观看 | 久久久精品久久 | 特级特黄一级乱仑 | 亚欧中文字幕 | 四虎4hutv永久在线影院 | 天天爽爽 | 一区二区三区四区视频在线 | 免费观看91视频 | 日本欧美在线视频 | 99福利网| 天天舔天天操天天干 | 成人欧美日韩 | 九热爱视频精品视频 | 91九色蝌蚪 | 色婷婷一区二区三区四区成人 | 天天操天天曰 | 久久精品国产免费观看99 | 久久久久久久免费 | 欧美日韩高清在线观看一区二区 | 奇米影视7777久久精品 | 中文字幕免费在线播放 | xxxx免费国产在线视频 | 九九热伊人 | 欧美激情精品久久久久久久 | 在线免费观看亚洲视频 | 中文字幕最新在线 | 欧美成人午夜免费完成 | 91久久精品国产一区二区 | 国内一区亚洲综合图区欧美 | 天天插日日射 | 亚洲图片二区 |