Linux常用指令與shell函數總結
2019年08月07日 22:30:21 前方一片光明 閱讀數 74更多
所屬專欄: Linux技術
知識共享許可協定 版權聲明:署名,允許他人基于本文進行創作,且必須基于與原先許可協定相同的許可協定分發本文 (Creative Commons)
一、主機相關指令
檢視主機名:hostname 或者 export
修改主機名:vi /etc/sysconfig/network
檢視ip位址:ifconfig
修改ip位址:vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改ip與主機名的映射關系:vi /etc/hosts
關閉iptables并設定其開機啟動/不啟動:service iptables stop
重新開機:reboot
關機:halt
二、防火牆
檢視防火牆狀态:service iptables status
檢視防火牆狀态:/etc/init.d/iptables status
檢視防火牆是否開機啟動:chkconfig iptables –list
設定防火牆開機啟動:chkconfig iptables on
設定防火牆開機不啟動:chkconfig iptables off
關閉防火牆指令:/etc/init.d/iptables stop
永久關閉防火牆指令:chkconfig iptables off
開啟防火牆指令:/etc/init.d/iptables start
永久開啟防火牆指令:chkconfig iptables on
重新開機服務:service iptables restart
三、修改開機等待時間
vi /boot/grub/menu.lst
四、啟動Linux預設進入指令行模式
修改/etc/inittab,
将id:5:initdefault:修改為id:3:initdefault:
設定背景服務的自啟配置
chkconfig 檢視所有伺服器自啟配置
開源的,安全的系統,通常使用指令行界面,
指令名稱 --help:列出該指令的使用方式
man 指令名稱:列出該指令的使用方式
cd 目錄:切換到某個目錄下
cd …:切換到父目錄
pwd:檢視目前目錄(print working directory)
五、檔案查詢指令
find / -name my*:在根目錄(/)下查找以my開頭的檔案
whereis :查詢某個指令所在目錄
grep:查詢某個字元串所在行(列出本行所有内容)
六、檔案操作指令
ls :列出所有目錄和檔案的名字
ls -l:豎着列出所有檔案詳細資訊
ll:ls -l 的縮寫
cp:複制檔案
touch:建立檔案
mkdir:建立檔案夾
rm:删除檔案
rmdir:删除空的檔案夾
rm -r:遞歸删除檔案,詢問
rm -rf:直接删除檔案,不詢問(f:force)
rm指令慎用,可能會毀掉一個公司!解決方案mv 檔案(夾) /tmp
mv:移動檔案
rename:重命名(批量命名:rename .repo.bak .repo *)
七、檔案顯示指令
more:分頁查詢(空格 下翻一頁 b 上翻一頁 q 退出)
less:分頁查詢 (空格 下翻一頁 b 上翻一頁 q 退出 ↑上翻一行 ↓下翻一行 /…搜尋)
cat:列出檔案全部内容
tac:逆序列出檔案内容
head -n 檔案名:列出前n行
tail -n 檔案名:列出後n行(查日志用)
tail -f install.log ---->隻在同一個檔案跟蹤(檔案大于64M會産生新檔案)
tail -F install.log---->按照檔案名跟蹤
wc:列印出多少位元組,多少字元,多少行
八、檔案編輯指令
vi:編輯檔案,如果沒有檔案就建立檔案并編輯
從編輯模式切換到指令模式使用“esc”鍵,
連續兩次大寫Z退出指令模式
從指令模式切換到編輯模式使用“A”、“a”、“O”、“o”、“I”、“i”鍵
a:即append,添加内容,在目前字元後添加文本;
A:在行末添加文本;
i:在目前字元前插入文本;
I:在行首插入文本;
o:在目前行後面插入一空行;
O:在目前行前面插入一空行;
:wq:在指令模式下,執行存盤退出操作;
:w:在指令模式下,執行存盤操作;
:w!:在指令模式下,執行強制存盤操作;
:q:在指令模式下,儲存修改執行退出vi操作;
:q!:在指令模式下,不儲存修改執行強制退出vi操作;
dd:删除一行
ln 3.txt 4:為3.txt建立連結4(硬連結,相當于複制了一份,删除3.txt後,4依然存在)
ln -s 3.txt 5:為3.txt建立連結5(軟連結,相當于快捷方式,删除3.txt後,5不存在)
九、權限:
r是讀,w是寫,x是可執行
chmod +x 檔案名:給檔案添加可執行權限(所有使用者都加)
chmod -x 檔案名:給檔案去掉可執行權限(所有使用者都去掉)
chmod u+x 檔案名:隻給自己權重限
chmod g+x 檔案名:給同組其他人權重限
chmod o+x 檔案名:給其他人權重限
chmod 755 檔案名:755轉為2進制為111101101對應的為 rwxr-xr-x,進而修改所有使用者的權限
十、使用者:
useradd 使用者名:添加使用者(添加之後在home目錄下面多一個使用者目錄)
passwd 使用者名:設定密碼
groupadd:添加一個組
useradd testuser -g group:在某個組下添加使用者
usermod -g group testuser :修改使用者所在的組
userdel:删除使用者(home下的目錄沒有删除)
su:切換使用者
exit:傳回上一目錄
chown 使用者名 檔案名:改變檔案的所有者:
為使用者配置sudo權限:
用root編輯 vi /etc/sudoers
在檔案的如下位置為shuhao添加一行
root ALL=(ALL) ALL
shuhao ALL=(ALL) ALL
然後shuhao使用者就可以用sudo來執行系統級别的指令
十一、SSH
兩個linux系統遠端複制檔案:
scp 檔案名 使用者名@主機ip:目标檔案夾
ssh免密登入指令:
第一步:ssh-keygen (生成密鑰對,提示時回車即可)
第二步:ssh-copy-id 192.168.1. (複制公鑰到目标主機)
linux與其他機器之間共享檔案:
在Linux中建立ftp server,通過windows往上傳
開啟ftp服務:service vsftpd start
停止ftp服務:service vsftpd stop
判斷是否開啟:ftp localhost
退出服務:bye
查詢linux的IP:ifconfig
關閉linux防火牆:service iptables stop
ftp登入:anonymous
設定vsftpd開機自啟動:chkconfig vsftpd on
遠端管理伺服器:通過ssh管理,可以加密
十二、下載下傳指令
wget http://
十三、上傳安裝包到伺服器
上傳:如果不cd到指定目錄,則上傳到目前使用者的主目錄\root\
可以使用圖形化工具,如filezilla
可以使用sftp工具:alt+p調出後,用put指令上傳
下載下傳:lcd到本地的目标路徑
sftp> lcd d:/
sftp> get /home/jdk-7u45-linux-x64.tar.gz
十四、檢視網絡端口
netstat -nltp
十五、yum
yum install 全部安裝
yum install package1 安裝指定的安裝包package1
yum groupinsall group1 安裝程式組group1
yum update 全部更新
yum update package1 更新指定程式包package1
yum list 顯示所有已經安裝和可以安裝的程式包
yum list package1 顯示指定程式包安裝情況package1
yum clean packages 清除緩存目錄下的軟體包
yum clean headers 清除緩存目錄下的 headers
yum clean oldheaders 清除緩存目錄下舊的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 清除緩存目錄下的軟體包及舊的headers
十六、Shell變量定義
定義變量和常量不能有空格,用到空格時用雙引号
系統變量:echo $HOME $PWD $SHELL $USER
檢視環境變量:echo $path
顯示目前shell中所有變量:set
unset:撤銷目前變量
雙引号不會脫意,單引号會脫意
export 可以把變量提升為全局變量,如export JAVA_HOME=/usr/local/jdk1.7
source /etc/profile 重新把變量執行一遍
A=
ls -la
反引号:運作裡面的指令,并把結果傳回給變量A
A=$(ls -la)等價于反引号
$? 表示上一個指令退出的狀态,true是0,false是1
$$表示目前程序編号
$0表示目前腳本名稱
$n表示位置變量(n代表數字,n>=1)
$#表示變量的個數,常用語循環
∗ 和 *和 ∗和@都表示參數清單
差別:當他們被雙引号包含時,”$*”會将所有的參數作為一個整體,以”$1 2... 2... 2...n”的形式輸出所有參數;”[email protected]”會将各個參數分開,以”$1”” 2 ” . . . ” 2”...” 2”...”n”的形式輸出所有參數
運算符:
格式:
expr m + n
或 $((m+n))
注意:expr運算符之間要有空格
如:a=$(((2+3)*4))
for循環:
第一種
for N in 1 2 3
do
echo $N
done
或 for N in 1 2 3;do echo $N;done
或 for N in {1…3};do echo $N;done
第二種:
for ((i = 0;i <= 5;i ++))
do
echo “welcome $i times”
done
或for((i = 0;i <= 5;i ++));do echo “welcome $i times”;done
While循環
第一種
while true
do
echo aaa
sleep 1
done
第二種
int=1
while((int<=3))
do
echo $int
let int++
done
Case語句
case $1 in
start)
echo “starting”
;;
stop)
echo “stoping”
;;
*)
echo “Usage: {start|stop}”
esac
read -p(提示語句)-n(字元個數)-t(等待時間)
read -p "please input your your name: " c
If判斷(注意[]左右兩邊都要有空格)
If condition
Then
Statements
[ elif condition
Then statements. …]
[ else
statements ]
fi
判斷語句(注意condition左右兩邊都要有空格)
[condition]
非空傳回true,可使用$?驗證(0位true,>1為false)
[ ] 空傳回false
[ condition ] && echo OK || echo not OK
= 字元串比較
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
-f 判斷目标是否存在并且為正規檔案
-s 判斷目标是否存在并且不為空
-d 判斷目标是否存在并且為目錄
-L 判斷目标是否存在并且為符号連結
-r 判斷目标是否可讀
-w 判斷目标是否可寫
-x 判斷目标可否執行
Shell自定義函數
文法
[ function ] funname [()]
{
action;
[ return int; ]
}
Function start() / function start / start()
例如:
#!/bin/bash
fSum 3 2;
function fSum()
{
echo $1,$2;
return $(($1+$2))
}
total=$?;
echo “第一次調用後的傳回結果:”$total
fSum 5 7;
total=$?;
echo t o t a l , total, total,?;
return後面跟數值0-255
腳本調試
sh -vx fun.sh
或者在腳本中增加set -x
十七、進階指令行文本處理工具
cut
PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/apps/jdk1.7.0_45/bin:/root/bin
echo $PATH | cut -d ‘:’ -f 5 (将path變量取出,找到用:分割的第5個路徑)
echo $PATH | cut -d ‘:’ -f 3,5 (将path變量取出,找到第3和第5個路徑)
echo $PATH | cut -d ‘:’ -f 3-5 (将path變量取出,找到第3-5個路徑)
echo $PATH | cut -d ‘:’ -f 3- (将path變量取出,找到第3到最後一個路徑)
echo $PATH | cut -d ‘:’ -f 1-3,5 (将path變量取出,找到第1到3和第5路徑)
例子:隻顯示/etc/passwd的使用者和shell
cat /etc/passwd | cut -d ‘:’ -f 1,7
sort
cat /etc/passwd | sort 預設首字母來排序
cat /etc/passwd | sort -t ‘:’ -k 3 預設用:分割的第3列 首字母來排序
cat /etc/passwd | sort -t ‘:’ -k 3n 預設用:分割的第3列 數字來排序
cat /etc/passwd | sort -t ‘:’ -k 7 -u 去重
uniq 可以取出排序過的檔案中的重複行,與sort合用
cat testfile | sort |uniq
cat testfile | sort |uniq -c 統計每行出現的次數
wc
wc -l /etc/passwd 統計行數
wc -w /etc/passwd 統計單詞出現次數
wc -m /etc/passwd 統計檔案的字元數
sed(實體删除、替換)
删除:d
sed ‘2d’ testfile 删除testfile的第二行
sed ‘2,$d’ testfile 删除testfile的第二行到末尾的所有行
sed ‘$d’ testfile 删除testfile的最後一行
sed '/test/'d testfile 删除testfile的所有包含test的行
替換:s
sed ‘s/test/mytest/g’ testfile 在整行範圍内把test替換為mytest,如果沒有g标記,則隻有每行第一個比對的test被替換成mytest;
sed -n ‘s/^test/mytest/p’ testfile ^表示以test開頭,(-n)選項與p标志一起使用,表示隻列印那些發生替換的行,也就是說,如果某一行的開頭的test被替換成mytest,就列印他
sed ‘s/^192.168.0.1/&localhost/’ testfile &表示追加,某一行的開頭的192.168.0.1被替換成192.168.0.1localhost
sed -n ‘s/loveable/\1rs/p’ testfile love被标記為第一組,所有loveable會被替換成lovers,而且被替換的行會被列印
awk
last -n 5 取出最近登入的5個記錄
last -n 5 | awk ‘{print $1}’ 取出最近登入的5個記錄,并列印出第1列。$0表示所有域,$1表示第1列
cat /etc/passwd | awk -F ‘:’ ‘{print $1}’ -F為指定分隔符為:
cat /etc/passwd | awk -F ‘:’ ‘{print $1"\t"$7}’ "\t"表示tab鍵,列印出第1列和第7列
十八、可執行檔案:
a.sh
#!/bin/bash
while true
do
echo “han shu hao”
sleep 1
done
十九、其他
管道:
ls -rl /etc | more:把上一個指令執行的結果交給下一個指令
wall :把字元警告所有人
wall ‘date’:把結果警告給所有人
重定向:
例如ls > a.txt
把結果放到a.txt中,覆寫原來的結果
例如ls >> a.txt
把結果放到a.txt中,不覆寫原來結果
2> 例如lssss 2>a.txt
把錯誤結果放到a.txt中
清屏:clear
ctrl+c 或者ctrl+z來終止ping指令的執行。
挂載:mount
mkdir /mnt/cdrom 建立一個目錄,用來挂載
将裝置/dev/cdrom挂載到挂載點:/mnt/cdrom/中
mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/
umount /mnt/cdrom 解除挂載
統計檔案或檔案夾的大小
du -h /mnt/cdrom/Package
du -sh *
service network status 檢視指定服務的狀态
service network stop 停止指定服務(不要輕易敲)
service network start 啟動指定服務
service network restart 重新開機指定服務
service --status-all 檢視系統中所有的背景服務