Linux操作

基础命令

命令

查看目录命令的使用

命令说明
ls查看当前目录信息
tree以树状方式显示目录信息
pwd查看当前目录路径
clear清除终端内容

切换目录命令

命令说明
cd 目录切换到指定目录
cd ~切换到当前用户的主目录
cd …切换到上一级目录
cd .切换到当前目录
cd -切换到上一次目录

创建、删除文件及目录命令

命令说明
touch 文件名创建指定文件
mkdir 目录名创建目录(文件夹)
rm 文件名或者目录名删除指定文件或者目录
rmdir 目录名删除空目录
  • rm命令想要删除目录需要加上-r选项,-r表示递归删除目录及其内容

复制、移动文件及目录命令

命令说明
cp拷贝文件、拷贝目录
mv移动文件、移动目录、重命名
  • 拷贝目录需要加上-r选项,-r表示递归拷贝目录及其内容

终端命令格式的组成

command [-options] [parameter]
command:命令名, 比如: ls、pwd
[-options]:选项,可以有零个、一个或者多个选项,多个选项可以合并,比如使用的-r 就是选项。
[parameter]:参数,可以有零个、一个或者多个参数, 比如文件名和目录名都是参数。
[]:代表可选

命令选项

查看命令帮助

–help 使用说明: 命令–help
man 使用说明: man 命令

man命令的说明:

命令说明
空格显示下一屏信息
回车显示下一行信息
b显示上一屏信息
f显示下一屏信息
q退出

ls命令选项

命令选项说明
-l以列表方式显示
-h以大小单位显示,默认是字节
-a显示隐藏文件和隐藏目录

mkdir命令选项

命令选项说明
-p创建所依赖的文件夹

rm命令选项

命令选项说明
-i交互式提示
-r递归删除目录及其内容
-f强制删除,忽略不存在的文件,无需提示
-d删除空目录

cp命令选项

命令选项说明
-i交互式提示
-r递归拷贝目录及其内容
-v显示拷贝后的路径描述
-a保留文件的原有权限
  • -a 选项还支持拷贝文件夹并且文件夹中的文件权限不丢失

mv命令选项

命令选项说明
-i交互式提示
-v显示移动后的路径描述

高级命令

重定向命令

命令说明
>如果文件存在会覆盖原有文件内容,相当于文件操作中的’w’模式
>>如果文件存在会追加写入文件末尾,相当于文件操作中的’a’ 模式

在这里插入图片描述
在这里插入图片描述

查看文件内容命令

命令说明
cat查看小型文件
more分屏查看大型文件

more命令
空格 显示下一屏信息
回车 显示下一行信息
b 显示上一屏信息
f 显示下一屏信息
q 退出

管道(|)命令的使用

管道(|):一个命令的输出可以通过管道做为另一个命令的输入,可以理解成是一个容器,存放在终端显示的内容。
在这里插入图片描述

连接命令

命令说明
ln -s创建软链接
ln创建硬链接

软链接:类似于Windows下的快捷方式
硬链接:类似于源文件的一个别名

注意点:
创建硬链接使用相对路径和绝对路径都可以
删除源文件,硬链接还可以访问到数据。
创建硬链接,硬链接数会加1,删除源文件或者硬链接,硬链接数会减1。
创建软链接,硬链接数不会加1
不能给目录创建硬链接

文本搜索命令!!

命令说明
grep文本搜索

grep命令选项的使用

命令选项说明
-i忽略大小写
-n显示匹配行号
-v显示不包含匹配文本的所有行

grep命令结合正则表达式的使用

正则表达式说明
^以指定字符串开头
$以指定字符串结尾
.匹配一个非换行符的字符

查找文件命令

find 指定查找目录-name “文件名”

find命令及选项的使用

命令说明
find在指定目录下查找文件(包括目录)

find命令选项:

选项说明
-name根据文件名(包括目录名)字查找

find命令结合通配符的使用

通配符说明
*代表0个或多个任意字符
?代表任意一个字符

压缩和解压缩命令

.gz和.bz2的压缩包需要使用tar命令来压缩和解压缩
.zip的压缩包需要使用zip命令来压缩,使用unzip命令来解压缩

tar命令及选项的使用

命令说明
tar压缩和解压缩命令
选项说明
-c创建打包文件
-v显示打包或者解包的详细信息
-f指定文件名称, 必须放到所有选项后面
-z压缩或解压缩(.gz)
-j压缩或解压缩(.bz2)
-x解包
-C解压缩到指定目录
压缩成.gz
tar -zcvf test.tar.gz *.txt
压缩成.bz2
tar -jcvf test2.bz2 *.txt
解压缩.gz
tar -zxvf test.tar.gz
解压缩.bz2
tar -jxvf test.bz2

zip和unzip命令及选项的使用

命令说明
zip压缩成.zip格式文件
unzip解压缩.zip格式文件

unzip命令选项:

选项说明
-d解压缩到指定目录
  • 压缩文件尽量使用.gz格式,因为占用空间较少
  • 使用zip命令压缩的文件占用空间比较多, 当时比较通用,操作更加简单。

文件权限命令!!!

命令介绍
在这里插入图片描述
chmod 字母法的使用

  • 角色
    在这里插入图片描述
  • 权限设置
    在这里插入图片描述
  • 权限说明
    在这里插入图片描述
    chmod 数字法的使用
    在这里插入图片描述

获取管理员权限的相关命令

命令说明
sudo -s切换到root用户,获取管理员权限
sudo某个命令的执行需要获取管理员权限可以在执行命令前面加上sudo
whoami查看当前用户
exit退出登录用户
who查看所有的登录用户
passwd修改用户密码,不指定用户默认修改当前登录用户密码
which查看命令位置
shutdown –h now立刻关机
reboot重启

用户相关操作

命令说明
useradd创建(添加)用户
-m自动创建用户主目录,主目录的名字就是用户名
-g指定用户所属的用户组,默认不指定会自动创建一个同名的用户组
命令说明
id查看用户信息
su切换用户
userdel删除用户

用户组相关操作

命令说明
groupadd创建(添加)用户组
groupdel删除用户组

远程登录、远程拷贝命令

ssh 远程登录
ssh 用户名@ip地址

补充

netstat -anp|grep service_name 查看某个服务端口
ps -l   列出与本次登录有关的进程信息;
ps -aux   查询内存中进程信息;
ps -aux | grep ***   查询***进程的详细信息;
top   查看内存中进程的动态信息;
kill -9 pid   杀死进程

awk

grep擅长查找功能,sed擅长取行和替换。awk擅长取列。

awk同sed命令类似,只不过sed擅长取行,awk命令擅长取列。 awk是一个报告生成器,拥有强大的文本格式化能力。
grep适合单纯的查找或者匹配查找结果,set适合编辑匹配到的文本,而awk命令更适合格式化文本,对文本进行较为复杂的格式处理。

  • awk基本语法:
    awk [option] ‘pattern{action}’ file1,file2,…filen
    其中action中最常用的print命令
cat awk_test.txt 
cat awk_test.txt | awk '{print $1,$2}'
cat awk_test.txt | awk '{print $1,$2,$3,"dog"}'

在这里插入图片描述
在这里插入图片描述
awk '{print $1,$2}'是指打印出这个文件的第一列和第二列
awk ‘{print $0}’

收尾添加相关字符

awk的使用方法:
awk [option] ‘pattern{action}’ file1,file2,…filen

awk 'begin{print "this is awk result:"} {print $1,$2,$3,"dog"} end{print "awk end"}'
cat awk_test.txt | awk 'BEGIN{print "this is awk result:"} {print $1,$2,$3,"dog"} END{print "awk end"}'

在这里插入图片描述
把pattern的模式设置问BEGIN或者END的时候,它就可以在我们输出文件的时候,添加文件的首尾字符串,需要注意的是,BEGIN和END不能小写

分隔符

awk [option] ‘pattern{action}’ file1,file2,…filen

cat awk_test.txt 
cat awk_test.txt | awk -F# '{print $1,$2}'

在这里插入图片描述
使用awk -F#的时候,awk命令就是用#作为分割符号,来分割这个文件中的内容

内置变量和自定义变量

NR 行号,当前处理文本行的行号
NF 当前行的字段的个数
FNR 个文件分别计数的行号
FILENAME 文件名称
FS 输入字段分隔符
OFS 输出字段分隔符
ARGC以及ARGV 数组以及命令行参数的个数

# FS  和  OFS  输入输出字段分隔符
FS的作用:
[root@dev01 yeyz_shell]# cat awk_test.txt 
this#is#a#test##file 1
this#is#a#test##file 2
this#is#a#test##file 3
this#is#a#test##file 4

[root@dev01 yeyz_shell]# cat awk_test.txt | awk -v FS='#' '{print $2,$3}'
is a
is a
is a
is a

# FS使用-作为分隔符,对于输入的字符串进行处理。
#OFS使用-作为分隔符,输出文件中的内容:
[root@dev01 yeyz_shell]# cat awk_test2.txt 
this is a shell program
this is a shell program
this is a shell program
this is a shell program

[root@dev01 yeyz_shell]# cat awk_test2.txt | awk -v OFS='-' '{print $2,$3,$4}'
is-a-shell
is-a-shell
is-a-shell
is-a-shell

# NR和NF   行数和每一行的列数
[root@dev01 yeyz_shell]# cat awk_test3.txt 
this is a test program
this is a shell test program

[root@dev01 yeyz_shell]# cat awk_test3.txt | awk '{print NR,NF}'
51 5
62 6

#FNR和NR的区别
[root@dev01 yeyz_shell]# cat awk_test3.txt 
this is a test program
this is a shell test program

[root@dev01 yeyz_shell]# cat awk_test4.txt 
this#is#a#test#program
this#is#a#shell#test#program

[root@dev01 yeyz_shell]# awk {'print NR,$0'} awk_test3.txt awk_test4.txt 
this is a test program
this is a shell test program
this#is#a#test#program
this#is#a#shell#test#program

[root@dev01 yeyz_shell]# awk {'print FNR,$0'} awk_test3.txt awk_test4.txt 
this is a test program
this is a shell test program
this#is#a#test#program
this#is#a#shell#test#program
#FNR是把不同文件的行号进行了区分,而NR没有对文件的行号进行区分。

#FILENAME  显示文件名称
[root@dev01 yeyz_shell]# awk {'print FILENAME,FNR,$0'} awk_test3.txt awk_test4.txt 
awk_test3.txt 1 this is a test program
awk_test3.txt 2 this is a shell test program
awk_test4.txt 1 this#is#a#test#program
awk_test4.txt 2 this#is#a#shell#test#program


# ARGC和ARGV
#其中ARGV是一个数组,数组包含下标,使用下标可以访问数组中的文件名称
[root@dev01 yeyz_shell]# awk 'BEGIN{print "aaa",ARGV[1]}' test1 test2
aaa test1

[root@dev01 yeyz_shell]# awk 'BEGIN{print "aaa",ARGV[2]}' test1 test2
aaa test2

[root@dev01 yeyz_shell]# awk 'BEGIN{print "aaa",ARGV[0],ARGV[1],ARGV[2]}' test1 test2
aaa awk test1 test2

[root@dev01 yeyz_shell]# awk 'BEGIN{print "aaa",ARGV[0],ARGV[1],ARGV[2],ARGC}' test1 test2
aaa awk test1 test2 3
#ARGV[0]指的是awk这个命令,这一点是awk命令规定的,其他的参数都是值得是后面处理的文件的名称,ARGC指的是ARGV数组的值的个数,在本例子中,它的值是3。

#自定义变量
[root@dev01 yeyz_shell]# awk -v var='yeyz' 'BEGIN{print var}'
yeyz
[root@dev01 yeyz_shell]# awk  'BEGIN{ var2="yyy" ; print var2}'
yyy
#当变量写在{}外面的时候,需要使用-v参数,当变量写在{}里面的时候,不需要写-v参数,但是需要注意的是,二者都需要写上BEGIN这个模式。

其他

awk [可选的命令行选项] 'BEGIN{命令 } pattern{ 命令 } END{ 命令 }'  文件名

打印某几列
$ echo 'I love you' | awk '{print $3 $2 $1}'
youloveI

条件过滤
awk [可选的命令行选项] 'BEGIN{命令 } pattern{ 命令 } END{ 命令 }'  文件名
$ cat score.txt
tom 60 60 60
kitty 90 95 87
jack 72 84 99
$ awk '$2>=90{print $0}' score.txt
kitty 90 95 87

判断语句
$ awk '{if($2>=90 )print $0}' score.txt
kitty 90 95 87
$ awk '{if($2>=90 )print $1,"优秀"; else print $1,"良好"}' score.txt
tom 良好
kitty 优秀
jack 良好

BEGIN 定义表头
awk [可选的命令行选项] 'BEGIN{命令 } pattern{ 命令 } END{ 命令 }'  文件名
使用方法如下:
$ awk 'BEGIN{print "姓名 语文 数学 英语"}{printf "%-8s%-5d%-5d%-5d\n",$1,$2,$3,$4}' score.txt
姓名 语文数学英语
tom 60 60 60
kitty 90 95 87
jack 72 84 99

$ awk 'BEGIN{OFMT="%.2f";print 1.2567,12E-2}'
1.26 0.12

END 添加结尾符
和BEGIN用法类似
$ echo ok | awk '{print $1}END{print "end"}'
ok
end

数据计算
$ awk 'BEGIN{print "姓名 语文 数学 英语 总成绩"; \
sum1=0;sum2=0;sum3=0;sumall=0} \
{printf "%5s%5d%5d%5d%5d\n",$1,$2,$3,$4,$2+$3+$4;\
sum1+=$2;sum2+=$3;sum3+=$4;sumall+=$2+$3+$4}\
END{printf "%5s%5d%5d%5d%5d\n","总成绩",sum1,sum2,sum3,sumall}'\
 score.txt
姓名 语文 数学 英语 总成绩
  tom 60 60 60 180
kitty 90 95 87 272
 jack 72 84 99 255
总成绩 222 239 246 707

有用的内置变量
NF:表示当前行有多少个字段,因此$NF就代表最后一个字段
NR:表示当前处理的是第几行
FILENAME:当前文件名
OFMT:数字输出的格式,默认为%.6g。表示只打印小数点后6 位
$ awk -F ':' '{print NR ") " $1}' demo.txt
1) root
2) daemon
3) bin
4) sys
5) sync

内置函数
$ echo 1 2 | awk '{print $1+sqrt($2)}'
2.41421
$ echo 1 | awk 'BEGIN{srand()}{print rand()}'
0.929885

grep

grep擅长查找功能
在这里插入图片描述

递归查找所有匹配的文件内容
$ grep -rl love *
dir/file3.txt
file.txt
file2.txt

忽略大小写递归查找并带行号输出
$ grep -inr "It doesn’T" *
dir/file3.txt:38:It doesn’t matter where 
file.txt:38:It doesn’t matter where 
file2.txt:38:It doesn’t matter where

忽略大小写显示行号,显示匹配内容和前后2行
一般用于定位日志问题,-A 2 -B 2 也可以替换成-C 2
$ grep -in "It doesn’T" file.txt -A 2 -B 2
file.txt-36-the way that ypu change my world
file.txt-37-when I’m with you
file.txt:38:It doesn’t matter where we're from and where

查找匹配的进程名,忽略带grep的内容
$ ps -ef | grep -i wei
  501 1807 1 0 25 519 ?? 5:29.55 /usr/bin/Weiyun -psn_0_176171
  501 92256 1851 0 10:32 grep --color=auto 
$ ps -ef | grep -i wei | grep -v grep
  501 1807 1 0 25 519 ?? 5:29.55 /usr/bin/Weiyun -psn_0_176171

或逻辑查找
$ grep -E "love|change" file.txt
I love you
I love you
the way that you change my world
Love may come and love may go

正则表达式测试
echo coding3min@foxmail.com | grep -p "^[A-Za-z0-9\u4e00-\u9fa5]\+\@[a-zA-Z0-9_-]\+\(\.[a-zA-Z0-9_-]\+\)"
coding3min@foxmail.com

sed

sed命令是用来批量修改文本内容的,比如批量替换配置中的某个ip。

sed [参数] [文本或文件]

1.在某行前面插入一行
$ sed -i "1a insert after" file.txt
$ cat file.txt
1
insert after
2
3
其中1a表示在第1行后(after)插入

2.在某行后面插入一行
$ sed -i "1i insert before" file.txt
$ cat file.txt
insert before
1
2
3
其中1i表示在第1行前插入

删除
$ sed -i '2,3d' file.txt
$ cat file.txt
1
删除行可以删除一行 (3d删除第三行),也可以写一个范围(2,3d删除2-3行,闭区间),$符号代表末尾

替换行
$ sed -i '2c replace' file.txt
$ cat file.txt
1
replace
3

2c replace表示替换第2行的内容为replace
缺点是只能多次替换行,不能一次性替换全部匹配到的行,可以用正则替换(/^2/c replace代表替换所有以2开头的行为replace)

仅替换匹配的字符串
为了便于演示修改文件内容为
$ cat -n config.txt
     1    name=coding3min
     2    age=0
     3    email=coding3min@foxmail.com
     4    name=coding3min
     5    age=0
     6    email=coding3min@foxmail.com

使用命令批量替换3-4行之间coding3min字符串为tom
$ sed -i '3,4s/coding3min/tom/g' config.txt
$ config.txt
name=coding3min
age=0
email=tom@foxmail.com
name=tom
age=0
email=coding3min@foxmail.com
s/coding3min/top/g代表全文匹配不限制行,去掉g代表只替换匹配到的第一个如s/coding3min/top

查找与输出
输出3-4行的内容
sed -n 3,4p config.txt
email=coding3min@foxmail.com
name=coding3min

查找所有以name开头的行
sed -n '/^name/p' config.txt
name=coding3min
name=coding3min
可以看到只要用-n参数+匹配p模式就可以sj查找并输出

自动创建备份文件
直接sed -i很容易造成替换错误,所以需要事先用-n+p也就是上一节说的方法先校验下结果。所以可以用 sed -i备份文件后缀的方式例如sed -i.bak或者sed -i.backup
$ sed -i.bak 's/coding3min/kitty/g' config.txt
$ ls
config.txt config.txt.bak
$ cat config.txt
name=kitty
age=0
email=kitty@foxmail.com
$ cat config.txt.bak
name=coding3min
age=0
email=coding3min@foxmail.com


与grep的结合使用
与grep结合使用可以提前校验和批量替换,提高容错率和效率
sed -i 's/coding/kitty/g' `grep -rl coding *`
$cat config.txt
name=conding3min
age=0
email=conding3min@foxmail.com
$cat test/config.txt
name=conding3min
age=0
email=conding3min@foxmail.com
grep -rl递归找到匹配的文件,并把文件名输出,前后加上了 反引号,就是键盘左上角数字1左边那个符号,代码提前执行。然后再使用替换文件内容。

#其他技巧
使用sed把DOS格式的文件转换为Unix格式 sed 's/.$//' filename
匹配所有包含邮箱的行,(-n 选项让sed仅仅是输出经过处理之后的那些行)
sed -n '/[A-Za-z0-9]\+\@[a-zA-Z0-9_-]\+\(\.[a-zA-Z0-9_-]\+\)/p' config.txt
email=coding3min@foxmail.com
email=coding3min@foxmail.com

去掉所有的html标签
$ cat html.txt
<b>hi!</b><span>I'm</span>
$ sed 's/<[^>]*>//g' html.txt
hi!I'm father


grep,sed,awk摘自公众号【编程三分钟】,仅供个人回顾使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值