Linux 常用命令总结【20190822号更新】自己需要常看

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 判断  数字大小 
			判断文件是否存在 
			文件是否为空






















原文地址:https://www.cnblogs.com/liuge36/p/12614739.html