1. 程式人生 > >Shell-2-命令之樂

Shell-2-命令之樂

xargs img 錄制 mysql -type linux 批量 pre 所有權

1.cat

(1)基本用法

[[email protected] tmp]# cat 1.txt  2.txt 
this is a test1
this is a test 2

(2)cat -s file(刪除額外空白行)

[[email protected] tmp]# cat 3.txt 
a





b



c

d
[[email protected] tmp]# cat -s 3.txt 
a

b

c

d

(3)cat -n lines.txt (顯示行號)

[[email protected]
tmp]# cat -s -n 3.txt 1 a 2 3 b 4 5 c 6 7 d

2.錄制並回放終端回話(script/scriptreplay)

1)[[email protected] tmp]# script -t 2>timing.log -a output.session(錄制)
Script started, file is output.session
(2)[[email protected] tmp]# scriptreplay timing.log output.session (回放)

3.文件查找與文件列表(find)

(1)find base_path(順著目錄,向下查找)

[[email protected] tmp]# find /tmp/
/tmp/
/tmp/.ICE-unix
/tmp/output.session
/tmp/Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)>
/tmp/1.txt
/tmp/2.txt
/tmp/3.txt
/tmp/test.txt

(2)find . -iname "*.txt" -print(忽略要查找內容大小寫)

[[email protected] tmp]# find
. \( -name "*.txt" -o -name "*.log" \) ./1.txt ./2.txt ./3.txt ./test.txt

(3)find / -path "*/cairui/*"

[[email protected] tmp]# find / -path "*/cairui/*"
/home/cairui/tools
/home/cairui/tools/nginx-1.12.0.tar.gz
/home/cairui/tools/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
/home/cairui/tools/nginx-1.12.0
/home/cairui/tools/nginx-1.12.0/Makefile
/home/cairui/tools/nginx-1.12.0/man
/home/cairui/tools/nginx-1.12.0/man/nginx.8

(4)否定參數(!)

[[email protected] tmp]# ls
1.txt  Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)>  test3.txt
2.txt  output.session                                      timing.log
[[email protected] tmp]# find . ! -name "*.txt"(打印出不是以.txt結尾的文件)
.
./.ICE-unix
./timing.log
./output.session
./Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)>

(5)基於目錄深度的搜索(maxdepth)

find . -maxdepth 1 -name “f*” -print

[[email protected] tmp]# find / -maxdepth 3 -path "*/cairui/*"
/home/cairui/tools
/home/cairui/.bash_profile
/home/cairui/.bash_logout
/home/cairui/.bashrc

(6)根據文件類型搜索

[[email protected] tmp]# find . -type d -print(只列出所有的目錄)
.
./.ICE-unix

[[email protected] tmp]# find . -type f (只列出文件)
./timing.log
./output.session
./test3.txt
./1.txt
./2.txt

文件類型

參數類型

普通文件

f

符號鏈接

l

目錄

d

字符設備

c

塊設備

b

套接字

s

FIFO

p

(7)根據文件時間進行搜索

訪問時間(-atime):用戶最近一次訪問文件的時間。

修改時間(-mtime):文件內容最後一次被修改的時間。

變化時間(-ctime):文件元數據(例如權限和所有權)最後一次改變的時間。

[[email protected] tmp]# find . -type f -atime -7 (打印出最近7天內訪問過的所有文件)
./timing.log
./output.session
./test3.txt
./1.txt
./2.txt

[[email protected] tmp]# find . -type f -atime 7 (正好在7天前那天訪問的文件)
[[email protected] tmp]# find . -type f -atime +7 (訪問時間超過7天的所有文件)

上面是按照天計算的,同樣有按分鐘計算的

-amin(訪問時間)

-mmin(修改時間)

-cmin(變化時間)

(8)基於文件大小的搜索

find . -type f -size +2k(大於2K的文件)

find . -type f -size -2k(小於2k的文件)

find . -type f -size 2k(等於2k的文件)

除了k,還有其他的

b---塊(512字節)

c---字節

w---字(2字節)

k---1024字節

M---1024k字節

G---1024M字節

(9)刪除匹配的文件(-delete)

find . type f -name “*.txt” -delete

(10)利用find執行命令或動作(-exec)

find .type f -user root -exec chown slynux {} \;

find . type f -name “*.c” -exec cat {} \;>all_c_files.txt

4.玩轉xargs

擅長將標準輸入數據轉換成命令行參數。

(1)將多行輸入轉換成單行輸出

[[email protected] tmp]# cat ex.txt 
123456
789
00
[[email protected] tmp]# cat ex.txt |xargs
123456 789 00

(2)將單行輸入轉換為多行輸出

[[email protected] tmp]# cat ex.txt |xargs -n 2
123456 789
00

(3)

[[email protected] tmp]# cat ex.txt 
splitXsplitXsplitX


[[email protected] tmp]# cat ex.txt |xargs -d X(用自己的分隔符來分割參數)
split split split 

5.用tr進行轉換

tr [option] test1 test2
(1)[[email protected] tmp]# echo "HELLO WORLD" |tr A-Z ‘a-z’

(2)[[email protected] tmp]# echo 12345|tr 0-9 9876543210(加密)
87654
[[email protected] tmp]# echo 87654|tr 9876543210 0-9(解密)
123453)刪除字符(tr -d)
[[email protected] tmp]# echo "hello 122 world 55"|tr -d 0-9
hello  world 

(4)用tr壓縮字符(tr -s)
[[email protected] ~]# echo "cairui    is    so  handsome " | tr -s  
cairui is so handsome


[[email protected] tmp]# cat test.txt 
1
2
3
4
5
[[email protected] tmp]# cat test.txt | echo $[ $(tr \n + ) 0 ]
15

6.檢驗與核實

(1)

[[email protected] tmp]# md5sum test.txt 
a7b1ac3a2b072f71a8e0d463bf4eb822  test.txt

如上所示,md5sum是一個32個字符的十六進制串

將輸出的檢驗和重定向到一個文件,然後用md5文件核實數據的完整性

(2)

[[email protected] tmp]# md5sum -c test_sum.md5 
test.txt: 確定(檢驗是否匹配)                              

7.加密工具與散列

(1)

crypt
crypt <input_file >output_file
ENTER passphrase

2)gpg
[[email protected] tmp]# gpg -c test.txt(加密,保證在傳輸過程中無法讀取)

[[email protected] tmp]# gpg test.txt(解密)

8.排序、唯一與重復

1)
[[email protected] tmp]# sort 1.txt 2.txt > sorted.txt
[[email protected] tmp]# cat sorted.txt 
123
33444
566
dfzcx
dq
kdfi
[[email protected] tmp]# cat 1.txt 
123
33444
566
[[email protected] tmp]# cat 2.txt 
kdfi
dfzcx
dq

(2)按照數字順序進行排序

[[email protected] tmp]# sort -n 1.txt 
111
123
566
777
33444

(3)按照逆序進行排序

[[email protected] tmp]# sort -r 1.txt 
777
566
33444
123
111

(4)按照月份進行排序(依照一月、二月、三月、、、、)

sort -M months.txt

(5)按照兩個已排序過的文件

sort -m sorted1 sorted2

(6)找出已排序文件中不重復的行

sort file.txt file2.txt |uniq

(7)檢查文件是否已經排序過

#!/bin/bash
#function:paixu
sort -C filename;
if [ $? eq 0 ]; then 
echo sorted;
else
echo unsorted;
fi

9.分割文件和數據

split -b 10k data.file
ls
data.file xaa xab xac.......

10.根據擴展名切分文件名

#!/bin/bash
#function:根據擴展名切分文件名
file_jpg="sample.jpg"
name=${file_jpg%.*}  (name=${file_jpg#*.})
echo file name is:$name
[[email protected] shell]# sh sample.sh 
file name is:sample

11.批量重命名和移動

#!/bin/bash
#用途:重命名.jpg和.png文件

count=1;
for img infind . -iname ‘*.png’ -o -iname ‘*.jpg’ -type f -maxdepth 1do
  new=image-$count.${img##*.}
  echo “renaming $img to $new”
  mv “$img” “$new”
  let count++
done

12.交互輸入自動化

#!/bin/bash
read -p "enter number:" no;
read -p "enter name:" name
echo you have entered $no,$name
[[email protected] shell]# echo -e "1\nhello\n" | ./interactive.sh
you have entered 1,hello

Shell-2-命令之樂