Shell-2-命令之乐

Posted 潇潇、寒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell-2-命令之乐相关的知识,希望对你有一定的参考价值。

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-命令之乐的主要内容,如果未能解决你的问题,请参考以下文章

2.命令之乐

命令之乐-cat

Linux命令之乐--iconv

2命令之乐,2.1简介

Python自学之乐-装饰器浅谈

VSCode自定义代码片段——git命令操作一个完整流程