echo -e "\e[1;42m this is test \e[0m" 'this is test'會被彩色打印,其中顏色由42m決定
echo -n this is test 'this is test'不會被換行
printf "%-4s %-5.1f\n" wade 3.1 wade 3.1分別按照左對齊打印出來,並採用4s和5.1f格式
pgrep gedit 可以查看到gedit的進程ID
export命令用來設置環境變量。至此以後,從當前shell腳本執行的任何程序都會繼承這個變量
export PATH="$PATH:/home/user/bin" 在PATH中新加一條路徑
var=1234567890
length=${#var}
echo $length 獲得變量的長度
echo $SHELL或者echo $0 識別當前的shell版本
echo $UID 如果結果爲0,標示當前爲root用戶
echo $PS1 顯示當前bash的提示字符串,其中\u爲用戶名,\h爲主機名,\w爲當前的工作目錄。
可以利用\e[1;32m設置彩色提示字符串
算數操作:
no1=4
no2=5
let result=no1+no2 let命令可以直接執行基本的算數操作
let no1+=6
echo $result
echo $no1
result=$[no1+no2]
result=$[no1+100] 可以使用[]操作符,和let命令類似
result=$((no1+10)) 也可以使用(())操作符,但是變量名之前需要加上$
result=`expr 3 + 4`
result=$(expr $no1+5) expr也可以用作類似算數操作
echo "4 * 0.45" | bc bc執行浮點數運算
echo "scale=2;3/8" | bc scale設置小數精度,scale=2表示將小數位個數設置爲2
no=100
echo "obase=2;$no" | bc 利用obase進行進制轉換
no=1100100
echo "obase=10;ibase=2;$no" | bc obase和ibase配合進行進制轉換
echo "sqrt(100)" | bc sqrt計算平方根
echo "10^10" | bc ^計算平方
文本描述符:
0 stdin
1 stdout
2 stderr
echo "this is test" >temp.txt
echo "this is test 1" >>temp.txt >等同於1>;>>等同於1>>
當命令輸出錯誤信息時,stderr信息就會被打印出來。當一個命令發生錯誤並退回時,它會返回一個非0的退出狀態;而當命令成功完成後,它會返回數字0。
退出狀態可以從特殊變量$?中獲得。
ls + 2>out.txt 將錯誤輸出到out.txt文件中
cmd 2>stderr.txt 1>stdout.txt 將stderr單獨定向到一個文件中,將stdout重定向到另一個文件中
cmd &>output.txt 將stderr和stdout都被重定向到同一個文件中
command | tee [-a] FILE1 FILE2 在終端中打印,並將它重定向到文件FILE1和FILE2.-a表示爲追加內容選項
exec 3<input.txt exec命令創建自定義的文件描述符
數組和關聯數組
array_var=(1,2,3,4,5) 定義數組,以0位起始索引
array_var[0]="test" 自定義數組
echo ${array_var[0]} 打印出特定索引的數組元素內容
echo ${array_var[*]} 打印所有數組的內容
echo ${#array_var[*]} 打印數組長度
declare -A ass_array 定義關聯數組
ass_array=([index1]=val1 [index2]=val2) 內嵌索引-值列表法
ass_array[index1]=val3 獨立的索引-值
echo ${ass_array[index1]} 打印index1索引對應的值
echo ${!ass_array[*]} 列出數組索引
alias new_command='command sequence' 創建新的別名。要想永久保存,需要將其放入到~/.bashrc文件中。若想刪除只需要使
用unalias命令或者從~/.bashrc中刪除
tput cols 獲取終端的行數
tput lines 獲取終端的列數
tput longname 打印出當前終端名
tput setb [0-7] 設置終端背景色
tput bold 設置字體爲粗體
echo -e "Enter password: "
stty -echo 禁止將輸出發送到終端
read password
stty echo 允許發送到終端
echo
echo Password read
date 顯示日期
date +%s 以紀元時顯示時間,主要用途是做時間差的秒數
date --date "jan 20 2011" +%s 按照給定日期顯示紀元時
date --date "jan 20 2011" +%A 按照給定日期顯示是星期幾
%A 星期
%B 月
%d 日
%D 固定格式日期(mm/dd/yy)
%Y 年
%H 小時
%M 分鐘
%S 秒
%N 納秒
%s 紀元時
date "+%d %B %Y" 按照指定格式打印時間
date -s "21 june 2015 11:12:23" 設置日期和時間
bash -x script.sh 使用-x選項,啓動跟蹤調試shell腳本。打印出所執行的每一行命令以及當前狀態
set -x 在執行時顯示參數和命令
set +x 禁止調試
set -v 當命令進行讀取時顯示輸入
set +v 禁止打印輸入
#!/bin/bash -xv 在/bin/bash啓動xv,可以啓用調試功能
function fname()
{
statements; 自定義函數。或者去掉function也可以
}
fname 執行函數
fname arg1 arg2 執行函數,傳遞參數
$1是函數的第一個參數
$2是函數的第二個參數
$@是打印所有參數
$*是以單個實體的方式打印所有參數
遞歸函數
F()
{
echo $1;
F HELLO;
SLEEP 1; SLEEP表示休眠1秒鐘
}
導出函數
export -f fname 導出函數,擴展函數的作用域。可以擴展到子進程
FORK炸彈
:() {:|:&};: 該函數能夠調用自身,不斷的生成新的進程,最終造成DDOS***
ls | cat -n >out.txt 列出當前目錄下的內容,cat -n追加行號存到out.txt文件中
pwd
(cd /bin;ls) 利用()定義一個子shell
pwd
read -n 2 var 讀取2個字符並存入變量var中
read -s var 以不回顯的方式存入變量
read -p "enter input:" var 顯示提示信息
read -t timeout var 在特定時限內讀取輸入
read -d "定界符" var 用定界符結束輸入行
IFS(內部字段分隔符) 默認爲空
for循環
for var in list;
do
commands
done
for ((i=1;i<10;i++));
do
commands
done
echo {1..50} 生成一個1到50的數字列表
echo {a..z} 生成a..z的列表
while循環
while condition
do
commands
done
until循環
x=0;
until [$x -eq 9]
do
let x++;echo $x
done
if 條件;then
commands;
fi
if 條件;then
commands;
elif conditions;
then
commands;
else
commands;
fi
[condition] && action 如果條件爲真,則執行action
[condition] || action 如果條件爲假,則執行action
條件判斷:
算術比較
-eq 等於
-ne 不等於
-gt 大於
-lt 小於
-ge 大於或等於
-le 小於或等於
-a 邏輯與
-o 邏輯或
文件系統相關測試
-f $var 判斷var變量是否有文件
-x 判斷是否有可執行文件
-d 目錄
-e 文件是否存在
-c 字符設備文件
-b 塊設備文件
-w 文件是否可寫
-r 文件是否可讀
-L 是否有符號鏈接
字符串比較
[[ $str1 = $str2 ]] 當str1等於str2時,返回真。就是str1和str2包含的文本是一模一樣的
[[ $str1 == $str2 ]] 檢查字符串是否相等
[[ $str1 != $str2 ]] 字符串不同則返回真
[[ $str1 > $str2 ]] 字符串1的字母序大於字符串2,返回真
[[ $str1 < $str2 ]] 字符串1的字母序小於字符串2,返回真
[[ -z $str1 ]] 若str1爲空,返回真
[[ -n $str1 ]] 若str1內容爲非空,則爲真
if [ $var -eq 0 ];then echo "true";fi
can be written as
if test $var -eq 0;then echo "true";fi 可以用test命令替代[]符號
cat 1.sh 2.sh 拼接1.sh和2.sh文件內容
cat -s 1.sh -s選項壓縮1.sh中的連續的空白行
cat 1.sh | tr -s '\n' 利用tr移除空白行
cat -T 1.sh 將1.sh中的製表符標記成^|
script -t 2> timing.log -a output.session timing.log用於存儲時序信息,描述命令在何時運行。output.session用於存儲命令輸出
exit 退出錄製終端會話
scriptreplay timing.log output.session 播放錄製終端會話
Terminal1輸入以下命令:
mkfifo scriptfifo
Terminal2輸入以下命令:
cat scriptfifo
返回terminal1,輸入以下命令:
script -f scriptfifo
commands;
exit 當退出時,終端1變成廣播員,終端2變成聽衆
find . -print 當前目錄下打印出匹配文件的文件名(路徑)。其中'\n'作爲用於分隔文件的定界符
find . -print0 '\0'作爲定界符
find . -iname "example*" -print 尋找當前目錄下example開頭的文件,忽略大小寫,並打印出來
find . \( -name "*.txt" -o -name "*.pdf" \) -print 尋找匹配多個條件中的一個並打印
find . -path "*slynus*" -print 尋找符合slynus路徑
find . -regex "*slynus*" -print 以正則表達式的方式尋找路徑
find . ! -name "*.txt" -print 當前目錄下不是以txt爲後綴的文件
find . -maxdepth 1 -type f -print maxdepth參數指定尋找最大深度
find . -mindepth 2 -type f -print mindepth參數指定尋找最小深度
-atime 訪問時間 用戶最近一次訪問文件的時間
-mtime 修改時間 文件內容最後一次被修改的時間
-ctime 變化時間 文件元數據(例如權限或所有權)最後一次被改變的時間
其中-表示小於,+表示大於
-amin 訪問時間 以分鐘爲計時
-mmin 修改時間
-cmin 變化時間
-newer 比較時間 需找比指定文件更新的所有文件
find . -type f -size +2k 尋找當前目錄下文件大小大於2k的文件.
find . -type f -size -2k
find . -type f -size 2k
還可以用b/c/w/k/m/g代替k
find . -type f -name "*.txt" -delete 刪除匹配的文件
find . -type f -perm 644 -print 基於文件權限匹配
find . -type f -user slynux -print 基於文件所有權匹配
find . -type f -user root -exec chown slynux {} \; 利用exec和{}可以結合find執行命令或動作
本例的意思是將所有的符合文件全部更改其所有權爲slynux用戶.其中{}表示爲所有符合條件的集合
find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;
find devel/source_path \( -name ".git" -pruns \) -o \( -type f -print \) 該命令表示打印出不包括在.git目錄中的所有文件的名稱(路徑).使用關鍵字pruns
xargs命令把從stdin接收到的數據重新格式化,再將其作爲參數提供給其他命令
cat example.txt | xargs xargs將多行輸入轉換成單行輸出。將'\n'符轉換成" "(空格)
cat example.txt | xargs -n 3 指定每行最大的參數數量n,每個參數都是由" "(空格)隔開
echo "splitXsplitXsplitXsplit" | xargs -d X -n 2 利用-d選項指定分隔符,默認爲IFS作爲分隔符
#cecho.sh
echo $*'#' 定義一個文件,當參數被傳遞給文件後,它會將這些參數打印出來,並以#字符作爲結
尾
#args.txt
args1
args2
args3
cat args.txt | xargs -n 1 ./cecho.sh 當需要每次提供一個參數時,指定n=1
cat args.txt | xargs ./cecho.sh 當需要每次提供所有參數時
INPUT | xargs -n X 每次執行腳本需要X個參數的命令時
./cecho.sh -p arg1 -l
./cecho.sh -p arg2 -l arg部分是唯一的可變文本
cat args.txt | xargs -I {} ./cecho.sh -p {} -l 利用-I選項配合{}指定了替換字符串,可以實現上面的執行命令
find . -type f -name "*.txt" -print0 | xargs -0 rm -f 刪除匹配的文件,其中\0作爲輸入定界符。
find source_code_dir_path -type f -name "*.c" -print0 | xargs -0 wc -l 統計源代碼目錄中所有C程序文件的行數
tr只能通過stdin,而無法通過命令行參數來接受輸入。
tr [options] set1 set2
將來自stdin的輸入字符從set1映射到set2,並輸出到stdout。若set2的長度小於set1,則set2會不斷重複其最後一個字符,直到長度與set1相同。如果set2的
長度大於set1,那麼在set2中超出set1長度的那部分字符則完全被忽略
echo "HELLO WORLD WHO IS THIS" | tr 'A-Z' 'a-z' 將輸入字符由大寫轉換成小寫
echo 12345 | tr '0-9' '9876543210' 加密
echo 87654 | tr '9876543210' '0-9' 解密
echo "hello 123 world 456" | tr -d '0-9' 利用-d選項刪除字符。本例結果爲hello world
echo hello 1 char 2 next 4 | tr -d -c '0-9 \n' 利用-c選項使用字符的補集,將去除非set1中出現的所有字符。本例結果爲 1 2 4
echo "ssssss" | tr -s 's' 利用-s選項壓縮字符。本例壓縮s,結果爲s
字符類
alnum 字母和數字
alpha 字母
cntrl 控制(非打印)字符
digit 數字
graph 圖形字符
lower 小寫字母
print 可打印字符
punct 標點符號
space 空白字符
upper 大寫字母
xdigit 十六進制字符
tr '[:lower:]' '[:upper:]'
md5sum 1.sh > 1.md5 計算1.sh的校驗和(32字符,十六進制)並保存到1.md5文件中
md5sum -c 1.md5 利用生成的文件覈實數據完整性
md5sum *.md5 用所有的.md5信息來檢查所有的文件
sha1sum 1.sh > 1.sha1 計算1.shd點校驗和(40字符,16進制)
md5deep -rl directory_path > directory.md5 計算目錄的校驗和。r表示遞歸,l表示使用相對路徑。需要安裝md5deep軟件包
md5sum -c directory.md5 覈實目錄
sort file1.txt file2.txt > sort.txt 利用sort將一組文件進行排序
cat sort.txt | uniq > uniq.txt 利用uniq找出已排序文件中不重複的行
sort -n file.txt 按數字進行排序
sort -r file.txt 按逆序進行排序
sort a.txt -o a.txt 對a.txt的文件排序
sort -M months.txt 按月份進行排序
sort -nC file.txt 檢查是否按照數字進行排序
sort -m sorted1 sorted2 合併兩個排過序的文件,而且不需要對合並後的文件再進行排序
sort -nrk 1 data.txt -k指定了排序應該按照哪一個鍵(列號)來進行排序。
sort -u unsort.txt 只顯示唯一的行
uniq -u unsort.txt 只顯示唯一的行
sort unsort.txt | uniq -c 統計各行在文件中出現的次數
sort unsort.txt | uniq -d 找出文件中重複的行
sort data.txt | uniq -s 2 -w 2 -s指定可以跳過前n個字符,-w指定用於比較的最大字符數
uniq -z file.txt 用uniq命令生成包含0值字節終止符的輸出
uniq -z file.txt | xargs -0 rm 刪除指定的文件
temp_file=$(tempfile) 爲變量temp_file賦值了一個臨時文件名
temp_file="/tmp/file-$RANDOM" 加帶了隨機數的文件名作爲臨時文件名
echo $RANDOM 總是返回一個隨機數
temp_file="/tmp/var.$$" 生成帶當前運行腳本的進程ID的臨時文件
dd if=/dev/zero bs=100k count=1 of=data.file 生成一個大小爲100KB的測試文件
split -b 10k data.file 將文件分割爲多個大小爲10k的文件
split -b 10k data.file -d -a 4 -d參數指定以數字爲後綴,-a參數指定後綴長度
split -b 10k data.file -d -a 4 split_file 指定每個分割文件的前綴爲split_file
split -l 10 data.file -l選項指定分割文件僅有10行
csplit server.log /SERVER/ -n 2 -s {*} -f server -b "%02d.log";rm server00.log
/SERVER/ 用來匹配某一行,分割過程即從此開始
{*} 表示根據匹配重複執行分割,直到文件末尾爲止。{整數}指定分割執行的次數
-s 使命令進入靜默模式,不打印其他信息
-n 指定分割後的文件名後綴的數字個數
-f 指定分割後的文件名前綴
-b 指定後綴格式
因爲分割後的第一個文件沒有任何內容,所以刪除第一個文件
file_jpg="sample.jpg"
name=${file_jpg%.*} 利用$操作符可以將名稱部分從“名稱.擴展名”這種格式的文件名中提取出來
echo File name is :$name
var=hack.fun.book.txt
echo ${var%.*} -->hack.fun.book 從右到左
echo ${var%%.*} -->hack %%符號執行非貪婪匹配
echo ${var#*.} -->fun.book.txt 從左到右
echo ${var##*.} -->txt ##符號執行非貪婪匹配
extension=${file_jpg#*.} 利用#操作符可以將擴展名部分提取出來
echo Extension is : $extension
rename *.jpg *.JPG 將*.jpg更名爲*.JPG
目錄/usr/share/dict包含了一些詞典文件
命令aspell來覈查某個單詞是否在字典中
look android filepath 返回filepath路徑中以android開頭的文件/目錄
read -p "Enter number:" no 將輸入內容賦值給變量no
交互式自動化:expect
#!/bin/bash
#文件名:interactive.sh
read -p "Enter number:" no
read -p "Enter name:" name
echo you have entered $no,$name;
#!/usr/bin/expect
#文件名:automate_expect.sh
spawn ./interactive.sh spawn參數指定需要自動化哪一個命令
expect "enter number:" expect參數提供需要等待的消息
send "1\n" send是要發送的消息
expect "enter name:"
send "hello\n"
expect eof expect eof指明命令交互結束
comm a.txt b.txt 比較A.TXT和B.TXT的文件。輸出的第一列包含只在a.txt中出現的行,第二列只包含在b.txt中出
現的行,第三列包含共同出現的行
comm a.txt b.txt -1 -2 -1從輸出中刪除第一列,-2從輸出中刪除第二列,-3從輸出中刪除第三列
用戶特殊權限:S
setuid權限允許用戶以其擁有者的權限來執行可執行文件,即使這個可執行文件是由其他用戶運行的
用戶組特殊權限:S
setgid位允許以同該目錄擁有者所在組相同的有效組權限來允許可執行文件,但是這個組和實際發起命令的用戶組未必相同
其他用戶特殊權限:T/t
粘滯位(sticky bit)。當一個目錄設置了粘滯位,只有創建該目錄的用戶才能刪除目錄中的文件,即使用戶組和其他用戶也有寫權限
如果沒有設置執行權限,但是設置了粘滯位,那麼使用t;如果同時設置了執行權限和粘滯位就使用T
chmod a+t directory_name 設置粘滯位
chmod 777 . -R 以遞歸的方式設置權限
chown user.group . -R 以遞歸的方式設置所有權
chmod +s executable_file 以不同的用戶運行可執行文件
chmod u+s file 置位setuid
chmod g+s file 置位setgid
chattr +i file 將文件file設置爲不可修改
chattr -i file 將文件file重新設置爲可修改
touch -a file 只更改文件訪問時間
touch -m file 只更改文件內容修改時間
touch -d "Fri Jun 25 10:20:12 IST 2012" file -d爲時間戳指定特定的時間和日期
ln -s target symbolic_link_name 創建軟連接symbolic_link_name-->target
file filename 顯示文件類型信息
file -b filename 顯示不包括文件名在內的文件類型信息
環迴文件系統是指那些在文件中而非物理設備中創建的文件系統
創建一個1G大小的文件
dd if=/dev/zero of=loopbackfile.img bs=1G count=1
格式化這個文件
mkfs.ext4 loopbackfile.img
檢查文件系統
file loopbackfile.img
掛載環迴文件
mkdir /mnt/loopback
mount -o loop loopback/img /mnt/loopback
在內部,這個環迴文件連接到一個名爲/dev/loop1或者loop2的設備上,手動操作如下
losetup /dev/loop1 loopback.img
mount /dev/loop1 /mnt/loopback
將ISO文件作爲環迴文件掛載
mkdir /mnt/iso
mount -o loop linux.iso /mnt/iso
通過sync立即應用更改
sync
創建ISO鏡像
從/dev/cdrom創建一個ISO鏡像
cat /dev/cdrom > image.iso
創建鏡像的最好方法是用dd工具
dd if=/dev/cdrom of=image.iso
mkisofs命令創建iso文件系統
mkisofs -V "Label" -o image.iso source_dir/
-V指定了ISO文件的的卷標,source_dir是作爲ISO文件內容來源的目錄路徑
能夠啓動閃存或硬盤的混合ISO
isohybrid命令把標準ISO文件轉換成混合ISO
isohybrid image.iso ->可用於寫入USB存儲設備
將ISO寫入USB存儲設備
dd if=image.iso of=/dev/sdb1
命令行刻錄ISO
cdrecord -v dev=/dev/cdrom image.iso
-speed 速度 指定刻錄速度
-multi 刻錄方式採用多區段
玩轉CD ROM托盤
eject 彈出光驅托盤
eject -t 合上光驅托盤
查找文件差異並進行修補
diff -u version1.txt version2.txt 以一體化形式輸出差距,version2.txt中沒有version1.txt的文件被顯示。+表示是新加入的行,-表示是刪除的行
diff -u version1.txt version2.txt > version.patch 將diff的輸出重定向到一個文件
patch命令配合version.patch,當應用與version1時,就可以得到version2
patch -p1 version1.txt < version.patch 此時version1的內容和version2相同
patch -p1 version1.txt < version.patch 再次輸入該命令撤銷修改
生成目錄的差異信息
diff -Naur directory1 directory2
-N:將所有缺失的文件視爲空文件
-a:將所有文件視爲文本文件
-u:生成一體化輸出
-r:遍歷目錄下的所有文件
head -n 4 file 指定打印前幾行
head -n -N file 打印除了最後N行之外的所有行
seq 11 | head -n -5 打印除了最後五行之外的所有行
seq 100 | head -n 5 打印前五行
tail -n 5 file 打印後五行
tail -n +(N+1) 打印除了前N行之外的所有行
seq 100 | tail -n +6 打印第六行到第一百行
tail -f file 動態顯示文件
查看當前路徑下的目錄
ls -d */
用pushd和popd快速定位
pushd和popd可以用於在多個目錄之間進行切換而無需複製粘貼。pushd和popd是以棧的方式來運作,後進先出。
pushd /var/www 壓入路徑
pushd /usr/src 壓入路徑
pushd /etc 壓入路徑
查看棧內容
dirs
切換目錄
pushd +3 每條路徑的編號是以0開始,從左到右
移除棧內容
popd 當前目錄被移除
popd +3 將第三個移除
cd - 切換到上個目錄
統計行數
wc -l file
統計單詞數
wc -w file
統計字符數
wc -c file
默認顯示行數、單詞數和字符數
wc file
打印最長行的長度
wc file -L
打印目錄樹
tree -/unixfs 樹狀UNIX文件系統
tree path -P pattern 用通配符描述樣式
tree path -I pattern 只重點標出除符合樣式之外的文件
tree -h 同時打印出文件和目錄的大小
tree PATH -H http://localhost -o out.html 以html形式輸出目錄樹
grep match_pattern filename 從文件中搜索
grep word filename --color 重點標記處匹配到的單詞
grep -E "[A-Z]+" 或者 egrep "[A-Z]+" 正則表達式查找
grep word -o file -o選項只輸出匹配到文本部分
grep -v word file -v選項打印除了匹配外的所有行
grep -c word file -c統計匹配行的數量
grep -c word file | wc -l wc -l配合-c可以統計匹配項的數量
grep -n word file -n選項包含匹配字符串的行數
grep word file -R -n -R遞歸搜索
grep -i word file -i忽略大小寫
grep -e word1 word2 file -e匹配多個樣式
grep dir --include word --include搜索中包含文件
grep dir --exclude word --exclude搜索排除文件
--exclude-dir
--exclude-from FILE
cut按列切分文件
cut -f 2,3 filename 提取filename文件中2、3列
cut -f 3 --complement file 提取除了第三列外的所有列
cut -f 3 -d ";" file -d指定了定界符
cut -c 1-5 file 打印前5個字符
cut -c -5 file 打印前5個字符
-c 表示字符
-b 表示字節
-f 表示定義字段
N- 從第N個字節到行尾
N-M 從第N個到第M個
-M 從第一個到第M個
cut -c1-3,6-9 file --output-delimiter "," 指定輸出定界符
sed入門
sed 's/pattern/replace_string/' file 替換給定文本中的字符串
sed -i 's/pattern/replace_string/' file 將替換結果應用於原文件
sed '/s/pattern/replace_string/g' file 替換所有符合內容
sed 's/pattern/replace/Ng' file 從第N+1處替換
sed '/^$/d' file 移除空白行
sed 's/\w\+/[&]/g' &對應於之前所匹配到的單詞
sed 'expr1' | 'expr2' 組合多個表達式
awk入門
awk 'BEGIN{print "start"} pattern {commands} END {print "end"}' file
工作方式:
1,執行BEGIN {commands}語句塊中的語句
2,從文件中或stdin中讀取一行,然後執行pattern {commands}。重複這個過程,直到文件全部被讀取完畢
3,當讀至輸入流末尾時,執行END {commands} 語句塊
三個語句塊都是可選的
echo -e "line1\nline2" | awk 'BEGIN{print "start"} {print} END{print "END"}' 結果如下:
start
line1
line2
end
特殊變量
NR:表示記錄數量
NF:表示字段數量
$0:這個變量包含執行過程中當前行的文本內容
$1:這個變量包含第一個字段的文本內容
$2:這個變量包含第二個字段的文本內容
迭代文件中的每一行
while read line;
do
echo $line;
done < file.txt
或者
cat file.txt | (while read line;do echo $line;done)
迭代一行中的每一個單詞
for word in $line;
do
echo $word;
done
迭代文件中的每一行的每一個單詞
while read line;
do
for word in $line;
do
echo $word;
done
done < file.txt
迭代一個單詞中的每一個字符
for ((i=0;i<${#word};i++))
do
echo ${word:i:1};
done
按列合併文件
paste file1 file2
paste file1 file2 -d "," 指定定界符,默認爲製表符
按行合併文件
cat file1 file2
打印文件或行中的第n個單詞或列
awk '{print $1}' file
ls -l | awk '{print $1 ":" $4}'
打印不同行或樣式之間的文本
awk 'NR==M,NR==N' filename 打印m行到n行文本
awk '/start_pattern/, /end_pattern/' filename 打印pattern之間的文本
郵件的正則表達式
[a-zA-Z0-9.]+@[a-zA-Z0-9.]+\.[a-zA-Z]{2,4}
文本切片與參數操作
var="this is a line"
echo ${var/line/replace} -->this is a replace
${variable_name:start_position:length} -->指定字符串的起始位置和長度來生成子串
string=abcdefghijklmnopqrstuvwxyz
echo ${string:4} -->efghijklmnopqrstuvwxyz
echo ${string:4:8} -->efghijkl
echo ${string:(-1)} -->x
echo ${string:(-2):2} -->yx
網站下載
wget url 下載網頁或遠程文件
wget url1 url2
wget ftp://baidu.com/somfile.jpg
wget ftp://baidu.com/somfile.jpg -o log -O 1.jpg -o表示日誌,-O表示指定輸出文件名
wget -t 5 rul -t指定重試次數
wget --limit-rate 20k url 限速下載
wget -Q 100m url 指定下載最大限額
wget -c url 斷點續傳
curl url 下載網頁
wget --mirror url 複製或鏡像整個網站
wget --user username --password pass url 訪問需要認證的HTTP或FTP頁面
以格式化純文本形式下載網頁
lynx -dump url > webpage_as_text.txt 將網頁以ASCII字符的形式下載到文本文件中
用curl設置cookie
curl url --cookie "user=slynx;pass=hack"
將cookie另存爲一個文件
curl url --cookie-jar cookie-file
用curl設置用戶代理字符串
curl url --user-agent "Mozilla/5.0" 設置用戶代理爲IE
限定curl可佔用的帶寬
curl url --limit-rate 20k
指定最大下載量
crul url --max-filesize 30k
用curl進行認證
curl -u user:pass url
tar -cvf output.tar source1 source2 創建包
tar -rvf output.tar new_file 追加文件
tar -tvf output.tar 列出包裏的內容
tar -xvf output.tar 提取包裏的內容
tar -Af file1.tar file2.tar 拼接兩個包文件
tar -f output.tar --delete file1 file2 從包文件中刪除文件
tar -zcvf output.tar.gz source gzip格式壓縮
tar -jcvf output.tar.bz2 source bz2格式壓縮
tar -cvf --lzma output.tar.lzma lzma格式壓縮
tar -cf output.tar * --execlude "*.txt" 從歸檔中排除部分文件
用cpio歸檔
echo file1 file2 | cpio -ov > archive.cpio
gzip filename 壓縮文件,只能壓縮一個文件
gunzip filename.gz 解壓縮文件
zcat filename.gz 讀取壓縮文件內容
gzip -9 filename 壓縮率
1級的壓縮率最低,但是壓縮速度最快
9級的壓縮率最高,但是壓縮率最慢
bzip2 filename 壓縮文件
bunzip2 filename.bz2 解壓縮文件
bunzip2 filename.bz2 -k 解壓縮文件,保留原文件
bzip2 filename -k 壓縮文件,保留原文件
lzma filename 壓縮文件
unlzma filename.lzma 解壓縮文件
lzma filename -k 壓縮保留原文件
lzma -9 filename 壓縮率
超高壓縮率的squashfs文件系統
mksquashfs sources compressedfs.squashfs 創建squashfs文件
mkdir /mnt/squash
mount -o loop compressedfs.squashfs /mnt/squash
加密工具與散列
crypt input_file output_file 接受文件以及口令
crypt passphrase inputfile encrypted_file
crypt passphrase -d encrypted_file > outputfile 解密文件
gpg -c filename 加密文件
gpg filename.gpg 解密文件
列出網絡上的所有活動主機
方法一:
for ip in 192.168.0.{1..255};
do
ping $ip -c 2 &> /dev/null;
if [ $? -eq 0 ];
then
echo $ip is alive
fi
done
方法二:
fping -a 192.168.0.1/24 -g 2> /dev/null
或者
fping -a 192.168.0.1 192.168.0.255 -g
傳輸文件
lftp username@ftphost
cd directory 改變目錄
lcd 改變本地主機的目錄
mkdir 創建目錄
get filename 下載文件
put filename 上傳文件
sftp username@domainname
sftp -oPort=422 user@domainname SSH端口不是默認的22時,需要指定端口
scp source destination 安全複製文件
scp filename user@remotehost:/path
其中src和dst都可以採用形如username@localhost:/path的形式
scp -r filename user@remotehost:/path 遞歸複製
iwconfig命令用來爲無線網卡配置合適的無線網絡
iwlist scan命令可以掃描並列出可用的無線網絡
lsof -i 列出系統中的開放端口以及運行在端口上的服務的詳細信息
netstat -lntp 查看開放端口與服務
計算命令執行時間
time command 計算命令的執行時間
real時間表示掛鐘時間,命令開始到結束的時間
user時間是指進程花費在用戶模式中的cpu時間,真正用於執行進程的時間
sys時間是指進程花費在內核模式中的cpu時間
watch監視命令
watch ls 在某段時期內以固定的間隔時間不斷監視某個命令的輸出
watch -n 5 'ls -l' -n指定輸出的時間間隔
watch -d 'ls -l' -d指定命令輸出差異
對文件及目錄訪問進行記錄
inotifywait -m -r -e create,move,delete /dev/ -q
wall命令用來向所有當前登陸用戶的終端寫入消息
echo "test123" | wall
wall < message
查看主機名
hostname 或者uname -n
打印linux內核版本、硬件架構等詳細信息
uname -a
打印內核發行版本
uname -r
打印主機類型
uname -m
打印CPU相關信息
cat /proc/cpuinfo
打印內存的詳細信息
cat /proc/meminfo
打印系統的分區信息
cat /proc/partions
cron表的格式,從左到右依次是
分鐘(0-59)、小時(0-23)、天(1-31)、月份(1-12)、工作日(0-6)、命令
創建cron表:
crontab -e -u user
查看cron表:
crontab -l
移除cron表:
crontab -u user -r
$0 查看當前shell
$? 命令的返回狀態,正常退出爲0;非正常退出爲非0
$1 執行腳本時的參數
$PS1 當前bash提示字符串
$$ 當前進程ID
$UID 爲0表示爲root
shell基礎腳本
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.