linux查看指定文件夹大小
du -sh 目录/
du -sh * | sort -n 统计当前文件夹(目录)大小
写在前面:
总结一些自己在工作中常用到的命令,还有就是其余地方学习到的一并整理
1.find - 查找特定的文件:
语法:find path [options] params
find / -name “nginx.conf”
精准查找:
指定目录下查找文件,不指定path代表当前目录
find -name “nginx.conf”
模糊查找:
模糊匹配 * 代表0个或多个字符
find / -name “nginx.conf”
忽略大小写查找: -iname
find / -iname “nginx.conf”
帮助文档:
man find
2.grep 和 管道符
检索文件内容,文本搜索工 具
语法:grep [options] pattern file
作用:查找某文件里 符合条件的行
| - 管道操作符:
前一个指令的结果作为 ,后一个指令的输入【右边的命令能够接收标准输入流】
find / -name “nginx.conf”
find / | grep “nginx.conf”
常用接收 数据管道的命令有:
sed
awk
grep
wc
join
sort
split
cut
head
top
less
more
案例:查询指定log日志文件中,某一行是否存在
匹配出包含某些字符的行:
grep ‘partial[true]’ access.log
进一步匹配,上一步的结果
将结果中包含,对特定关心的一列 进行匹配出来
grep ‘partial[true]’ access.log | grep -o ‘engine[[0-9a-z]*]’
ps -ef |grep mysql |grep -v “grep”
3.awk - 对文件内容做 统计
特别适合处理结构化数据
语法: awk [options] ‘cmd’ file
一次读取一行文本,按照输入分隔符进行切片,切成多个部分
将切片直接保存在内建分变量中,$1,$2($0表示全部)
支持对单个切片进行判断,支持循环判断,默认分隔符是空格
根据空格筛选出文件的第一列和第四列
awk ‘{print $1,$4}’ student.txt
awk ‘$1==“tcp” && $2==1 {print $0}’ student.txt
表头输出出来
awk ‘($1==“tcp” && $2==1) || NR=1 {print $0}’ student.txt
指定分隔符为逗号:-F “,”
awk -F “,” ‘{print $2}’ test.txt
案例:某文件 各个字符出现的次数 ,类似于WC
grep 'partial[true]' access.log
| grep -o 'engine[[0-9a-z]*]'
| awk
'{array1[$1]++}END
{for(i in array1)
print i " " array1[i]
}'
4.sed - 批量替换文件内容
sed 流编辑器
语法: sed [option] ‘sed command’ filename
适合用于对文本的行内容 进行处理
replace.java
Str a = “This is java liuge”.
输出到终端:^Str打头的行
sed ‘s/^Str/String/’ replace.java
改变文件的内容 -i:
sed -i ‘s/^Str/String/’ replace.java
改变文件的内容 -i:.$ 点号结尾
sed -i ‘s/.$/;/’ replace.java
只是会替换每一行的第一个liuge
sed -i ‘s/liuge/liuge2/’ replace.java
全文替换:g
sed -i ‘s/liuge/liuge2/g’ replace.java
删除空行:
sed -i ‘/^ *$/d’ replace.java
删除包含is 的行:
sed -i ‘/is/d’ replace.java
------ending-------
netstat -tanp | grep 端口号
kill -9 pid
=20190822号更新===
玩转大数据之shell
mkdir shell
第一个脚本:
vim wordcount.sh
#!/bin/bash
# 解析器
echo "www.csylh.cn"
-bash: command not found:的问题
echo $PATH
新建文件,默认权限是:644 用户 用户组 其他
可以更改为:654
生产上不建议: chmod +x 文件
-------------------
怎么调试呢?#!/bin/bash -x
#!/bin/bash -x
# 解析器
echo "www.csylh.cn"
写复杂的shell 还是建议调试
或者: sh -x aaa.sh
总结:
1. 开头定义: #!/bin/bash
2. sh -x xxx.sh 【调试】
./xxx.sh 【不想调试】
#!/bin/bash -x 这样会影响结果查看
sh 命令的话 就不太care 是否有#!/bin/bash
2. 定义变量 及引用=====================
vi viriable.sh
#!/bin/bash
# 静态变量
lg="www.csylh.cn"
# 动态变量,会变化
date=`date`
echo ${lg}
echo ${date}
引用:
$k
${k}
总结:
1. = 前后不能有空格
2. 字符串最好加上双引号
3. 引用变量加上{}
3. 传递参数 =====================
vim paramater.sh
#!/bin/bash
echo $1
echo $2
echo "参数个数:$#"
echo "传递参数作为一个字符串显示:$*"
echo "PID: $$"
sh paramater.sh a b
输出:
a
b
sh paramater.sh "a b"
输出:
a b
4. 数组 =====================
linux 里面是一个一维的数组
vim array.sh
#!/bin/bash
arr=(liuge lihong ehiehi jiji)
# 打印出所有的值
echo ${arr[*]}
# 打印出第一个值
echo ${arr[0]}
echo ${#arr[*]}
问题:* 号也可以使用@符号
5. if判断 =====================
vim if.sh
#!/bin/bash
a="abc"
b="edf"
# 判断是否相等
if [ "${a}" == "${b}" ];then
echo "=="
else
echo "!="
fi
sh -x if.sh
另外一种:
vim if.sh
#!/bin/bash
a="ccc"
b="edf"
# 判断是否相等
if [ "${a}" == "${b}" ];then
echo "=="
elif [ "${a}" == "ccc" ]
then
echo "=="
else
echo "!="
fi
sh -x if.sh
6. 循环 =====================
for
while
vim forwhile.sh
#!/bin/bash
echo "~~~~~~循环 1 2 3 4 5~~~~~~~~"
for x in 1 2 3 4 5
do
echo $x
done
echo "~~~~~~循环(i=1;i<10;i++)~~~~~~~~~~"
for ((i=1;i<10;i++))
do
echo $i
done
echo "~~~~~~while循环~~~~~~~~~~"
j=1
while(($j<10))
do
echo $j
let "j++"
done
sh forwhile.sh
7. 字符串分割 =====================
vim split.sh
#!/bin/bash
s="liuge,lihong,jiji,heiehei"
echo "~~~~~~~~~写法1~~~~~~"
OLD_IFS="$IFS"
IFS=","
arr=($s)
IFS="$OLD_IFS"
for x in ${arr[*]}
do
echo $x
done
echo "~~~~~~~~~写法2~~~~~~"
arr2=(${s//,/ })
for x in ${arr2[*]}
do
echo $x
done
--------------------------
作业:
1. if 判断 数字大小
判断文件是否存在
文件是否为空