find:查找命令
由于Linux系统大部分都是应用于服务器上,所以查询数据的时候并没有图形化界面查找数据的便捷性。
语法:
find [path] [选项] 参数
选项:
-name
按文件名查询
-perm
按文件权限查询
-size
按文件的大小查找
-user
按用户(属主)查询
-group
按用户组查询
-type
按文件的类型查询
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。 (这是个小写的L)
f - 普通文件。
案例:
查找jdk安装的目录。
bash
find / -name java
查找当前系统中所有的.log后缀名的文件
bash
find / -name “*.log”
查找系统中/home目录下的非普通文件
bash
find /home ! -type f
查找当前用户/home目录下权限为700的文件
#bash
find /home -perm 700
查找/dev目录下的块设备文件
#bash
find /dev -type b
sed:
介绍:
sed本身是一个逐行处理工具,会逐行处理到文件的结束。默认情况下不修改源文件,因为sed是将源文件内容逐行copy到一个临时缓冲区(模式空间),对其进行编辑,行处理结束后,将其输出到屏幕上,也可以通过数据重定向将结果导入到新的文件中去。
sed本身提供修改源文件的选项。但是如果修改源文件时,结果内容并不会发送到屏幕上。
语法:
sed [option] “[action]” [filename]
选项:
-e
允许对输入数据应用多条sed命令进行编辑。
-i
表示直接操作源文件
动作:
s:
字符串匹配/查找
i:
插入
a:
追加
d:
删除
c:
替换
项目 A 注意:选项和动作的字母i不是同样的功能。
案例:
源文件内容(demo):
hello teduhadoop
hello hadoop
hello hdfs ,hi sed
1、将全文的h替换为H。
bash
sed “s/h/H/g” demo
2、修改全文的h/H,第一个l/L
bash
sed -e “s/h/H/g” -e “s/l/L/1” demo
or
多条指令的另外一种写法:
sed “s/h/H/g;s/l/L/1” demo
3、修改全文的第一个和第二个h/H
bash
sed “s/h/H/1;s/h/H/1” demo
4、部分文件中,由于不知道是第几行,且文件中存在多个相同的字符串时,如何修改。
eth0文件内容:
DEVICE=eth0
HWADDR=00:0c:29:37:f6:95
TYPE=Ethernet
UUID=5c4fcaf0-7f4f-4ab1-8dee-a96aecb23823
ONBOOT=no
NM_CONTROLLED=yes
BOOTPROTO=dhcp
DNS2=8.8.8.8
DNS1=114.114.114.114
IPV6INIT=no
USERCTL=no
PEERDNS=yes
将文件中的ONBOOT=no修改为ONBOOT=yes
bash
sed -i “s/ONBOOT=no/ONBOOT=yes/g” eth0
5、在文件中进行插入新的内容:
源文件内容:
hello teduhadoop
hello hadoop
hello hdfs ,hi sed
5.1、在第一行插入内容"hello bigdata"
bash
sed “1 i hello bigdata” demo
5.2、在第一行追加内容"hello 小强"
bash
sed “1 a hello 小强” demo
6、删除匹配的行
bash
sed “/hdfs/d” demo
表示将匹配的到hdfs的整行删除,如果匹配的内容是h的话,当前文件的内容会被全部删除。
grep:
这是一款强大文本搜索工具选项:
-number
同时显示匹配行上下的n行
-b,–byte-offset
印匹配行前面打印该行所在的块号码。
-c,–count
只打印匹配的行数,不显示匹配的内容。
-i,–ignore-case
忽略大小写差别。
-q,–quiet
取消显示,只返回退出状态。0则表示找到了匹配的行。
–color
将匹配内容上色区分
-n,–line-number
在匹配的行前面打印行号。
-v,–revert-match
反检索,只显示不匹配的行。
#bash
cd /root
ls |grep -2 log #匹配上下两行
ls |grep -n log #匹配行号
ls | grep log --color
tail:
文本监控,通常情况下用于监视文件的增长。
场景:
大数据环境中,很多软件在启动时,不会将真正的启动/过程日志打印在屏幕上,因为内容繁多,会影响程序员观察启动过程中,哪个进程没有启动。像此种场景,我们就可以利用tail工具用来监视该软件启动日志文件的实际内容。
语法:
tail [选项] fileName
选项:
-f
用于监控文件的增长!!!
-n
从指定的行中进行监控文件的内容
cut:
cut命令在文件中负责剪切数据用的
选项:
-b
字节
-c
字符
-f
提取第几列
-d
按指定分隔符分割列
案例:
源文件内容:
192.168.1.1
192.168.1.3
192.168.1.5
192.168.1.4
截取第11个字节:
bash
cut -b 11 demo
截取第7-9的字节
bash
cut -b 7-9 demo
截取最后一个字节进行排序:
bash
cut -b 11 demo | sort
以点为分隔符 获取第二个字段
bash
cut -d . -f 2 demo
历史命令:
history
该命令可以用来查看Linux系统中曾经执行过的命令(默认1000条)。
用法:
!!
运行上一条命令
!88
运行第88条命令
!88 /test
运行第88条命令并在命令后面加上/test (可以用ls举例)
!ls
运行上一个ls命令
!ls:s/CF/l
运行上一个ls命令,其中把CF替换成l
if判断
条件判断语句:
语法:
if语法
#!/bin/bash
a=10
b=10
if [ $a -eq $b ];then
echo “两个数相等”
fi
if else语法
#!/bin/bash
string=“hello”
string1=“HELLO”
if test $string = $string1
then
echo “两个字符串一样”
else
echo “两个字符串不一样”
fi
if else-if else语法
以下实例判断两个变量是否相等:
a=10
b=20
if [ $a == $b ]
then
echo “a 等于 b”
elif [ $a -gt $b ]
then
echo “a 大于 b”
elif [ $a -lt $b ]
then
echo “a 小于 b”
else
echo “没有符合的条件”
fi
test判断
test判断:
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
数值测试
参数
说明
-eq
等于则为真
-ne
不等于则为真
-gt
大于则为真
-ge
大于等于则为真
-lt
小于则为真
-le
小于等于则为真
实例演示:
#!/bin/bash
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo ‘两个数相等!’
else
echo ‘两个数不相等!’
fi
字符串测试
参数
说明
=
等于则为真
!=
不相等则为真
-z 字符串
字符串的长度为零则为真
-n 字符串
字符串的长度不为零则为真
实例演示:
#!/bin/bash
num1=“piaolaoshi”
num2=“PIAOLAOSHI”
if test $num1 = $num2
then
echo ‘两个字符串相等!’
else
echo ‘两个字符串不相等!’
fi
文件测试
参数
说明
-e 文件名
如果文件存在则为真
-r 文件名
如果文件存在且可读则为真
-w 文件名
如果文件存在且可写则为真
-x 文件名
如果文件存在且可执行则为真
-s 文件名
如果文件存在且至少有一个字符则为真
-d 文件名
如果文件存在且为目录则为真
-f 文件名
如果文件存在且为普通文件则为真
-c 文件名
如果文件存在且为字符型特殊文件则为真
-b 文件名
如果文件存在且为块特殊文件则为真
实例演示:
#!/bin/bash
cd /bin
if test -e ./bash
then
echo ‘文件已存在!’
else
echo ‘文件不存在!’
fi
另外,Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!“最高,”-a"次之,"-o"最低。例如:
#!/bin/bash
cd /bin
if test -e ./notFile -o -e ./bash
then
echo ‘至少有一个文件存在!’
else
echo ‘两个文件都不存在’
fi