900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > linux常用shell命令功能 记录一些常用的linux shell命令

linux常用shell命令功能 记录一些常用的linux shell命令

时间:2024-04-30 03:09:36

相关推荐

linux常用shell命令功能 记录一些常用的linux shell命令

日期

取前一天

date -d ‘1 days ago’ +%Y-%m-%d

命令別名設定功能: (alias)

alias ll=’ls -al’

一些特殊值

$$:(關於本 shell 的 PID)

$!:得到子进程的进程PID,例如nohup的命令可以通过这个获取PID

$?:(關於上個執行指令的回傳值)

$#: 参数个数

$@ :代表『 “$1” “$2” “$3” “$4” 』

$* :代表『 “$1c$2c$3c$4” 』,其中 c 為分隔字元

declare

数值计算要用 declare -i sum=100+12

也可以用sum=$((100+12))计算

[root@www ~]# declare [-aixr] variable

選項與參數:

-a :將後面名為 variable 的變數定義成為陣列 (array) 類型

-i :將後面名為 variable 的變數定義成為整數數字 (integer) 類型

-x :用法與 export 一樣,就是將後面的 variable 變成環境變數;

-r :將變數設定成為 readonly 類型,該變數不可被更改內容,也不能 unset

数组

var1=”small min”

echo $(var1)

截取字符串

# 从第0位开始截取2个字符

echo ${a:0:2}

删除/替换字符

echo ${PATH#/usr_:} #从前到后开始删除掉第一个符合条件的字符

echo ${PATH##/usr_:} #从前到后开始删除掉所有符合条件的字符

也可以从后面开始,就是把#号替换成%号

echo ${PATH/usr/USR} #替换

echo ${PATH//usr/USR} #替换所有

&&和||

可以把多条命令串起来,例如

ls ./test/||mkdir ./test/ #如果目录不存在,创建一个

判断

使用中括号时注意空格必须要有[ -e “xxx” ]

语法

if [ "$name" == "Fatkun" ]; then

echo "Hi!Fatkun"

elif [ ... ]; then

echo "..."

else

echo "..."

fi

測試的標誌

代表意義

1. 關於某個檔名的『檔案類型』判斷,如 test -e filename 表示存在否

-e

該『檔名』是否存在?(常用)

-f

該『檔名』是否存在且為檔案(file)?(常用)

-d

該『檔名』是否存在且為目錄(directory)?(常用)

-b

該『檔名』是否存在且為一個 block device 裝置?

-c

該『檔名』是否存在且為一個 character device 裝置?

-S

該『檔名』是否存在且為一個 Socket 檔案?

-p

該『檔名』是否存在且為一個 FIFO (pipe) 檔案?

-L

該『檔名』是否存在且為一個連結檔?

2. 關於檔案的權限偵測,如 test -r filename 表示可讀否 (但 root 權限常有例外)

-r

偵測該檔名是否存在且具有『可讀』的權限?

-w

偵測該檔名是否存在且具有『可寫』的權限?

-x

偵測該檔名是否存在且具有『可執行』的權限?

-u

偵測該檔名是否存在且具有『SUID』的屬性?

-g

偵測該檔名是否存在且具有『SGID』的屬性?

-k

偵測該檔名是否存在且具有『Sticky bit』的屬性?

-s

偵測該檔名是否存在且為『非空白檔案』?

3. 兩個檔案之間的比較,如: test file1 -nt file2

-nt

(newer than)判斷 file1 是否比 file2 新

-ot

(older than)判斷 file1 是否比 file2 舊

-ef

判斷 file1 與 file2 是否為同一檔案,可用在判斷 hard link 的判定上。 主要意義在判定,兩個檔案是否均指向同一個 inode 哩!

4. 關於兩個整數之間的判定,例如 test n1 -eq n2

-eq

兩數值相等 (equal)

-ne

兩數值不等 (not equal)

-gt

n1 大於 n2 (greater than)

-lt

n1 小於 n2 (less than)

-ge

n1 大於等於 n2 (greater than or equal)

-le

n1 小於等於 n2 (less than or equal)

5. 判定字串的資料

test -z string

判定字串是否為 0 ?若 string 為空字串,則為 true

test -n string

判定字串是否非為 0 ?若 string 為空字串,則為 false。

註: -n 亦可省略

test str1 = str2

判定 str1 是否等於 str2 ,若相等,則回傳 true

test str1 != str2

判定 str1 是否不等於 str2 ,若相等,則回傳 false

6. 多重條件判定,例如: test -r filename -a -x filename

-a

(and)兩狀況同時成立!例如 test -r file -a -x file,則 file 同時具有 r 與 x 權限時,才回傳 true。

-o

(or)兩狀況任何一個成立!例如 test -r file -o -x file,則 file 具有 r 或 x 權限時,就可回傳 true。

!

反相狀態,如 test ! -x file ,當 file 不具有 x 時,回傳 true

## case语法

case $變數名稱 in <==關鍵字為 case ,還有變數前有錢字號

"第一個變數內容") <==每個變數內容建議用雙引號括起來,關鍵字則為小括號 )

程式段

;; <==每個類別結尾使用兩個連續的分號來處理!

"第二個變數內容")

程式段

;;

*) <==最後一個變數內容都會用 * 來代表所有其他值

不包含第一個變數內容與第二個變數內容的其他程式執行段

exit 1

;;

esac <==最終的 case 結尾!『反過來寫』思考一下!

while语法

while [ condition ] <==中括號內的狀態就是判斷式

do <==do 是迴圈的開始!

程式段落

done <==done 是迴圈的結束

for…do…done语法

for var in con1 con2 con3 ...

do

程式段

done

CLUSTERS=(aaa bbb ccc)

for cluster in ${CLUSTERS[@]};

do

echo $cluster

done

for((i=1;i<100;i++));do

echo $i

done

软链接替换

ln -snf ./hive-0.7.1/ hive

利用grep和gawk,xargs来kill

xargs会把gawk的每一行变成kill的参数,如 kill 1 2 3

grep -v 是排除

ps -ef|grep scott|grep -v grep|gawk {‘print $1’}|xargs kill

sed命令替换文本

sed -i "s/oldstring/newstring/g" file #在原文件修改

sed "s/oldstring/newstring/g" file >file.new # 输出到其他文件

file="/tmp/crontab_`date +"%H%M%S"`.bak"; crontab -l > $file; sed "s/\*\/5 \* \* \* \* run-parts/\* \* \* \* \* run-parts/g" $file > "$file.new"; crontab "$file.new"; # 替换crontab文件

sed -r 's/^\s+([0-9]+) /\1|/g'

sed -i '$i\eeeeeeeee'urfile # 在倒数一行插入内容

tar

tar --exclude=log -cvzf xxx_`date +"%Y-%m-%d_%H_%M"`.tar.gz ./xxx

# 使用xz压缩,如果使用lzma压缩也是用XZ_OPT

XZ_OPT=-1 tar -cf 1.tar.xz --xz xx.log

获取机器IP

via:/starspace/archive//02/13/1390062.html

/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"

GREP 获取前几行后几行的内容

grep -n -B1 -A1 "关键字" file #匹配关键字的前一行与后一行.

Rsync 通过ssh传输

# -e 参数指定用ssh传输

rsync --exclude 'logs' --size-only --progress -rave "ssh -p2222" /home/xx/ 用户名@IP地址:/tmp/xx

kill进程树

gawk

gawk -F'|' 'BEGIN {OFS="|"}{print $1,$2,$3}'

gawk '{a=index($0, " from ");if(a>0){b=substr($0,a+6);print substr(b, 0, index(b, " "))}}'

gawk 'BEGIN{sum=0}{sum+=$1}END{print sum}' data.txt

输出一大段文本

cat <> ./test.txt

XXX

EOF

简单的http服务

python -m SimpleHTTPServer 8080

## NC传文件

接收方

/sbin/ifconfig |grep 'inet addr:10'

nc -l 9999 | tar zxvf -

发送方 tar czvf - ./xxx | nc server 9999

如果nc -l执行失败,下载旧版本 /6.6/os/x86_64/Packages/nc-1.84-22.el6.x86_64.rpm

Find

find /tmp/ -mtime +1 -name 'xxx_*.log' -delete

find /tmp/ -mmin +60 -name 'xxx_*.log' -delete

date

dt=$(date +"%Y%m%d_%H%M%S")

用户/组管理命令

# 把xxx加入apache组

usermod -a -G apache xxx

sort

# 按human readable 方式排序(sort -h)

hdfs dfs -du -h /user/|sed -r 's/([0-9.]*)[ ]/\1/'|sort -hr

# -t是分隔符

# 先按第一列排序,再按第二列数字排序

cat 1.txt |sort -t',' -k1,1 -k2,2n

截取kv文件

head 000000_0 |awk -v RS='`' -F'=' '$1=="keyname"'

head 000000_0 |grep -o '`keyname=[^`]*'

只复制目录结构

# 把dir1的目录结构复制到dir2内

find ./dir1 -type d -exec mkdir -p dir2/\{\} \;

shell重试方法

retry() {

local -r -i max_attempts="$1"; shift

local -r cmd="$@"

local -i attempt_num=1

until $cmd

do

if (( attempt_num == max_attempts ))

then

echo "Attempt $attempt_num failed and there are no more attempts left!"

return 1

else

echo "Attempt $attempt_num failed! Trying again in 60 seconds..."

echo $(( attempt_num++ ))

sleep 60

fi

done

}

# 使用方式

retry 6 echo "ok"

参考

大部分内容来自:/linux_basic/0320bash.php

linux命令行查询

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。