Linux学习——第三部分 文件内容、搜索命令、系统信息
文章目录
- 一、文件内容
- 1. head:查看文档的前几行内容
- 2. tail:查看文档(日志)的后几行内容
- 3. grep:搜索存在关键字的行
- 4. cut:以某种方式按照文件的行进行分割
- 5. sort:将文件的每一行作为一个单位相互比较,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
- 6.wc:可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
- 7.uniq:用于检查及制除文本文件中重复出现的行,一般与sort命令结合使用。
- 8. tree:tee和>类似,重定向的同时还在屏幕输出
- 9. tr:用于转换或删除文件中的字符。
- 10.split:该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件
- 11.文件所属
- 二、搜索命令
- 三、系统信息
- 四、awk
- 1.默认分段
- 2.连接符OFS
- 3.分隔符
- 4.内容匹配
- 5.段内容判断
- 五、其他
- 1. 管道
- 2. echo
- 3. &&和||
- 4. 软链接
- 5. 历史命令:history
- 6. 定时服务
- 六、Shell
- 1. 基础脚本
- 2. 变量
- 2.1 系统变量
- 2.2 用户变量
- 2.3 特殊变量
- 3. 运算符
- 4.条件判断
- 5. 流程控制
- 5.1 if判断
- 5.2 case语句
- 5.3 for循环
- 5.4 while循环
一、文件内容
1. head:查看文档的前几行内容
语法:head -n 数字文件
(-n表示显示前几行内容)
- 查看文件的前5行:
head -5 /etc/passwd
2. tail:查看文档(日志)的后几行内容
- 通过tail命令查看文档(日志)的后几行内容
- 语法:
tail -n 数字文件
(-n表示显示前几行内容)- 查看文件的前5行:
tail -5 /etc/passwd
- 查看文件的前5行:
- 语法:
- tail动态显示文档的最后内容,一般用来查看日志
- 语法:
tail -f 文件
- 实时监控文件web.log:
tail -f web.log
测试,向web.log文件追加内容:echo "hello briup" >>web.log
- 显示最后10行内容同时对文件进行监控:
tail -10f web.1og
- 实时监控文件web.log:
- 语法:
3. grep:搜索存在关键字的行
语法:grep [选项] [关键字|正则] 文件名
- 搜索/etc/passwd文件中出现bash的行:
grep bash /etc/passwd
- 搜索/etc/passwd文件中出现bash的行,并显示行号:
grep -n bash /etc/passwd
- 搜索/etc/passwd文件中出现bash的行,忽略大小写:
grep -i BASH /etc/passwd
- 搜索/etc/passwd文件中出现没有bash的行:
grep -v bash /etc/passwd
- 搜索以/etc/passwd中每行基于sys开头的行的内容:
grep ^sys /etc/passwd
4. cut:以某种方式按照文件的行进行分割
- 参数列表
- -b按字节选取忽略多字节字符边界,除非也指定了-n标志
- -c按字符选取
- -d自定义分隔符,默认为制表符。
- -f与-d一起使用,指定显示哪个区域。
- 范围控制:
- n:只有第n项
- n-:从第n项一 直到行尾
- n-m:从第n项到第m项(包括m)
- 构建文件:
vi b.txt
- 文件内容:
111 :aaa :bbb:ccc
222 :ddd:eee:fff
333 :ggg :hhh:jjj - 案例:
- 找出文件中每一行中第4个字符:
cat b.txt|cut -b 4
- 找出文件中每一行中第1、2、3、4个字符:
cat b.txt|cut -b 1,2,3,4
- 截取出文件中以”:"进行分割的第1,2段内容:
cat b.txt|cut -d ':’ -f 1,2
- 找出文件中每一行中第4个字符:
5. sort:将文件的每一行作为一个单位相互比较,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
- 构建文件:
vi c.txt
- 文件内容:
banana
apple
pear
orange
pear - 案例:
- 对c.txt文件进行排序:
sort c.txt
- 对c.xt文件进行排序,并去重:
sort -u c.txt
- 对c.txt文件进行降序:
sort -r c.txt
- 对c.txt文件进行排序:
6.wc:可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
- 参数:
- -c或–bytes或-- chars只显示Bytes数。
- -l或–lines 只显示行数。
- -w或–words 只显示字数。
- –help 在线帮助。
- –version显示版本信息
- 案例:
- 显示文件有多少行:
wc -1 c.txt
- 显示文件有多少单词:
wc -w c.txt
- 显示文件有多少字节:
wc -c c.txt
- 显示全部信息:
wc c.txt
- 显示文件有多少行:
7.uniq:用于检查及制除文本文件中重复出现的行,一般与sort命令结合使用。
- 参数说明:
-c统计行数
- 构建文件:
vi d.txt
- 文件内容:
张三 98
李四 100
王五 90
赵六 95
麻七 70
李四 100
王五 90
赵六 95
麻七 70 - 案例:
- 去除d.xt中重复的行:
sort d.txt | uniq
- 统计d.txt中每行内容出现的次数:
sort d.txt | uniq -c
- 去除d.xt中重复的行:
8. tree:tee和>类似,重定向的同时还在屏幕输出
- 参数说明:
tee -a内容追加和>>类似
- 案例:
- 统计d.txt中每行内容出现的次数输出到data.txt,并且把内容显示在控制台:
sort d.txt|uniq -c |tee data.txt
- 统计d.txt中每行内容出现的次数输出追加到data.bxt,并且把内容显示在控制台:
sort d.txt|uniq -c |tee -a data.txt
- 统计d.txt中每行内容出现的次数输出到data.txt,并且把内容显示在控制台:
9. tr:用于转换或删除文件中的字符。
- tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。
- 删除指令字符:
-d
,--delete
- 案例:
- 把hello world的小写o换成大写O:
echo 'hello world' |tr 'o’ 'O'
- 把hello world的小写换成大写:
echo 'hello world' |tr '[a-z]' '[A-Z]'
- 把hello world的a-g的数据删除:
echo 'hello world' |tr -d '[a-g]'
- 把hello world的小写o换成大写O:
10.split:该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件
- 参数说明:
- -b<字节>:指定每多少字节切成一个小文件
- -|<行数>:指定每多少行切成一个小文件
- 构建文件:
vi d.txt
- 文件内容: .
张三 98
李四 100
王五 90
赵六 95
麻七 70
李四 100
王五 90
赵六 95
麻七 70 - 案例:
- 把文件d.txt按照每两行拆分:
split -1 2 d.txt
- 把文件d.txt按照2K拆分:
split -b 2K d.txt
- 把文件d.txt按照每两行拆分:
11.文件所属
- 修改文件的拥有者和所属组。
- chown修改文件的拥有者
- chgrp修改文件的所属组
- 案例:
- 修改d.txt文件的拥有者为hdfs:
sudo chown hdfs d.txt
- 修改文件的所属组为hadoop:
sudo chgrp hadoop d.txt
- 修改d.txt文件的拥有者为hdfs:
二、搜索命令
- 通过find命令在特定目录下(包含它的后代目录)搜索符合条件的文件
- 语法:
find [路径] [选项] 搜索内容
- 案例:
- 查找家路径下基于.txt结尾的文件:
find ~ -name '*.txt'
- 查找在五天内没有访问过的文件:
find / -atime +5
- 查找在五天内访问过的文件:
find / -atime -5
- 查找文件类型为目录的所有文件:
find ~ -type d
- 查找在家目录下等于2M的文件:
find ~ -size 2M
- 查找在家目录下大于2M的文件:
find ~ -size +2M
- 查找在家目录下小于2M的文件:
find ~ -size -2M
- 查找在家目录下权限为777的文件:
find~-perm777
- 查找拥有者为hdfs的文件:
find ~ -user hdfs
或find ~ -uid 20000
- 查找所属组为hadoop的文件:
find ~ -group hadoop
或find ~ -gid 20000
- 找出365天没有访问过的文件并删除:
find /export/home -type f -atime +365 -exec rm {} \;
- 查找家路径下基于.txt结尾的文件:
-type
- f 普通文件
- d 目录文件,它会把[目标目录]也会显示出来,如果使用
find /tmp -type d|xargs rm -r
就会 连/tmp
目录一起删掉!- l 链接文件
- b 块设备文件
- c 字符设备文件
- p 管道文件
- s socket文件
三、系统信息
- 显示磁盘剩余空间
- 显示各个磁盘挂载信息:
df -h
- 显示各个磁盘挂载信息:
- 所谓进程,通俗的说就是当前正在执行的一个进程
- 查看进程的详细情况:
ps aux
- USER进程的属主
- PID进程的ID
- %CPU进程占用的CPU百分比
- %MEM占用内存的百分比;
- VSZ进程使用的虚拟內存量(KB)
- RSS该进程占用的固定內存量(KB) (驻留 中页的数量) ;
- TTY该进程在那個終端上运行
- STAT状态
- START该进程被触发的时间
- TIME该进程使用CPU运行的时间;
- COMMAND命令的名称和参数;
- 终止进程:
kill -9 2000
- 查看进程的详细情况:
注意:使用kill命令时,最好只终止由当前用户开启的进程,而不要终止root身份开启的进程,否则可能导致系统崩溃
四、awk
1.默认分段
- awk是一种处理文本文件的命令,是一个强大的文本分析工具。但是比较复杂,不过功能比sed更加的强大,它支持分段。默认每行按空格或TAB分割。
- 选项参数说明:
-F指定输入文件折分隔符
- 构建文件:
vi e.txt
- 文件内容:
aaa 111 333
bbb 444 555
ccc 666 777 888
ddd 999 222 999 - 案例:
- 打印出每一行的第一段内容:
awk '{print $1}’ e.txt
- 打印出每一行的第1、 2、3段内容:
awk '{print S1,$2,$3}' e.txt
- 打印出每一行的第1、2、3段内容,基于#拼接:
awk '{print $1"#"$2"#"$3}' e.txt
- 打印出每一行的第一段内容:
2.连接符OFS
- 案例:
- 打印出每一行的第1、2、3段内容,基于#拼接:
awk ' {0FS="#"}{print $1,$2,$3}' e.txt
- 打印出每一行的第1、2、3段内容,基于#拼接:
3.分隔符
- 参数说明:-F来指定分隔符
- 构建文件:
vi b.txt
- 文件内容:
111 :aaa :bbb :ccc
222 :ddd:eee:fff
333 :ggg :hhh: jjj - 案例:
- 基于
:
分割数据,打印第一项:awk -F ':' '{print $1}' b.txt
4.内容匹配
- 匹配b.txt中第1段包含22的内容:
awk -F ':' '$1 ~ /^22/' b.txt
- 在b.txt中如果匹配到aaa就打印第1,2段,如果匹配到cc,就打印第3,4段:
awk -F ':' '/aaa/ {print $1,$2} /ccc/ {print $3,$4}’ b.txt
- 在b.txt中如果匹配到aaa或者ddd,就打印全部内容:
awk -F ':' '/aaa|ddd/ {print $0}' b.txt
5.段内容判断
- 在b.txt中如果第1段等于222就打印所有内容:
awk -F ':' '$1==222 {print $0}' b.txt
- 在b.txt中如果第1段大于等于222就打印所有内容:
awk -F ':' '$1>=222 {print $0}' b. txt
- 在b.txt中如果第1段不等于222就打印所有内容:
awk -F ':' '$1!=222 {print $0}' b.txt
- 在b.txt中如果第1段等于111,并且第2段等于aaa就打印全部:
awk -F ':' '$1==111 && $2=="aaa" {print $0}' b.txt
- 在b.txt中显示每一行有几段:
awk -F ':' '{print NF}' b.txt
- 在b.txt中显示行号:
awk -F ':' '{print NR}' b.txt
- 打印b.txt前2行,并显示行号:
awk -F ':' 'NR<=2 {print NR" "$0}' b.txt
- 打印b.txt前2行,并且第2段匹配aa或者eee,打印全部,打印行号:
awk -F ':' 'NR<2 &&$2 ~ /aaa|bbb/{print $0}' b.txt
五、其他
1. 管道
通过命令1 |命令2可以将命令1的结果通过命令2作进一步的处理
案例:
- 过滤/etc/目录下以pro’开头的文件
ls /etc/ | grep ^pro
2. echo
默认将字符串输出到控制台,通常回和重定向联合使用
案例:
- 将字符串输出到控制台
echo "hello"
- 将系统变量PATH输出到控制台
echo $PATH
$表示引入系统变量
- 将字符串追加到a.txt文件中去
echo "hello world">>a.txt
3. &&和||
(1)&&:如果命令1执行成功了,才执行命令2
案例:如果创建目录成功,输出文件创建成功
mkdir test&&echo `文件创建成功`
(2)||:如果命令1执行失败了,才执行命令2
案例:如果创建目录不成功,输出文件创建不成功
mkdir test||echo `文件创建不成功`
4. 软链接
在linux中文件名和内容是两个文件,分开的
ln -s 目标文件绝对路径 快捷方式路径
5. 历史命令:history
- :显示所有的历史命令
history
- 执行历史命令第610条
!610
- 执行命令行,上一条命令
!!
6. 定时服务
crontab
是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
语法:
crontab [ -u user ] file
或者
crontab [ -u user ] { -l | -r | -e }
参数说明:
-u user
是指设定指定user的时程表-e
:执行文字编辑器来设定时程表,内定的文字编辑器是VI,如果你想用别的文字编辑器,则请先设定VISUAL环境变数来指定使用那个文字编辑器-r
:删除目前的时程表-l
:列出目前的时程表
(1)构建执行计划
crontab -e
(2)选择vi编辑器
(3)编辑执行计划
时间格式:m h dom mon dow command
- m分钟
- h小时
- dom天
- mon月
- dow星期几
- command命令
- 每一分钟执行一次/bin/ls:
* * * * * /bin/ls
- 在12月内,每天的早上6点到12点,每隔3个小时0分钟执行一次/usr/bin/backup:
0 6-12/3 * 12 * /usr/bin/backup
- 周一到周五每天下午5:00寄一封信给alex@domain.name:
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
- 每月每天的午夜0点20分,2点20分,4点20分…执行echo "haha"追加输入文件b.txt中:
20 0-23/2 * * * echo "haha" >>b.txt
- 每月1、10、 22日的4: 45重启mysql:
45 4 1,10,22 * * service mysql restart
六、Shell
shel是一个命令解析器,它接受应用程序/用户命令,然后调用操作系统。
查看shell支持的脚本
cat /etc/shells
1. 基础脚本
脚本以#!/bin/bash开头,指定解析器,最简单的脚本是由linux基本命令组成。
- 编辑脚本文件
vi first.sh
- 基于shell解析器执行shell脚本
sh first.sh
或
sh /home/gx/first.sh
或
bash first.sh
或
bash /home/gx/first.sh
- 基于脚本自身执行脚本
(1)脚本赋权
chmod a+x first.sh
(2)执行脚本
./first.sh
或
/home/gx/first.sh
2. 变量
2.1 系统变量
- 查看系统所有环境变量:
env
- 查看系统登录用户名:
echo $LOGNAME
2.2 用户变量
语法: 变量名=变量值
注意:
变量名和其值总是配对出现
变量声明只能当前的shell可以使用,如果子shell中也需要使用变量前加export
语法规则:
- 变量名以字母、_开始,可包含字母、数字,环境变量名建议大写。
- 变量值,可存储任何想要存放的值,变量的值如果有空格,需要使用双引号或单引号括起来.
等号两侧不能有空格
变量默认类型都是字符串类型,无法直接进行数值运算
案例:
- 定义变量name
NAME=zhansan
echo $NAME
变量可以重新赋值
- 撤销变量name
unset NAME
echo $NAME
- 声明静态命令
readonly AGE=33
echo $AGE
静态命令不能修改重新赋值。
- 变量声明全部是字符串类型,无法直接进行数值运算
SUM=10+20
echo $SUM
- 变量的值如果有空格,需要使用双引号或单引号括起来
DES='my name is zhansan'
echo $DES
2.3 特殊变量
(1)$n: n为0代表该脚本名称,n为1-9代表第一到第九个 参数,十以上的参数需要用大括号包
- 编辑文件:
vi second.sh
- 脚本赋权:
chmod 777 second.sh
- 运行脚本:
./second.sh 1 2 3 4 5 6 7 8 9 10 11 12 13
(2)$# 获取所有输出参数的个数
(3)$* 命令行中所有的参数,把所有的参数看成一个整体
(4)$@ 命令行中所有的参数,每个参数区分
(5)$? 执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一一个命令执行不正确了
./five.sh 1 2 3 4 5 6 7 8 9 10 11 12 13
echo $?
$?判断的是执行之前的一.条命令
3. 运算符
在shell中需要完成算数运算方式如下:
- $((运算式))
- $[运算式]
- expr+,-,*,/,%加,减,乘,除,取余
expr运算符间要有空格
案例:1+1运算
echo $((1+1))
或
expr 1 + 1
或
echo $[1+1]
4.条件判断
语法:[ condition ]
condition前后需要有空格
数字类型比较
- = 字符串比较
- -lt小于(less than)
- -le小于等于(less equal)
- -eq等于(equal)
- -gt大于(greater than)
- -ge大于等于(greater equal)
- -ne不等于(Notequal)
文件权限比较
- -r有读的权限(read)
- -w有写的权限(write)
- -x有执行的权限(execute)
文件类型比较
- -f文件存在并且是一个常规的文件(file)
- -e文件存在(existence)
- -d文件存在并是一一个目录(directory)
- -s文件存在且非空
5. 流程控制
5.1 if判断
if [ 条件1 ]
then
命令1
elif [ 条件2 ]
then
命令2
……
else
命令3
fi
if或elif后需要有空格
条件前后需要空格
5.2 case语句
case $变量名in"值1") 如果变量的值等于值1,则执行程序1;;"值2")如果变量的值等于值2,则执行程序2;;省略其他分支..*)如果变量的值都不是以上的值,则执行此程序;;
esac
case行尾必须为单词“in”
模式匹配必须以右括号)结束
双分号;;表示命令序列结束,相当于java中 的break
最后的*)表示默认模式,相当于java中的default。
5.3 for循环
for 变量名 in 列表
do命令
done
或
for ((初始值;循环控制条件;变量变化))
do程序
done
5.4 while循环
while [ 条件 ]
do命令
done
Linux学习——第三部分 文件内容、搜索命令、系统信息相关推荐
- linux 筛选文件,「Linux基础知识」grep文件内容筛选命令的使用
原标题:「Linux基础知识」grep文件内容筛选命令的使用 grep命令用于从文档中抓取显示包含指定字符的行,grep命令的使用格式如下: grep [选项] 匹配模式 文件1 文件2 ...... ...
- Linux学习笔记三【文件及目录的权限管理篇】
文件及目录的权限管理 上篇简单介绍了下文件和目录的一些简单的操作,接下来介绍用户和文件权限的管理.首先了解用户和组账号的配置文件,然后是管理用户和组账号,最后要会设置文件和目录权限和归属. Linux ...
- Linux学习(三):管道相关命令
学习目标 熟练掌握以下命令 1.cut 2.sort 3.wc 4.uniq 5.tee 6.tr 7.split 8.awk 9.sed / grep 熟练掌握以下命令 1.cut 准备工作 成绩表 ...
- Linux 中的五种查看文件内容的命令 and 三种搜索文件的命令
一.查看文件内容的命令 1.head 命令 作用:查看文件的头部内容 使用:head [参数] 文件名 参数:-n,-c 案例:查看 yzc 的文件的前5行内容 查看 yzc 的文件的前5个字母 he ...
- linux下grep文件内容搜索工具及基本正则表达式详解
linux下grep文件内容搜索工具及基本正则表达式详解 grep命令: 根据模式(文本字符和基本正则表达式的元字符组合而成之匹配条件)搜索文本, 并将符合模式的文本行显示出来. 格式:grep [选 ...
- Linux文件、文件内容搜索大全(find,grep命令)
1.根据 文件或目录名称 搜索 1.精准搜索,名字必须为 init 才能搜索的到 find /etc -name init 2.精准搜索,名字必须为 init或者有字母大写也能搜索的到 find /e ...
- linux之文件搜索和文件内容搜索
年岁渐长,看过就忘,记录供使用查看 执行之前要确认用户的权限(权限不足则会要no permission) 系统注册文件搜索: whereis xxx 文件搜索的方法较多 文件名搜索:locate XX ...
- 【Linux】Linux学习(三)常用基本命令(一)
Linux学习(三)常用基本命令 常用基本命令 帮助命令 文件目录类命令 时间日期类命令 用户管理命令 用户组管理命令 文件权限类 搜索查找类 压缩和解压类 磁盘查看和分区类 进程管理类 学习总结 常 ...
- win7 搜索 php 文件内容,window_win7文件后缀名怎么设置实现文件内容搜索?,文件有广义的文件,那就是公 - phpStudy...
win7文件后缀名怎么设置实现文件内容搜索? 文件有广义的文件,那就是公文书信件等等纸质材料等等.而更广泛的是我们现在办公中所用到的电子文件,它在我们现有的办公中起到了不可忽视的作用.下面就说一些办公 ...
最新文章
- vue key重复_得心应用的Vue高级技巧
- Pycharm切换anaconda的环境
- Python学习笔记一:数据类型转换
- Linux:让普通用户临时性获得root用户权限
- 微服务的终极目标,Mecha分布式运行时之Dapr
- java appender_log4j的Appenders配置方法
- JDK 8 新特性- 学习中
- ECCV 2020 论文大盘点-视频目标检测篇
- 【360开源】Wayne:企业级可视化多集群Kubernetes一站式管理平台
- 单独编译apache的rewrite模块
- 十行代码实现title滚动显示
- log4j每天产生一日志文件
- 读书笔记:陈希孺:概率论与数理统计:2014.01.01
- 信息系统项目管理师论文范例4-进度管理
- Lua 斗地主算法实现
- 源码实践指南!Mastering opencv Ch3 Markerless AR--UBUNTU下 opencv+opengl 运行
- 什么是重载?有什么作用?
- 用java计算一元二次方程
- python导入文件
- Mac使用Karabiner-Elements修改mac默认快捷键