linux 常用的shell命令

先大概列一下常用的命令

cd、ls、ll、grep、less、tail、vi、vim、touch等,我就不一一列舉了

查看硬盤空間情況df -l
[root@localhost dev]# df -l
查看內存:free -m
[root@localhost bin]# free -m
查看cpu型號:cat /proc/cpuinfo
[root@localhost bin]# cat /proc/cpuinfo 
查看內核版本:uname -a
[root@localhost bin]# uname -a
查看系統版本:lsb_release -a
[root@localhost /]# lsb_release -a

查看端口占用情況:
lsof -i :port

查看是否有某些文件:
find ~/develop -name filename 查找develop 目錄下的文件名爲某某的

rpm -qa|grep -i  mysql  檢查是否安裝過mysql
rpm -ivh:安裝顯示安裝進度--install--verbose--hash

#註釋
#單行用#多行用:<<!....!
#在bash中,$( )與` `(反引號)都是用來作命令替換的
#$( )的弊端是,並不是所有的類unix系統都支持這種方式,但反引號是肯定支持的
#一般情況下,$var與${var}是沒有區別的,但是用${ }會比較精確的界定變量名稱的範圍

#linux中shell變量$#,$@,$0,$1,$2的含義解釋: 


#變量說明: 
$$ 
#Shell本身的PID(ProcessID) 
$! 
#Shell最後運行的後臺Process的PID 
$? 
#最後運行的命令的結束代碼(返回值) 
$- 
#使用Set命令設定的Flag一覽 
$* 
#所有參數列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。 
$@ 
#所有參數列表。如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。 
$# 
#添加到Shell的參數個數 
$0 
#Shell本身的文件名 
$1~$n 
#添加到Shell的各參數值。$1是第1參數、$2是第2參數…。

 

我大概列舉一下簡單的一些

#解壓
tar -zxvf fileName
unzip FileName.zip
#查系統版本:
cat /etc/redhat-release 
sudo vim #操作命令 回車輸入密碼就root用戶權限
df -h #磁盤命令
du -sh #查文件大小
#查看某一端口的佔用情況: lsof -i:端口號
#linux端口狀態查看相關命令
netstat -an|grep 8080
#獲取某個文件的內容,通過名字過濾、再通過:剪切,再去重
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

#後臺啓動某個進程
nohup sh xx.sh >./nxx.log 2>&1 &
#再如:
nohup java -jar ./springbootjardemo.jar > springbootjardemo.log 2>&1 &

shell運算

#!/bin/bash
#第一方式$()
RESULT1=$(((2+3)*4));

echo "result1=$RESULT1"
#第二種方式[]
RESULT2=$[(2+3)*4]
echo "result2=$RESULT2"

#使用expr 運算號與數據之間必須要有空格符號
#expr  + , - , \*,  /,  %    加,減,乘,除,取餘
#注意:expr運算符間要有空格
TEMP=`expr 2 + 3`;
RESULT3=`expr $TEMP \* 4`
echo "result3=$RESULT3"

#$((運算式))”或“$[運算式]
#求出兩個參數的和
SUM=$[$1+$2]
echo "SUM=$SUM"

if語句

#!/bin/bash
#案例1:"ok"是否等於"ok"
#if和[ ]之間要空格
#[ ]和“ ”之間要空格
# ”和=之間要空格 
#否則都會報錯
if [ “ok” = “ok” ]; then
        echo "equal"
else
        echo "not equal"
fi

#案例2:20是否大於等於20
#大於 -gt (greater than) 
#小於 -lt (less than) 
#大於或等於 -ge (greater than or equal) 
#小於或等於 -le (less than or equal) 
#不相等 -ne (not equal)
if [ 25 -ge 25 ]; then
        echo "equal"
else
        echo "not equal"
fi

#案例3:/opt/tmp/aaa.txt 目錄中的文件是否存在
if [ -e /opt/tmp/aaa.txt ]; then
        echo "exist"
fi

$的用法

#!/bin/bash

#$$ Shell本身的PID(ProcessID)
#$! Shell最後運行的後臺Process的PID
#$? 最後運行的命令的結束代碼(返回值)
#$- 使用Set命令設定的Flag一覽  
#$* 所有參數列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。
#$@ 所有參數列表。如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。
#$# 添加到Shell的參數個數
#$0 Shell本身的文件名
#$1~$n 添加到Shell的各參數值。$1是第1參數、$2是第2參數…。

#獲取到各個參數
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "參數個數=$#"


echo "當前的進程號=$$"
#後臺的方式運行 myShell.sh
sh myshell.sh &
echo "最後的進程的號=$!"
echo "執行的值=$?"

function

#!/bin/bash

function sum(){
        S=0
        S=$[$n1+$n2]
        echo "s=$S"
}

read -p "請輸入第一個數n1=" n1
read -p "請輸入第一個數n2=" n2

sum $n1 $n2

for的用法

#!/bin/bash
#案例1 :打印命令行輸入的參數
#使用 $*
for i in "$*"
do
        echo "the num is $i"
done
echo "==============================="
#使用 $@
for j in "$@"
do
        echo "the num is $j"
done

#案例2 :從1加到100的值輸出顯示
#定義一個變量
SUM=0
for((i=1;i<=100;i++))
do
        SUM=$[$SUM+$i]
done
echo "sum=$SUM"

while的用法

#!/bin/shell
#案例1 :從命令行輸入一個數n,統計從 1+..+ n 的值是多少
SUM=0
i=0
while [ $i -le $1 ]
do
        SUM=$[$SUM+$i]
        i=$[$i+1]
done

echo "sum=$SUM"

case的用法

#!/bin/bash
#案例1 :當命令行參數是 1 時,輸出 "週一", 是2 時,就輸出"週二", 其它情況輸出  "other"
case $1 in
"1")
        echo "週一"
        ;;
"2")
        echo "週二"
        ;;
"3")
        echo "週三"
        ;;
*)
        echo "other"
        ;;
esac

同步腳本的Demo

#!/bin/shell
#1 獲取輸入參數個數, 如果沒有參數,直接退出
paramCount=$#
if [ $paramCount -eq 0 ]; then
        echo "no args"
        exit
fi
#2 獲取文件名稱
p1=$1
#filename=$(basename $p1)和fname=`basename $p1`是一樣的
filename=$(basename $p1)

echo filename=$filename
#3 獲取上級目錄到絕對路徑
#$(cd -P $(dirname $p1); pwd) 和`cd -P $(dirname $p1); pwd` 即$() 和``反向引號是一樣的
pdir=$(cd -P $(dirname $p1); pwd)
echo pdir=$pdir
#4 獲取當前用戶名稱
#user=`whoami`
user=$(whoami)
#echo user=$user
for((hosts=2; hosts<5; hosts++)); do
        #rsync -rvl $pdir/$fname $user@weisg00$host:$pdir

        echo $pdir/$fname $user@weisg00$hosts:$pdir
done

進程監控的Demo

top   //每隔5秒顯式所有進程的資源佔用情況
top -d 2  //每隔2秒顯式所有進程的資源佔用情況
top -c  //每隔5秒顯式進程的資源佔用情況,並顯示進程的命令行參數(默認只有進程名)
top -p 12345 -p 6789//每隔5秒顯示pid是12345和pid是6789的兩個進程的資源佔用情況
top -d 2 -c -p 123456 //每隔2秒顯示pid是12345的進程的資源使用情況,並顯式該進程啓動的命令行參數

pmap  pmap - report memory map of a process(查看進程的內存映像信息)
選項含義
       -x   extended       Show the extended format. 顯示擴展格式
       -d   device         Show the device format.   顯示設備格式
       -q   quiet          Do not display some header/footer lines. 不顯示頭尾行
       -V   show version   Displays version of program. 顯示版本

#!/bin/shell
#進程號
input_process_id=$1
while true
do
        pmap -d ${input_process_id}|tail -1
        sleep 3
done

 

我用springboot開發,所以看下一下springboot.jar的啓動及停止,只要你看懂了啓動,停止就懂了

不多說,直接上代碼:

#!/bin/sh
RESOURCE_NAME=springbootjardemo.jar
 
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
	echo 'Stop Process...'
	kill -15 $tpid
fi
sleep 5
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
	echo 'Kill Process!'
	kill -9 $tpid
else
	echo 'Stop Success!'
fi
 
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
	echo 'App is running.'
else
	echo 'App is NOT running.'
fi
 
#rm -f tpid
nohup java -jar ./$RESOURCE_NAME --spring.profiles.active=test >> demo.out &
#echo $! > tpid
if [ $! -gt ${tpid} ]; then
	echo Start Success!
fi

 

如果是寫接口的,有linux上可以瞭解一下壓力測試工具siege的用法

 

在Linux上搞集羣,自然少不了時間同步設置問題

llinux下時間同步的方法
ntpdate time.nist.gov
其中 time.nist.gov 是一個時間服務器.
刪除本地時間並設置時區爲上海
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

 

 

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