note

命令管道

命令管道 ==
並不是所有東西都可以用管道( )傳輸,有一些需要使用額外指令才可以執行

echo "tom" | passwd --stdin tom

撰寫系統腳本

checkuser.sh

使用which bash,可以查看bash的位置,裡面放的是系統腳本

#!/usr/bin/bash

id $1 1>/dev/null 2>&1    ## id 第一個參數 前面結果丟到黑洞
result='echo $?'   ## result存取前面的指令是否成功

if [ $result -eq 0 ]     ## result == 0 就顯示用戶存在,不等於就顯示不存在
then
	echo "$1 exists"   
else
	echo "$1 no exists"
fi

usage

chmod +x ./checkuer.sh  ## 賦予可執行權限
./checkuser.sh user ## user exit
./checkuser.sh tom  ## tom doesn't exit

getip.sh

#!/usr/bin/bash

ip=`ifconfig $1 | grep inet | grep -v inet6 | awk '{print $2}'`
eth=`ifconfig $1 | grep inet | grep -v inet6 | awk '{print $2}'`

echo "ip: $ip"
echo "mac: $eth"

usage

chmod +x getip.sh
./getip.sh enp0s8  ## 輸入介面卡名稱

搜尋檔案(find)

which: 只找執行檔,搜尋檔案只會從環境變數($PATH)裡面找。

whereis: 跟which差不多,不過whereis的資訊會給比較多,比較少用

locate: 可以查詢任何檔案,可以使用部分名稱去做查詢,他是去索要資料庫的內容,所以在執行之前,通常會先輸入updatedb

updatedb: 讓系統資料與資料庫同步

find: 到磁碟裡面一個一個找,可以最任意種搜尋,提供最多功能,但也花最多時間

cat 檔案會使檔案的Access 時間改變,可以使用stat filename查看

增量備份

使用參考時間的檔案,讓資料可以分成不同部分做備份

## a底下有3個資料夾file1、file2、file3
tar cvfz backup01.tar.gz a/*  ##把a資料夾裡面的資料壓縮(備份)
touch timebase  ##增加時間戳記
cd a
echo "1" > file1.txt
touch file4.txt
cd ..
tree a
tar -cvfz backup02.tar.gz `find . -cnewer ./timebase -type f`  ## ``裡面的內容會優先執行,值再放入裡面,也可以使用$()表示

## 解壓縮(還原)
tar -xvfz backup01.tar.gz
tar -xvfz backup02.tar.gz

``裡面的內容會優先執行,值再放入裡面,也可以使用$()表示

Linux指令