Linux常用命令實踐

1.

scp 文件遷移

 

Remote Server --> Local file

 

scp -p port user@remoteserverip:/home/user/filename /home/user/filename

各部分含義:

p 爲端口參數;

port爲具體端口號; 

user 爲ssh user;

 remoteserverip爲遠程服務器ip或者映射後的域名;

/home/user/filename 爲遠程服務器的文件名;

/home/user/filename 爲本地服務服務器的文件名。

該命令的作用就是將遠程的filename複製到本地對應的目錄下面。

 

如果報錯:not a regular file,請加上-r參數。

 

options

-r        遞歸複製

-l user   指定用戶名

-pw       顯示的輸入用戶密碼

 

 

 

 

Local file --> Remote Server

用法:

scp local_file remote_username@remote_ip(or domain name):remote_folder

 

使用域名的例子如下:

scp /home/root/davidTmp/output2.csv root@vm008:/root

 

2.

tail 文件查看

從指定點開始將文件寫到標準輸出。

使用tail命令的-f選項可以方便的查閱正在改變的日誌文件,
tail -f filename會把filename裏最尾部的內容顯示在屏幕上,並且不但刷新,使你看到最新的文件內容。

tail -n 20  test.log  //查看倒數20行的信息
tail -n +20 test.log  //查看20行以後的信息
tail -f     test.log  //刷新文件尾部內容

 

 

3.

ps aux | grep some_process_name

查看目前運行的所有進程。

1)ps a 顯示現行終端機下的所有程序,包括其他用戶的程序。
2)ps -A 顯示所有程序。 
3)ps c 列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數或常駐服務的標示。 
4)ps -e 此參數的效果和指定"A"參數相同。 
5)ps e 列出程序時,顯示每個程序所使用的環境變量。 
6)ps f 用ASCII字符顯示樹狀結構,表達程序間的相互關係。 
7)ps -H 顯示樹狀結構,表示程序間的相互關係。 
8)ps -N 顯示所有的程序,除了執行ps指令終端機下的程序之外。 
9)ps s 採用程序信號的格式顯示程序狀況。 
10)ps S 列出程序時,包括已中斷的子程序資料。 
11)ps -t  指定終端機編號,並列出屬於該終端機的程序的狀況。 
12)ps u  以用戶爲主的格式來顯示程序狀況。 
13)ps x  顯示所有程序,不以終端機來區分。

 

找到進程:

ps aux | grep java

殺死進程:

kill -9 pid

 

 

4.

lsof

[轉] http://blog.csdn.net/wyzxg/article/details/4971843 --linux刪除文件後沒有釋放空間

lsof全名list opened files,也就是列舉系統中已經被打開的文件。我們都知道,linux環境中,任何事物都是文件,
設備是文件,目錄是文件,甚至sockets也是文件。所以,用好lsof命令,對日常的linux管理非常有幫助。

 

5.

chown、chgrp

修改文件或目錄所屬用戶、所屬組

使用chown命令可以修改文件或目錄所屬的用戶:

       命令:chown 用戶 目錄或文件名

       例如:chown david /home/liuwei  (把home目錄下的liuwei目錄的擁有者改爲david用戶) 

使用chgrp命令可以修改文件或目錄所屬的組:

       命令:chgrp 組 目錄或文件名

       例如:chgrp superuser /home/liuwei  (把home目錄下的liuwei目錄的所屬組改爲superuser組)

 

6.

xargs與管道符綜合實例

A) 刪除除指定文件之外的所有其他文件(含文件/目錄)

ls|grep -v cep_compute.tar.gz|xargs rm -rf

B) 殺掉Hello java進程

jps -l|grep HelloExecutor|awk '{print $1}'|xargs kill -9

C) 殺掉運行中的sh腳步

#匹配任意空格: \ *

#匹配任意字符: .*

kill -9 $(ps -ef|grep "sh\ *.*start_new.sh\ *main"|grep -v grep|awk '{print $2}')

 

7.

-e -f -d ne lt

文件比較運算符
-e filename 	如果 filename存在,則爲真 	[ -e /var/log/syslog ]
-d filename 	如果 filename爲目錄,則爲真 	[ -d /tmp/mydir ]
-f filename 	如果 filename爲常規文件,則爲真 	[ -f /usr/bin/grep ]
-L filename 	如果 filename爲符號鏈接,則爲真 	[ -L /usr/bin/grep ]
-r filename 	如果 filename可讀,則爲真 	[ -r /var/log/syslog ]
-w filename 	如果 filename可寫,則爲真 	[ -w /var/mytmp.txt ]
-x filename 	如果 filename可執行,則爲真 	[ -L /usr/bin/grep ]
filename1-nt filename2 	如果 filename1比 filename2新,則爲真 	[ /tmp/install/etc/services -nt /etc/services ]
filename1-ot filename2 	如果 filename1比 filename2舊,則爲真 	[ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比較運算符 (請注意引號的使用,這是防止空格擾亂代碼的好方法)
-z string 	如果 string長度爲零,則爲真 	[ -z "$myvar" ]
-n string 	如果 string長度非零,則爲真 	[ -n "$myvar" ]
string1= string2 	如果 string1與 string2相同,則爲真 	[ "$myvar" = "one two three" ]
string1!= string2 	如果 string1與 string2不同,則爲真 	[ "$myvar" != "one two three" ]
算術比較運算符
num1-eq num2 	等於	[ 3 -eq $mynum ]
num1-ne num2 	不等於	[ 3 -ne $mynum ]
num1-lt num2 	小於	[ 3 -lt $mynum ]
num1-le num2 	小於或等於	[ 3 -le $mynum ]
num1-gt num2 	大於	[ 3 -gt $mynum ]
num1-ge num2 	大於或等於	[ 3 -ge $mynum ]

 

8.

獲取隨機數

function rand(){

  min=$1

  ((max=$2-$1))

  num=$(date +%s%N)

  retnum=$(($num%$max + $min))

  echo $retnum

}

 

9.

隨機獲取文本中一行

process_to_be_kill=`shuf -n1 pid`

kill -9 $process_to_be_kill

 

10.

刪除文本中指定的一行

sed -i "/${process_to_be_kill}/d" pid

 

11.

變量賦值

let mod_number=random_number%2

retnum=$(($num%$max + $min))

 

12. 

綜合案例

如果進程數大於某個預設值,則隨機將一個進程殺死,如果小於該值,則啓動java進程

function start_process(){

  process_cnt=`cat pid | wc -l`

 

  echo 'process_cnt='$process_cnt

  if [ $process_cnt -ge $concurrent_cnt ];then

    process_to_be_kill=`shuf -n1 pid`

    echo 'process_to_be_kill='$process_to_be_kill

    kill -9 $process_to_be_kill

 

    sed -i "/${process_to_be_kill}/d" pid

  else

    random_number=$(rand 1 100)

    echo 'random_number=============='$random_number

    let mod_number=random_number%2

    echo 'mod_number='$mod_number

    if [ $mod_number -eq 1 ];then

      echo 'Random number is odd, will start new handler.'

 

      nohup java -Xms70g -Xmx120g -XX:-UseGCOverheadLimit  -Dproject.configuration=$dir/app.properties -Dlog4j.configuration=file:$dir/log4j.properties  -cp /opt/spark-2.4.0-cdh6.1.0/conf/:/opt/spark-2.4.0-cdh6.1.0/jars/*:/opt/spark-2.4.0-cdh6.1.0/jars/../hive/*:$dir/cep-order-1.0-SNAPSHOT-jar-with-dependencies.jar org.apache.spark.executor.HelloExecutor  $dir/meta/data > /dev/null  2>&1  &

      echo $! >> pid

    else

      echo 'Random number is even, will kill one handler randomly'

      process_to_be_kill=`shuf -n1 pid`

 

      kill -9 $process_to_be_kill

 

      sed -i "/${process_to_be_kill}/d" pid

    fi

  fi

}

 

13. 

循環執行某項操作

function main_process(){

  while true

  do

    start_process

    random_number=$(rand $run_min $run_max)

    echo 'Current time is '$(date '+%Y-%m-%d %H:%M:%S')', System will sleep for '${random_number}' seconds'

    sleep $random_number

  done

}

 

 

14. 

在多個文件中查找符合某個特徵的文件

ls lib/* | while read line; do jar -tf $line|grep ${SPECIFIC_FEATURE}; echo $line; done

#查找並判斷文件類型是否爲文件,是則清空:

ls|while read l;do if [ -f $l ];then cat /dev/null > $l;fi done

 

15. 

獲取文件當前路徑

curr_dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)

 

16.

從文件中循環讀取一行文本

while read line; do  done; < file 

案例:

讀取文件中server中ip地址,批量將jar包上傳上去:

while read IP; do scp -P 22 /home/david/deploy/file_transfer_station/* david@$IP:~ ; done < dw_servers

 

17.

清空文件

方法1:cat /dev/null > ${FILE_NAME}

方法2:> ${FILE_NAME}

 

18.

sed替換指定string內容

場景1:替換不帶路徑的字符串

sed -i "s/address:.*/address: $ip/g"  ${SPRINGBOOT_APP_PATH}/config/application-peer1.yml (將address: 後的ip替換爲新的ip)

 

場景2:替換帶路徑的字符串

sed  -i  "s:/aaa/bbb:${NEW_PATH}:"  test.yml

注意:

a)、":"爲新的分隔符,爲非默認的"/";

b)、當替換的字符串爲使用"$"符號的變量時,-i後的參數需整體用 雙引號(" ~ ") 包起來,如果使用單引號(' ~ '),則變量不會被替換。

場景3:爲第n行插入指定String

語法:

sed -i "第幾行i\需要添加的內容" $RawFileName

樣例,在文件f的第一行插入指定的文件內容:

sed -i "1i\\$(cat user_header.txt)" $f

檢查是否插入:

sed -n '1,1p' yourfile

 

19.

vim s替換指令

:s/helllo/sky/   替換當前行第一個hello爲sky

:s/helllo/sky/g  替換當前行的所有hello爲sky

:n,$s/hello/sky 替換第n行開始到最後一行的第一個hello爲sky

:n,$s/hello/sky/g 替換第n行開始到最後一行的所有hello爲sky

:%s/hello/sky    替換每一行的第一個hello爲sky

:%s/hello/sky/g    替換每一行的所有hello爲sky

 

20.

vim 中【將第3~最後一行】的空格(包括空格,\t,^M)替換爲空

:3,$s/[[:space:]]*//g

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章