linux&shell

Linux常用指令:

复制代码
直接执行命令不成功的情况下,可以尝试在前面+busybox
例:busybox ps -ef

设置密码
passwd

设置和显示时间
date 月日时分年.秒

同步板子的系统时间(PC的IP)
busybox rdate -s 9.93.1.169

ifconfig命令临时配置IP地址和网关
ifconfig eth0 192.168.1.26 netmask 255.255.255.0
route add default gw 192.168.1.1

拷贝命令---wftpd32.exe在PC上部署ftp服务器
设备与服务器在同一网络中
1)从本地拷贝到设备
ftpget -u 用户名 -p 密码 服务器ip 设备端地址 服务器地址
例:ftpget -u web -p web 9.93.1.169 /opt/work.tar.gz work.tar.gz
2)从设备拷贝到本地
ftpget -u 用户名 -p 密码 服务器ip 服务器地址 设备端地址
例:ftpput -u web -p web 9.93.1.169 work.tar.gz /opt/work.tar.gz

压缩文件
tar -zcvf /opt/work.tar.gz /opt/work
解压文件
tar -zxvf /opt/work.tar.gz

ps--查看进程
ps -ef

pidof--查看进程id
pidof 进程名
[注]:如果有多个同名进程,那么将返回多个pid

杀进程(-9强制)
kill -9 进程ID
killall -9 进程名(如果有多个进程同名,那么这些进程都会被杀死)
复制代码

shell基本语法:

复制代码
#!/usr/bin/bash--查看解释器位置
echo $SHELL

将dos文件转换为unix格式
dos2unix 文件名
将unix文件转换为dos格式
unix2dos 文件名

获取当前执行文件所在的目录
script_abs=$(readlink -f "$0") 获取路径+文件名
echo $script_abs
script_dir=$(dirname $script_abs)获取路径
echo $script_dir

变量
作用域:
在shell中,变量默认具有全局属性,如需局部变量则需在变量声明处加local关键字,如:local a=10
1)${}获取变量的值(花括号可省略)
${a}或$a
2)$()和``(反引号)得到命令的输出
$(pidof pidof com.android.browser)等价于`pidof pidof com.android.browser`
3)变量的运算
let方式:let a+=1
(())双小括号:((a+=1))
[]中括号,等价于(()):[a+=1]
参数变量:
$# 参数的个数
$@或者$* 所有参数的集合
$0 当前脚本的文件名
$n 传给脚本的第n个参数
$$ 当前shell进程的ID
$? 上个命令的退出状态或函数的返回值
例:执行脚本sh test.sh 3 4 5
$#: 3
$@: 3 4 5
$0:test.sh
$13
$24
$35

shell脚本从标准输入读取
1)用于从标准输入读取
read -p "input name:" name
read -p "input passwd" passwd
echo $name
echo $passwd
2)暂停
read -p "pause"

shell脚本延时
sleep 1 睡眠1秒
sleep 1s 睡眠1秒
sleep 1m 睡眠1分
sleep 1h 睡眠1小时

重定向
>     覆盖
>>    追加
2>&1  STDERR(标准错误输出)重定向到STDOUT(标准输出)
例:
command 2 > filename 把标准错误输出重定向到一个文件中
command 2 >> filename 把标准错误输出重定向到一个文件中(追加)
command > filename 2>&1 把标准输出和标准错误输出一起重定向到一个文件
command >> filename 2>&1 把标准输出和标准错误输出一起重定向到一个文件中(追加)

if--条件执行
基本格式:
if [ command ];then
符合该条件执行的语句
elif [ command ];then
符合该条件执行的语句
else
符合该条件执行的语句
fi
注意:
1.[ ]表示条件测试,符号前后要存在空格(包括比较符号>、<、-lt等的前后也要存在空格)
2.ifthen、fi是分开的语句,所以在同一行输入时要用分号隔开
3.使用[ ]时需要对 > < 进行转义"\>""\<",否则 shell 会把它们当做重定向符号而把字符串值当做文件名
1)数值比较:
小于:-lt 小于等于:-le 大于:-gt 大于等于:-ge 等于:-eq 不等于:-ne
例:if [ $a -lt $b ]
小于:< 小于等于:<= 大于:> 大于等于:>= 等于:== 不等于:!=
例:if(( $a < $b ))
2)字符串比较
字符串长度为0 if [ -z $str ]
字符串长度非0 if [ -n $str ]
字符串相同 if [ $str1 == $str2 ]
字符串不同 if [ $str1 != $str2 ]
检查str1是否比str2小 if [ $str1 \< $str2 ]
检查str1是否比str2大 if [ $str1 \> $str2 ]
3)文件或目录判断
文件存在 if [ -e $file ]
文件非空 if [ -s $file ]
目录存在 if [ -d $file ]
4)复合条件
A)if [ condition1 ]&&[ condition1 ] 必须都满足
B)if [ condition1 ]||[ condition1 ] 满足一种即可

case--条件执行
a=4
case $a in
1|2)
echo 1
;;
3)
echo 3
;;
*)
echo other
;;
esac
注意:
1.*)相当于其他语言中的default。
2.除了*)模式,各个分支中;;是必须的,;;相当于其他语言中的break
3."|"分割多个模式,相当于or

for--循环
基本格式:
for 变量 in 取值列表
do
各种操作
done
1)枚举:
for i in 5 2 3 4 2
do
echo $i
done
2)迭代方式1--数字迭代{1..10}或字母迭代{a..z}:
for i in {1..10..2}或{a..z..1} #{首数 尾数 增量}
do
echo $i
done
3)迭代方式2--seqfor i in $(seq 1 2 10) #seq 尾数、seq 首数 尾数、seq 首数 增量 尾数
do
echo $i
done
4)C语言风格:
for((i=0;i<10;i++))
do
echo $i
done

while--循环
i=0
while((i++<5))
do
echo $i
done

函数
function fun()
{
local a=$1
let a=$1+1
echo $a
return 0
}

fun 2
echo return $?
注:function关键字可以省略但不建议,return可以返回的值是0-255

xargs
使用场景:
很多命令可以通过管道'|'来接收命令,如:ps -ef|grep logcat,但是有些命令只能以命令行参数的形式接收数据,这个时候就需要用xargs,如:pidof logcat|xargs kill -9
选项与参数:
-n:每行最大参数数量n
-d:指定分隔符,xrags -d x -n 3
实例:
1)多行->单行
# cat example.txt
1 2 3 4 5 6
7 8 9 10
11 12
# cat example.txt|xrags
1 2 3 4 5 6 7 8 9 10 11 12
2)单行->多行
# cat example.txt
1 2 3 4 5 6 7 8 9 10 11 12
# cat example.txt|xrags -n 3
1 2 3
4 5 6
7 8 9
10 11 12
3)指定分隔符来分隔
# echo "splitXsplitXsplitXsplit" | xargs -d X -n 2
split split
split split

find--文件查找工具(默认遍历所有子目录)
基本格式:find 路径 <选项> 参数
1)-name 基于文件名搜索(-iname忽略大小写)
find . -name "*.txt" 搜索当前目录及子目录以.txt结尾的文件
2)-type 基于文件类型搜索(参数:f普通文件,d目录)
find /home -type f
3)基于目录深度搜索(选项:最大深度-maxdepth和最小-mindepth)
find ./ -maxdepth 3 -mindepth 3
4)基于文件时间戳搜索
访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间
find ./ -type f -atime -7 最近七天内被访问过的文件
find ./ -type f -atime 7 恰好七天前被访问过的文件
find ./ -type f -amin +7 访问时间超过7分钟的文件
5)组合查找文件(-o或,!非)
find /home -type f -name "file1*" -o -name "file2*" 搜索以file1或file开口的文件
find /home -type f -name "file1*" ! -name "*.txt" 搜索以file1开口并且不是.txt结尾的文件

grep--字符串搜索工具
基本格式:grep [options] 关键字 文件名/(文件目录:只适用-r选项)
选项与参数:
-c:显示匹配次数
-i:忽略大小写
-n:显示行号
-o:只显示匹配到的部分
-w:完全匹配字符串
-A:搜出关键字以后,还可以向下打印指定的行数,后面接要打印的行数
-B:搜出关键字以后,还可以向上打印指定的行数,后面接要打印的行数
1grep or操作符
A)-E
grep -E "logcat|logd" filename
B)egrep 等价于 grep -E
ps -ef|egrep "logcat|logd"
C)-e 只能传递一个参数
ls -ef|grep -e "logcat" -e "logd"
2grep and操作符
grep -E "strin1.*string2" filename
[注]:string1与string2的顺序是指定的,如果希望是乱序的
可以写成:grep -E "strin1.*string2|strin2.*string1" filename
或者:grep "strin1" filename|grep "string2"
3grep not操作符,反向匹配
grep -v "strin1" filename 输出不包含string1的所有项
4)在多个文件中搜索关键字
grep "string1" filename1 filename2 filename3...
5)-r 递归搜索
grep -r "string1" file
排除指定文件:grep -r "string1" file --exclude=filename
排除多个文件:grep -r "string1" file --exclude={filename1,filename2...}
排除指定目录:grep -r "string1" file --exclude-dir=file1
排除多个目录:grep -r "string1" file --exclude-dir={file1,file2...}

sed命令
基本格式:sed [options] [n1[,n2]]function files
选项与参数:
-n:只打印sed处理过的行
-e:多个编辑命令,sed -e function -e function files
-i:直接修改文件,不输出终端
动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表选择进行动作的行数
!:反向选择,放在n1,n2之后和function之前,用于字符串反向匹配等
function:
a:指定行后新增行
c:以行为单位取代
d:删除
i:指定行前插入行
p:打印匹配行,通常-n一起
s:替换字符串,s/oldstring/newstring/g,g指全局,否则只匹配一次
1)增
第二行的下一行增加"drink tea"
sed '2a drink tea' test.txt
第二行的上一行增加"drink tea"
sed '2i drink tea' test.txt
新增多行(
行)
sed '2a drink tea
drink beer' test.txt
2)删
删除2-5行
sed '2,5d' test.txt
删除3到最后一行
sed '3,$d' test.txt
3)改
以行为单位替换,将2-5行的整个内容改为"no 2-5 number"
sed '2,5c no 2-5 number' test.txt
替换指定的字符串
sed 's/oldstring/newstring/g' test.txt
注:最后需加g,不带g的话,只匹配一次,后面的不管
4)查
查找含有字符串的行,并打印
sed -n '/string/p' test.txt
查找多个字符串,并打印
sed -n '/string1/{/string2/p}' test.txt //同时含有string1和string2
sed -n '/string1/{/string2/{/string3/p}}' test.txt //同时含有string1,string2和string3
sed -n '/string1\|string2\|string3/p' test.txt //含有string1或string2或string3
查找不含某字符串的行,并打印
sed -n '/string1/{/string2/!p}' test.txt //打印含string1但不含string2的行
注:不使用-n会打印所有行
查找含有字符串的行,并删除
sed '/string/d' test.txt

awk命令
基本格式:awk [-F|-f|-v] 'BEGIN{} //{command1; command2} END{}' file
选项与参数:
-F:指定域分隔符,默认空格和tab,用法awk -F ":"或awk -F:
打印参数:
$0 所有域
$1 第一个域
NF 域的个数
NR 行号
实例:
1)打印域
awk '{print $1,$2}' test.txt
2)打印含有string的行
awk '/sting/' test.txt
awk '/sting/{print}' test.txt
awk '/sting/{print $0}' test.txt //三条指令效果一样
3)打印不含有string的行
awk '!/sting/' test.txt
4)匹配多个字符串
awk '/sting1/&&/string2/' test.txt //同时含有sting1和sting2
awk '/sting1/||/string2/' test.txt //含有sting1或sting2
5)只有找到了string的行,再打印第一和第二个域
awk '/string/{print $1,$2}'
6)打印剩余空间大于1000k的盘
df -k|awk '$4>1000'
7)格式化输出
$ date
2005年04月30日 星期六 19时29分25秒
$ date|awk '{print "Date:" $1 "
ime:" $3}'
Date:2005年04月30日
Time:19时29分25秒
复制代码

 

 
 
posted @   jason8826  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示