Linux——(1)基本命令
Linux——(2)文件系统、系统操作、文本操作命令、文件压缩与打包
虚拟目录树的各个目录用途
目录 | 用途 |
---|---|
/ | 虚拟目录的根目录。通常不会在这里存储文件 |
/bin | 二进制目录,存放许多用户级的 GNU 工具 |
/boot | 启动目录,存放启动文件 |
/dev | 设备目录,Linux 在这里创建设备节点 |
/etc | 系统配置文件目录 |
/home | 主目录,Linux 在这里创建用户目录 |
/lib | 库目录,存放系统和应用程序的库文件 |
/media | 媒体目录,可移动媒体设备的常用挂载点 |
/mnt | 挂载目录,另一个可移动媒体设备的常用挂载点 |
/opt | 进程目录,存放现有硬件及当前继承的相关信息 |
/proc | 虚拟目录的根目录。通常不会在这里存储文件 |
/root | root 用户的主目录 |
/sbin | 系统二进制目录,存放许多 GNU 管理员级工具 |
/srv | 服务目录,存放本地服务的相关文件 |
/sys | 系统目录,存放系统硬件信息的相关文件 |
/tmp | 临时目录,可以在该目录中创建和删除临时工作文件 |
/usr | 大量用户级的 GNU 工具和数据文件都存储在这里 |
/var | 可变目录,用以存放经常变化的文件,比如日志文件 |
查看系统挂载的磁盘情况
df
以人能看懂的格式显示
df -h
列出根目录下的内容
ls /
进到 boot 目录
cd /boot
在 linux 中用到了虚拟目录树,它的存在就是为了解耦应用和底层存储。
将光驱挂载到/mnt 目录:
mount /dev/cdrom /mnt
进入到/mnt 目录
cd /mnt
查看磁盘分区的挂载情况:
df -h
卸载掉挂载的分区/mnt
umount /mnt
注意卸载/mnt 时,当前目录不能在/mnt 下面,否则报出如下图所示提示:
再次查看磁盘分区的挂载情况:
df -h
重新挂载
mount /dev/cdrom /mnt
如果没有挂载,则访问父目录的文件夹
再次查看
df -h
du 可以为目录递归地汇总每个 FILE 的磁盘使用情况。
• du:文件系统的磁盘使用量或是目录使用量
du -s ./
添加-h 参数可以显示为人类可以读懂的格式
du -sh ./
将路径写成./*统计当前目录下每项内容占用的磁盘空间信息
du -sh ./*
显示文件的元数据
stat /etc/profile
change 和 modify 的不同
modify 指的是文件内容被修改的时间
change 表示文件元数据被修改的时间
touch 已存在的文件,抹平各个时间
touch 不存在的文件,则创建文件
直接查看一个文件的内容可以使用 cat,tac,nl 这几个指令
cat(concatenate):
cat 是 concatenate 的缩写,其功能时间一个文件的内容连续的输出。该命令适合看行 数较少的文件。另外,需要查看一般 DOS 文件时,可以通过-A 选项来显示换行符和[tab]。
tac(反向输出):
与上面的 cat 命令进行比较,是由最后一行先显示。
tac 功能与 cat 类似,但是是由文件最后一行反向连续输出到屏幕上。
head(取出前面几行,Centos6.5 使用/etc/man.config 文件):
命令格式:tail [ -n number] 文件
选项与参数:
[root@node1 ~]# tail profile
如果先要显示最后 20 行,就要如下:
[root@node1 ~]# tail -n 20 profile
[root@node1 ~]# tail -f profile
[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 不需要输入,只需要参数
将前面输出作为后面命令的参数
echo "/" | xargs ls -l
• xargs:命令
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 命令,将输入分成两个输出
cut:显示切割的行数据
以:作为分隔符,切割 passwd,输出从第 3 个字段到第 5 个字段
输出前两列内容:
输出字段 3 到最后一个字段
指定输出的分隔符:
输出第 7 个字段:
如果有的行没有分隔符,则输出会包含脏数据
可以使用-s 选项:
不打印没有分隔符的行:
显示 1,3,7 列
– output-delimiter 指定输出的时候的各字符分隔符
排序:字典序和数值序
sort:排序文件的行
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 个字段的值数值序排序
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
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
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
wc [选项列表]… [文件名列表]…
DESCRIPTION 描述
对每个文件输出行、单词、和字节统计数,如果指定了多于一个文件则还有一个 行数的总计。没有指定文件或指定的
文件是 -,则读取标准输入。
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 行删除
压缩:指通过某些算法,将文件尺寸进行相应的缩小,同时不损失文件的内容。
打包:指将多个文件(或目录)合并成一个文件,方便传递或部署。
压缩文件或打包文件常见的扩展名:*.tar.gz, *.tar.bz2;
linux 系统一般文件 的扩展名用途不大,但是压缩或打包文件的扩展名是必须的,因为 linux 支持的压缩命令 较多,不同的压缩技术使用的压缩算法区别较大,根据扩展名能够使用对应的解压算法。
常见文件扩展名:
TAR 命令,选项与参数:
注意 -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 指定目录
[root@node1 ~]# cd /tmp/
[root@node1 tmp]# tar -zcvf etc01.tar.gz /etc/
[root@node1 ~]# tar -zcvf /tmp/etc01.tar.gz /etc
[root@tedu ~]# cd /tmp/ #首先进入对应目录
[root@tedu tmp]# tar -zxvf etc01.tar.gz
[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