Linux——(2)文件系统、系统操作、文本操作命令、文件压缩与打包

网友投稿 601 2022-05-28

其他文章:

2 文件系统命令

2.1 虚拟目录树!!!

2.2 df

2.3 mount

2.4umount

其他文章:

2 文件系统命令

2.1 虚拟目录树!!!

2.2 df

2.3 mount

2.4umount

3 系统操作命令

3.1 du!!!

3.2 stat!

3.3 touch!!

4 文本操作命令

4.1cat!!!

4.2head!!

4.3 tail!!!

4.4 管道| !!!

4.5 xargs!!

4.6数据重定向!!!

4.7cut

4.8 sort

4.9 sed !!

4.10 awk

4.11 wc

4.12 vi/vim 编辑器的使用!!!

5 文件压缩与打包

其他文章:

linux——(1)基本命令

Linux——(2)文件系统、系统操作、文本操作命令、文件压缩与打包

2 文件系统命令

Linux——(2)文件系统、系统操作、文本操作命令、文件压缩与打包

2.1 虚拟目录树!!!

虚拟目录树的各个目录用途

2.2 df

查看系统挂载的磁盘情况

df

以人能看懂的格式显示

df -h

列出根目录下的内容

ls /

进到 boot 目录

cd /boot

在 linux 中用到了虚拟目录树,它的存在就是为了解耦应用和底层存储。

2.3 mount

将光驱挂载到/mnt 目录:

mount /dev/cdrom /mnt

进入到/mnt 目录

cd /mnt

查看磁盘分区的挂载情况:

df -h

2.4umount

卸载掉挂载的分区/mnt

umount /mnt

注意卸载/mnt 时,当前目录不能在/mnt 下面,否则报出如下图所示提示:

再次查看磁盘分区的挂载情况:

df -h

重新挂载

mount /dev/cdrom /mnt

如果没有挂载,则访问父目录的文件夹

再次查看

df -h

3 系统操作命令

3.1 du!!!

du 可以为目录递归地汇总每个 FILE 的磁盘使用情况。

• du:文件系统的磁盘使用量或是目录使用量

a :列出所有的文件与目录容量

h :以人们较易读的容量格式(G/M)显示 重要

s :列出总量而已,而不列出每个各别的目录占用容量

k :以 KBytes 列出容量显示

m :以 MBytes 列出容量显示

添加-s 参数可以生成指定目录的汇总信息,也就是共占用多大的磁盘空间

du -s ./

添加-h 参数可以显示为人类可以读懂的格式

du -sh ./

将路径写成./*统计当前目录下每项内容占用的磁盘空间信息

du -sh ./*

3.2 stat!

显示文件的元数据

stat /etc/profile

change 和 modify 的不同

modify 指的是文件内容被修改的时间

change 表示文件元数据被修改的时间

3.3 touch!!

touch 已存在的文件,抹平各个时间

touch 不存在的文件,则创建文件

4 文本操作命令

4.1cat!!!

直接查看一个文件的内容可以使用 cat,tac,nl 这几个指令

cat(concatenate):

cat 是 concatenate 的缩写,其功能时间一个文件的内容连续的输出。该命令适合看行 数较少的文件。另外,需要查看一般 DOS 文件时,可以通过-A 选项来显示换行符和[tab]。

tac(反向输出):

与上面的 cat 命令进行比较,是由最后一行先显示。

tac 功能与 cat 类似,但是是由文件最后一行反向连续输出到屏幕上。

nl(添加行号打印):

nl 可以将输出的文件内容自动的加上行号。

4.2head!!

head(取出前面几行,Centos6.5 使用/etc/man.config 文件):

4.3 tail!!!

命令格式:tail [ -n number] 文件

选项与参数:

n:后面接数字,代表显示几行的意思

f:表示持续侦测后面文件内容的改变,知道按下 Ctrl+c 才会结束 tail 的侦测。

默认情况下显示最后 10 行:

[root@node1 ~]# tail profile

如果先要显示最后 20 行,就要如下:

[root@node1 ~]# tail -n 20 profile [root@node1 ~]# tail -f profile

4.4 管道| !!!

[root@bk1 ~]# ps -aux |grep ssh [root@bk1 ~]# yum list |grep mysql

如何显示文件中间的几行?

[root@node1 ~]# head -n 20 profile |tail -n 10

可以省略为:

[root@node1 ~]# head -20 profile |tail -10

管道左侧的输出作为右侧的输入

echo “/” | ls -l 显示内容错误(不是预期的结果),因为 ls 不需要输入,只需要参数

4.5 xargs!!

将前面输出作为后面命令的参数

echo "/" | xargs ls -l

• xargs:命令

1,在标准输入中读取到的内容!

2,自己的参数理解为一个字符串

• 模仿 shell,做 blank 切分,第一个子字符串为命令

3,将步骤 1 的内容做为步骤 2 的命令的选项参数拼接起来

4,执行得到的结果

4.6数据重定向!!!

标准输入(stdin):编号为 0

标准输出(stdout):编号为 1

标准错误输出(stderr):编号为 2

1>:以覆盖的方法,将正确的数据输出到文件;

1>>:以累加的方法,将正确的数据输出到文件;

2>:以覆盖的方法,将错误输出的数据输出到文件;

2>>:以累加的方法,将错误输出的数据输出到文件;

ls -l >> ok1.log ls -l > ok2.log ls hello 2>/root/err.log ls hello / 1>/root/log.log2>/root/err.log ls 1>/dev/null ls 2>/tmp/err.log 既向控制台输出,也向文件写入 ls -l / | tee ok2.log tee 命令,将输入分成两个输出

4.7cut

cut:显示切割的行数据

s:不显示没有分隔符的行

d:指定分隔符对源文件的行进行分割

-f 选定显示哪些列

• m-n m 列到 n 列

• -n 第一列到 n 列

• m- 第 m 列到最后一列

• n 第 n 列

• x,y,z 获取第 x,y,z 列

以:作为分隔符,切割 passwd,输出从第 3 个字段到第 5 个字段

输出前两列内容:

输出字段 3 到最后一个字段

指定输出的分隔符:

输出第 7 个字段:

如果有的行没有分隔符,则输出会包含脏数据

可以使用-s 选项:

不打印没有分隔符的行:

显示 1,3,7 列

– output-delimiter 指定输出的时候的各字符分隔符

4.8 sort

排序:字典序和数值序

sort:排序文件的行

n:按数值排序

r:倒序 reverse

t:自定义分隔符

k:选择排序列

f:忽略大小写

sort.txt

a b 1 dfdsa fdsa 15 fds fds 6 fdsa fdsa 8 fda s 9 aa dd 10 h h 11

默认字典序排序

指定字段分隔符,按照第 2 个字段的字典序排序

指定字段分隔符,按照第 3 个字段的值数值序排序

4.9 sed !!

sed:行编辑器

sed [选项] ‘AddressCommand’ file…

-i:直接修改源文件

-r:表示使用扩展正则表达式

d:删除符合条件的行

a\string:在指定的行后追加新行,内容为 string

\n:用于换行

i\string:在指定行前添加新行,内容是 string

s/string1/string2/:查找并替换,默认只替换每行第一次模式匹配到的字符串

g:行内全局替换 i:忽略大小写 s///,s###,s@@@:用于避免字符冲突 \(\) \1\2

sed:行编辑器 Address

可以不指定

给定范围

查找指定行/str/

sed.txt

第一行下插入一行

sed "1a\hello world" sed.txt

直接修改文件

sed -i "1a\hello world" sed.txt

删除第 2 行

sed -i "2d" sed.txt

删除文档中的每一行

sed "d" sed.txt

原来的内容要打印,匹配的行要打印,找到的行会打印两次

sed "/[0-9]/p" sed.txt

匹配行中包含 0-9 任意一个字符的行,只打印找到的行

sed -n "/[0-9]/p" sed.txt

将 filesystem替换为 FS

sed "s/filesystem/FS/" sed.txt

忽略大小写

sed "s/filesystem/FS/i" sed.txt

不仅忽略大小写还要行内全局替换

sed "s/filesystem/FS/gi" sed.txt cp /etc/inittab ./

将文件中的默认运行级别改为 5

sed "s/[0-6]/5/" inittab

发现将所有匹配的都修改了(注意并未修改原文件),匹配访问太广了。

更精确匹配方案的写法应该为如下命令:

sed "s/id:[0-6]:initdefault:/5/" inittab

但是还存在问题,匹配后被修改内容问匹配出的部分,范围过大。解决办法:

反向引用

sed "s/\(id:\)[0-6]\(:initdefault:\)/\15\2/" inittab

分析:

sed "s/\(id:\)[0-6]\(:initdefault:\)/\15\2/" inittab id:num:initdefalut: \15\2 id:5:initdefault: 也可以写成: sed -r "s/(id:)[0-6](:initdefault:)/\15\2/" inittab ./edit_inittab.sh 查找/etc/profile 中包含 PATH 的行,将这些行写到指定的文件:hello.log 中 sed -n "/PATH/w hello.log" /etc/profile

4.10 awk

awk:

awk 是一个强大的文本分析工具

相对于 grep 查找,sed 编辑,awk 在对数据分析并生成报告时更为强大

awk 把文件逐行读入,以空格和制表符作为默认分隔符将每行切片,切开的部分 再进行各种分析处理。

awk -F [’:’] ‘{pattern + action}’ filename

支持自定义分隔符

支持正则表达式匹配

支持自定义变量,数组 a[1] a[tom] map(key)

支持内置变量

FS 设置输入域分隔符,等价于命令行 -F 选项 NF 浏览记录的域的个数 NR 已读的记录数 OFS 输出域分隔符 ORS 输出记录分隔符 RS 控制记录分隔符

支持函数

print、split、substr、sub、gsub

支持流程控制语句,类 C 语言

if、while、do/while、for、break、continue

搜索/etc/passwd 有 root 关键字的所有行

cp /etc/passwd ./ awk '/root/ { print $0}' passwd

统计/etc/passwd 文件中,每行的行号,每行的列数,对应的完整行内容

awk -F ':' '{print NR "-" NF "-" $0}' passwd

只是显示/etc/passwd 的账户:

awk -F':' '{print $1}' passwd

只是显示/etc/passwd 的账户和账户对应的 shell,而账户与 shell 之间以逗号分割,

awk -F':' '{print $1 "," $7}' passwd

制表符拼接字段

awk -F':' ' { print $1"\t" $7} ' passwd

在所有行开始前添加列名 name,shell,在最后一行添加"shell,end"

awk -F ":" ' BEGIN{ print "name,shell" } { print $1","$7 } END{ print "shell,end" } ' passwd

• 案例报表统计:合计每人 1 月总消费,0:manager,1:worker

Tom 0 2020-10-11 car 3000 John 1 2020-01-13 bike 1000 vivi 1 2020-01-18 car 2800 Tom 0 2020-01-20 car 2500 John 1 2020-01-28 bike 3500

解决方案:

awk '{ split($3,date,"-") } END{ for(i in date){ print i"\t"date[i] } } ' emp.txt

角色处理:

if $2 ==0 map_name_role[$1] = “manager” else map_name_role[$1] = “worker”

整合:

awk '{ split($3, date, "-") if (date[2] == "01"){ map_name_sala[$1]+=$5 if($2=="0"){ map_name_role[$1]="Manager" }else{ map_name_role[$1]="Worker" } } } END{ for(name in map_name_sala){ print name"\t"map_name_sala[anme]"\t"map_name_role[name] } }' awk.txt

4.11 wc

wc [选项列表]… [文件名列表]…

DESCRIPTION 描述

对每个文件输出行、单词、和字节统计数,如果指定了多于一个文件则还有一个 行数的总计。没有指定文件或指定的 文件是 -,则读取标准输入。

-c, --bytes, --chars 输出字节统计数。

-l, --lines 输出换行符统计数。

-L, --max-line-length 输出最长的行的长度。

-w, --words 输出单词统计数。

–help 显示帮助并退出

–version 输出版本信息并退出

4.12 vi/vim 编辑器的使用!!!

i 进入编辑模式 a 在选定字符后插入字符 o 在当前行下添加新行 O 在当前行上添加新行 I 在当前行首进入编辑模式 A 在当前行末进入编辑模式 ESC 退出编辑模式 : 末行模式 ESC,ESC 退出末行模式 ZZ 在命令模式保存并退出编辑器 :wq 保存并退出编辑器 :w 保存编辑器内容 :q! 不保存退出编辑器 移动光标 h 左 j 下 k 上 l 右 w 移动到下一个单词的词首 e:跳至当前或下一个单词的词尾 b:跳至当前或下一个单词的词首 0:绝对行首 ^:行首的第一个非空白字符 $:绝对行尾 G:文档末尾 3G:第三行 gg:文档开头 ctrl-f 向下翻页 forward ctrl-b 向上翻页 backward 删除替换单个字符 x:删除光标位置字符 3x:删除光标开始 3 个字符 r:替换光标位置字符 dw 删除单词 dd 删除整行 D:删除光标所在位置到行尾 yw 复制单词 yy 复制 1 行 nyy 复制 n 行,n 是数字 p 粘贴 paste u:撤销 undo ctrl+r:重做 操作结束后使用 u 退回到上次操作,则 ctrl+r 重做 . 重复上一步操作 set:设置 :set nu number 显示行号 :set nonu nunumber 取消行号的显示 :set readonly 设置只读 :/after n,N ?向上查找 :! 执行命令 查找并替换 s/str1/str2/gi /:临近 s 的第一个为边界字符 :/ @ #(为了防止内容和边界字符重复,可以使用 @和#做边界字符) g:一行内全部替换 i:忽略大小写 n:行号 .:当前光标行 +n:偏移 n 行 $:末尾行,$-3 %:全文 :%d 删除全文 :.,$-1d 从当前行删除到倒数第二行 :.,+3d 从当前行再往下数三行删除 :.,13d 从当前行到第 13 行删除

5 文件压缩与打包

压缩:指通过某些算法,将文件尺寸进行相应的缩小,同时不损失文件的内容。

打包:指将多个文件(或目录)合并成一个文件,方便传递或部署。

压缩文件或打包文件常见的扩展名:*.tar.gz, *.tar.bz2;linux 系统一般文件 的扩展名用途不大,但是压缩或打包文件的扩展名是必须的,因为 linux 支持的压缩命令 较多,不同的压缩技术使用的压缩算法区别较大,根据扩展名能够使用对应的解压算法。

常见文件扩展名:

*.tar.gz tar 程序打包的文件,并且经过 gzip 的压缩

*.tar.bz2 tar 程序打包的文件,并且经过 bzip2 的压缩

TAR 命令,选项与参数:

-c :建立打包文件,

-t :查看打包文件的内容含有哪些文件

-x :解打包或解压缩的功能,可以搭配-C(大写)在特定到特定目录解开

-j :通过 bzip2 的支持进行压缩/解压缩:此时文件最好为 *.tar.bz2

-z :通过 gzip 的支持进行压缩/解压缩:此时文件最好为 *.tar.gz

-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来

-f filename:-f 后面跟处理后文件的全名称(路径+文件名+后缀名)

-C 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个 选项 -p :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件

注意 -c, -t, -x 不可同时出现在一串指令列中

TAR 常用的指令组合!!!

打包与压缩:

tar –zcv –f [/路径/]filename.tar.gz 被压缩的文件或目录 tar –jcv –f [/路径/] filename.tar.bz2 被压缩的文件或目录

练习:将/etc 目录下的所有文件打包并压缩/tmp/part1/tar/etc01.tar.gz

将/etc 目录下的所有文件打包并压缩/tmp/part1/tar/etc02tar.bz2

查询:

tar –ztv –f [/路径/] filename.tar.gz tar –jtv –f [/路径/] filename.tar.bz2

备份:

tar –zpcv –f [/路径/]filename.tar.gz 被备份文件或目录 tar –jpcv –f [/路径/]filename.tar.bz2 被备份文件或目录

解压到当前目录:

tar –jxv –f [/路径/] filename.tar.bz2 tar –zxv –f [/路径/] filename.tar.gz

解压到指定目录:

tar -jxv -f [/路径/] filename.tar.bz2 –C 指定目录 tar -zxv -f [/路径/] filename.tar.gz -C 指定目录

注意:filename 前带路径表示该路径下的,反之表示当前目录下

将/etc 压缩到/tmp/下 etc01.tar.gz

方式一:filename.tar.gz 前不带路径

[root@node1 ~]# cd /tmp/ [root@node1 tmp]# tar -zcvf etc01.tar.gz /etc/

方式二:filename.tar.gz 前带路径

[root@node1 ~]# tar -zcvf /tmp/etc01.tar.gz /etc

将/tmp/下 etc01.tar.gz 解压到/tmp/目录下

[root@tedu ~]# cd /tmp/ #首先进入对应目录 [root@tedu tmp]# tar -zxvf etc01.tar.gz

将/tmp/下 etc01.tar.gz 解压到/usr/目录下

[root@tedu tmp]# tar -zxvf etc01.tar.gz -C /usr 或者 [root@tedu tmp]# tar -zxvC /usr -f etc01.tar.gz

我是小白弟弟,一个在互联网行业的小白,立志成为一名架构师

https://blog.csdn.net/zhouhengzhe?t=1

Linux 虚拟化

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python常用的序列化工具对比,看哪个性能最好
下一篇:[Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解 | 【生长吧!Python】
相关文章