linux 截取列_Linux 常用命令汇总

5b53c305f534c9ad365817eee209ed11.png

Linux命令太多,主要写写自己平时使用频率较高的常用命令,内容是自己的笔记内容,所以整个逻辑看起来会比较乱。每条认真看,看完会有收获哦。

文中会出现大部分的伪代码,只是帮助自己记忆的。

1.LINUX 常用命令:

常用快捷键:
contrl + c  : 终止前台运行程序
contrl + z  :  将前台任务挂起到后台(用多了容易占用过多系统资源)
contrl + l  : 清屏
contrl + a  : 光标移动到命令行最前端  ,类似于home
contrl + e  : 光标移动到命令行最后 ,类似于end
contrl + u  :  删除光标前所有字符
contrl + k  : 删除光标后所有字符
contrl + y  : 粘贴ctrl + u 或ctrl + k 的内容。

2.创建软链接:

ln -s [源文件或目录] [目标文件或目录]    # 源文件的路径以绝对路径,后续移动链接文件时,任然可以使用源文件。
修改软链接:
ln -snf [新的源文件或目录] [目标文件或目录]
常用的参数:
-b 删除,覆盖以前建立的链接
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程

3.改变文件或目录权限

chmod:
u : 所有者
g : 所属组
o : 其他人
a : 所有人
+ : 增加权限
- : 删除权限
= : 赋予新的权限

r : 读的权限
w : 写的权限
x : 执行权限

修改文件权限:
r 表示4 (二进制:100)
w 表示2 (二进制:010)
x 表示1 (二进制:001)
- 表示0 (二进制:000)

******************************************************************************************

4.正则表达式与通配符

正则表达式:用来匹配符合条件的字符串,正则是包含匹配。 grep sed awk 等可以支持正则表达式

通配符: 用来匹配符合条件的文件名,通配符是完全匹配,ls find cp 等不支持正则,只能使用shell自己的通配符来进行匹配。

基础正则表达式

*   前面有一个字符匹配0次或任意多次
.   匹配除了换行符外任意一个字符
^   匹配行首。   如: ^hello  匹配以hello开头的行。
$   匹配行尾。   如: hello$  匹配以hello结尾的行。
[]  匹配中括号中指定的任意一个字符,只匹配一个字符。 如: [abcd] 匹配abcd中任意一个字母,[0-9] 匹配任意一个数字。[a-z][0-9] 匹配一个字母和一个数字构成的两字符。
[^] 匹配中括号的字符以外的任意一个字符。 如:[^0-9] 匹配任意一个非数字字符。
   转义字符,将特殊字符的含义取消。
{n} 表示其前面的字符恰好出现n次。 如:[0-9]{4} 匹配4为数字。  也可以写成[0-9]{4}  表示将{进行转义
{n,} 表示其前面的字符出现不小于n次  如:[0-9]{2,} 表示2为及两位以上的数字; 也可以写成[0-9]{2,}
{n,m} 表示其前面的字符至少出现n次,最多出现m次。  如:[a-z]{2,6} 表示匹配6-8位的小写字母; 也可以写成[a-z]{2,6}

5.常用通配符

*         匹配0或多个任意字符(可以匹配任何内容)
?        匹配任意单个字符
[list]    匹配[list] 中任意单个字符,或一组单个字符 , 如[a-z]  表示匹配所有的小写字母
[!list]   匹配除[list] 中任意单个字符,如[!a-z]  表示匹配所有的小写字母以外的字符
{string1,string2,...}  匹配string1,string2或更多字符串

6.bash 中的引号

" "   双引号,引号内的内容会被当做整体来看待,允许通过$符号引用其他变量值。
' '   单引号,引号的内容会被当做整体看待,禁止引用其它变量值,也就是单引号括起来的只会被当做字符串来输出,不能作为命令。单引号中的所有特殊符号均没有特殊含义
` `   反撇号,与$() 一样,引号或括号内的命令会优先执行。如果存在嵌套,`` 不能用。
$()   与反撇号一样,用来引用系统命令。
#     在shell脚本中,# 表示注释。
$     用于调用变量的值,如需要调用变量的name时,需要通过 $name方式得到变量值。
     转义符,跟在后的特殊字符都失去特殊含义。

变量可以放在双引号" " 中,不能放在单引号' '中。

引用变量可以使用:  $name   或 "$name" 
将命令进行引用使用  ` ls -l`  或 $(ls -l)

set 查看变量

unset 变量名

位置参数变量
$n  n为数字, $0 表示命令本身,$1-9 代表第1个到第9个参数,10以上的参数需要大括号包含,如${10}
$*  代表命令中的所有参数,$* 把所有参数看成一个整体
$@  代表命令行中所有参数,不过$@把每个参数区分对待
$#  代表命令行中所有参数的个数。

7.shell 基础输入输出重定向

标准输入: 0 键盘

标准输出: 1 显示器

标准错误输出: 2 显示器

输出重定向:改变输出方向,将命令执行结果由输出到屏幕改变成输出到文件。

标准正确输出重定向:

命令 > 文件    以覆盖的方式,将命令的正确输出,输出到指定的设备或文件中
命令 >> 文件   以追加的方式,把命令的正确输出,输出到指定的文件或设备中
ls -l > log.txt  :将命令的输出结果保存到log.txt

标准错误输出重定向: [该方式基本很少用到,因为前提是必须指定自己输入的命令一定是错的,但明知道是错的,还输入,也没啥意义

错误命令 2> 文件    以覆盖的方式,把命令的错误输出,输出到指定的文件或设备中。  2和重定向直接不能有空格
错误命令 2>> 文件   以追加的方式,把命令的错误输出,输出到指定的文件或设备中。  

标准正确输出和错误输出同时重定向:

命令 > 文件 2>&1         以覆盖的方式,把正确输出和错误输出都保存到同一文件当中。     等同于 命令 &> 文件
命令 >> 文件 2>&1        以追加的方式,把正确的输出和错误的输出都保存到同一文件中。  等同于 命令 &>> 文件
命令 >> 文件1 2>> 文件2  把正确的输出追加到文件1中,把错误的输出追加到文件2中。
[注: 2和重定向符号之间不能有空格]

输入重定向:

将文件作为命令输入: 命令 < 文件 (实际场景中使用不多)

****************************************************************

8.多命令顺序执行:

;     命令1 ; 命令2   多命令顺序执行,命令之间没有任何逻辑关系,就算第一条命令报错,第二条也会执行。
&&    命令1 && 命令2  逻辑与,当命令1正确执行,命令2才会执行,当命令1执行错误,命令2不会执行。(必选)
||    命令1 || 命令2  逻辑或,当命令1执行错误,命令2才会执行,当命令1正确执行,命令2不会执行。(2选1)

比如统计某个程序执行耗费时间: date ; 命令1 ; date # 先记录时间,然后执行命令1,然后再执行时间。

9.shell 中条件判断

对数值型的条件判断:
整数1 -eq 整数2    : 判断整数1是否等于整数2   [ 2 -eq 4 ] && echo yes || echo no
整数1 -ne 整数2    : 判断整数1是否与整数2不相等
整数1 -gt 整数2    : 判断整数1是否大于整数2 (大于为真)
整数1 -lt 整数2    : 判断整数1是否小于整数2 (小于为真)
整数1 -ge 整数2    : 判断整数1是否大于等于整数2 (大于等于为真)
整数1 -le 整数2    : 判断整数1是否小于等于整数2 (小于等于为真)

对字符串的条件判断:

-z 字符串          :判断字符串是否为空(为空返回真)
-n 字符串          : 判断字符串是否为非空(非空返回真)
字符串1 == 字符串2 : 判断字符串1是否等于字符串2 (相等返回真)
字符串1 != 字符串2 : 判断字符串1 是否和字符串2不相等 (不相等返回真)

在linux中如果直接写3>4 直接报错, 可以通过test进行测试,格式如下。

[ 2 -eq 4 ] &&echo yes || echo no    判断2是否等于4,返回结果为no      注意"[]" 中括号两边必须留有空格,否则报错。
[ aa == ab ] && echo yes || echo no  判断aa是否和ab相等,返回结果no
注 : 在shell 中,使用"==" 双等号来比较两个字符串是否相同(内容是否同) , 使用-eq 来比较两个整数是否相等。

对文件类型进行判断:

-b 文件   :判断该文件是否存在,并且是否为设备文件(是块设备文件为真) 使用较少。
-d 文件   :判断文件是否存在,并且是否为目录文件(是目录文件为真),使用较多。
-e 文件   :判断文件是否存在(存在为真), 使用较多。
-f 文件   :判断文件是否存在,并且是否为普通文件(是普通文件为真),使用较多。
-s 文件   :判断文件是否存在,并且是否为非空(非空为真)
-L 文件   :判断文件是否存在,并且是否为符号链接文件(是符号链接文件为真),使用较多。

对文件权限进行判断:

-r 文件   :判断文件是否存在,并且该文件是否拥有读的权限(有读权限为真)
-w 文件   :判断文件是否存在,并且该文件是否拥有写的权限(有写权限为真)
-x 文件   :判断文件是否存在,并且该文件是否拥有执行的权限(有执行权限为真)

多重条件判断:

判断1 -a 判断2  :逻辑与,判断1和判断2都成立,最终结果才为真。
判断1 -o 判断2  :逻辑或,判断1和判断2有一个成立,最终结果为真。
!判断           :逻辑非,使原始的判断取反。

10.grep : 行过滤工具,用于根据关键字进行行过滤。

grep [选项] 关键字 文件名
-i : 不区分大小写
-v : 查找内容不包括指定内容的行,反向选择
-w : 按单词进行搜索, 否则会按照给出的字母进行选择
-o : 打印出匹配到的关键词,只是关键词,不含其他内容
-c : 统计匹配到的行数,直接输出为数字
-n : 显示匹配的行编号
-r : 逐层遍历目录查找
-l : 只列出匹配的文件名
-e : 使用正则匹配
-A : -A 5 表示匹配到的关键字及其后5行
-B : -B 5 表示匹配到的关键字及其前5行
-C : -C 5 表示匹配到的关键字及其前5行和后5行
^key :  以key关键字开头
key$ :  以key关键字结尾
^$   :  匹配空行

11.cut : 列截取工具,用于列截取

cut [选项] 文件名
-b : 以字节为单位进行分割。
-c : 以字符为单位进行分割,截取。 选项后紧接数字范围,表示截取每行的第几个字符。 cut -c2-5 file 表示按列截取每行的第2-5个字符。
-d :  自定义分割符,默认为制表符 t    选项后需紧接分隔符,例:cut -d:-f1 file   表示以:进行分割,截取第1列的值.
-f :  与-d 一起使用,指定截取哪个区域。 选项后紧接数字,表示取截取后的哪一列值。 例:cut -d" " -f1 file 表示以" "进行分割,截取第1列的值.

12.sed : 流编辑工具

sed [选项] 参数 文件名
-i : 直接修改原文件  sed -i "1d" file  表示删除文件的第1行。1[第一行] d[删除的意思]
sed -i "nd" file     删除文件第n行
sed -i "$d" file     删除文件的最后一行
sed -i "1,5d" file   删除文件的第1到第5行
sed -i "10,$d" file  删除文件的第10行到最后一行

-a : 追加内容,不会修改原文件
sed '2a hello world' log.txt   #在log.txt文件的第2行添加一行为 hello world

-d : 删除行
sed '3d' file  删除file文件的第三行
sed '/Mills/d' file  删除file文件中包含"Mills" 的行。   在linux中/ / 表示匹配,包含等意思。

-s : 替换字符。
sed -i "s/原字符串/替换字符串/g" file  替换文件中的内容。 其中,g表示全局替换
sed -i "1,5s/原字符串/替换字符串/" file  将文件的1到5行中原字符串进行替换,其余不变。

-n :查看文件指定行内容
sed -n '2,5p' log.txt  查看文件的第2行到第5行
sed -n '2p;3,8p' log.txt  查看文件的第2行,第3到第8行。   注意是分号隔开。

13.sort 排序工具

将文件的每一行作为一个单位,从首字符向后,依次按照ASCII码值进行比较,最后按照升序输出。

sort [选项] 参数 文件名
-f  : 忽略大小写
-u  : 去除重复行输出
-r  : 降序排列,默认是升序
-o  : 将排序结果输出到指定文件中,类似于重定向功能
-n  : 以数字型排序,默认是按字符进行排序
-t  : 指定分隔符  一般-t 与-k一起使用, sort -t: -k2 file  表示以:进行分割,对分割后的第2列进行排序。(也就是按照第2列的首字符进行排序)
-k  : 按照指定的字段范围进行排序,-k [n,m] 从第n个字段开始,m个字段结束(默认到行尾)
-R  : 随机排序

14.tee : 标准输入读取并写入标准输出文件中,及双向覆盖重定向(屏幕输出 | 文本输入)

echo hello world | tee file   屏幕打印hello world 并将hello world 写入到文件file中。

15.diff : 比较两个文件的不同,告诉怎么对第一个文件进行修改可以与第二个文件进行匹配。

diff [选项] 文件1 文件2     :结果中的 +  表示第一个文件需要加上该行才能与第二个文件匹配,- 表示需要删除改行才能与第二个文件匹配  ! 表示需要进行修改才能匹配
-b : 不检查空格
-B : 不检查空白行
-i : 不检查大小写
-w : 忽略所有的空格
-c : 上下文格式显示
-u : 合并格式显示

16.paste :文件行合并工具

paste [选项] 文件1 文件2 
paste file1 file2 将file1 和file2 文件按照行进行合并,分割符是tab
paste -d: file1 file2  将file1 和file2 文件按照行进行合并,分割符是:
paste -s file1 file2  将file1文件和file2文件分别按行保存。

17.tr : 用于字符串转换,替换和删除。一对一替换,将匹配中的字符替换为另一个字符。

-d : 删除string1中所输入的字符
-s : 删除所有重复出现的字符,只保留第一个。  例: echo "aaabbbssssffffsdsd" | tr -s [abdf]   结果为:absfsdsd  也就是如果是连续重复的值会保留一个,其余删除不显示。sdsd虽然重复,但是不是连续重复,因此都会保留。

用法1:将命令结果交给tr处理,string1用于查询,string2用于转换处理
command | tr "string1" "string2"

用法2:tr处理的文件来自于文件,需要使用 < 标准输入。
tr "string1" "string2" < filename 

tr "a-z" "A-Z"  < file   将所有file文件中的小写字母转换成小写字母
tr ":/" "#" < file  将所有的:/ 替换成 # 
tr -d "a-z" < file  删除文件中的所有小写字母,不会修改源文件内容。

18.uniq : 去除连续的重复行 【连续】

-i : 忽略大小写
-c :  统计重复行次数
-d : 只显示重复行

19.find 查找命令

根据文件名字查找:
find [查找范围] -name [搜索文件名]
find ./linux_test -name "log.*"

根据文件大小查找:
find ./linux_test -size +20480 -a -size +40960  #查找的文件大于20480K且小于40960k  -a 表示逻辑与  -o 表示逻辑或。

**************************************************************************************

LINUX 三剑客之一(重点掌握)

**************************************************************************************

20.AWK : 文本处理工具

awk [options] 'Pattern{Action}' file

awk 最常用的action 是print:
awk {print} file   : 打印file文件的全部内容
awk {print $5} file : 打印file文件的第5列       注明: awk 默认分割符是空格,如果没有指定分隔符,awk会以空格进行分割,然后输出指定的列。

awk 是逐行处理文本的,也就是处理文本时,会一行一行进行处理,处理完当前行,再处理下一行,因此是默认以换行"n" 作为标记,识别每一行。
$0 表示显示整行 , $NF 表示当前行分割后的最后一列($0 和$NF 均为内置变量) 假如一行文本被空格分成了7段,那么NF的值就是7,$NF的值就是$7,  而$7表示当前行的第7个字段,也就是最后一列,那么每行的倒数第二列可以写为$(NF-1)

awk '{print $1,$2}' file  : 打印file文件的第1,2列

awk '{print $1,"aaa"}' file : 打印file文件的第1列,并在第1列后均添加一个全是aaa的列。  注意: $1  必须在双引号外,否则会将$1当做字符串"$1" 输出了。
awk '{print "DD:" $1,"BB:" $2}' file  : 打印file文件的第1列和第2列,并在打印的第一列前面全部添加"DD:",在第2列前面全部添加"BB:"。   可以实现指定字符与每一列进行拼接,较灵活。

awk另一个参数Pattern ,其中两个特殊模式: BEGIN 和END
BEGIN : 指定了处理文本之前需要进行的操作
END   :指定了处理文本之后需要进行的操作

格式为 : awk 'BEGIN{print " "}{print " "}END{print " "}'

awk 'BEGIN{print "this is begin"}{print $1}' file    : 先打印"this is begin" ,然后打印file文件的第1列。
awk '{print $1}END{print "this is end"}'             : 先打印file文件的第1列,然后打印"this is end"。      注明: BEGIN 和END 打印的内容都会显示在一起。也就是相当于自定义添加表头和表尾内容


awk option参数:
awk 分隔符有两种 : 输入分隔符和输出分隔符
输入分隔符 : filed separator 简称 FS  ,默认分隔符是空白分隔符,也就是空格
输出分隔符 : output filed separator 简称 OFS , 默认输出分隔符也是空格。   也就是使用awk打印出的值,默认是按照空格分隔符进行分隔的。

awk -F "#" '{print $1}' file      : 将file 文件按照指定分隔符"#" 进行分隔,然后打印第1列的值
awk -v FS= "#" '{print $1}' file  : 与上面的效果一样。 只是FS 是awk内置变量 需和-v一起使用,-v 表示指定对应的变量。

awk -v FS= "#" -v OFS="--" '{print $1,$2}' file  : 将file文件按照#进行分隔,然后打印第1和2列,然后输出第1列与第2列时,中间以"--"进行连接。

如果要实现打印出的列直接不含空格,可以在需要打印的列之间不使用","  :
awk -v FS= "#" '{print $1 $2}' file :  将$1与$2写在一起,可以实现打印出的第1列与第二列显示在一起。区别在于是否在需要打印的列之间添加","


awk 变量:
变量分为自定义变量(用户自己定义的) 和内置变量,内置变量如下:
FS:输入字段分隔符, 默认为空白字符
OFS:输出字段分隔符, 默认为空白字符
RS:输入记录分隔符(输入换行符), 指定输入时的换行符
ORS:输出记录分隔符(输出换行符),输出时用指定符号代替换行符
NF:number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量
NR:行号,当前处理的文本行的行号。
FNR:各文件分别计数的行号
FILENAME:当前文件名
ARGC:命令行参数的个数
ARGV:数组,保存的是命令行所给定的各参数

21.for 循环:

for 循环的两种模式:

模式1 :

for i in 值1 值2 值3 ... [变量的值是以空格进行分隔的]

do

执行程序

done

(for 循环次数取决于变量i的个数,第一次循环将值1赋值给变量i,第二次循环将值2赋值给变量i,依次类推。)

示例:for time in morning noon afternoon evening
			do 
				echo "this time is $time!"
			done

模式2 :for((初始值;循环控制条件;变量变化))

do

执行程序

done

(初始值: 在循环开始时,需要给某个变量赋初始值,如i=1

循环控制条件: 用于指定变量循环次数,如i<=100,则只要i值小于等于100,循环就会继续;

变量变化:每次循环后,变量如何变化,如i=i+1

示例: for ((i=1;i<=100;i=i+1))
			do 
				sum=$sum+$i
			done			

22.while 循环:

模式:

while [ 条件判断式 ]

do

执行程序

done

while 循环只有条件成立,循环就会一直继续,直到条件不成立,循环才会停止。

23.until 循环:

until [ 条件判断式 ]

do

执行程序

done

until循环与while循环相反,只有条件判断式不成立则进入循环,并执行循环过程。一旦条件成立,循环终止。

24.if 条件判断

单分支条件语句:

if [ 条件判断式 ]     []的前后必须有空格,否则报错!,then在if语句后,需要添加分号;如果另取一行,则不需要分号
	then
		执行程序
fi

双分支if条件语句:

if [ 条件判断式 ]
	then
		条件成立时,执行程序
	else
		条件不成立时,执行程序
fi	

多分支if条件语句:

if [ 条件判断式1 ]
	then
		当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
	then
		当条件判断式2成立时,执行程序2
... (省略更过条件)

else
	当所有条件都不成立时,最后执行次程序
fi

25.特殊流程控制语句

exit 命令: 在shell脚本中,exit是退出当前脚本。也就是说在shell脚本中,只要碰到exit语句,后续循环就不再执行,直接退出脚本。

exit [返回值]

break 命令: 当程序执行到break语句时,会结束整个循环(跳出循环外),继续执行后面的命令。

continue 命令: 结束当前循环,继续执行下一个循环。

*******************未完待续**********************


喜欢就帮忙给个收藏和关注呗,谢谢啦!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值