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 $1:3 $2:4 $3:5 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.if、then、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--seq: for 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:搜出关键字以后,还可以向上打印指定的行数,后面接要打印的行数 1)grep 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" 2)grep and操作符 grep -E "strin1.*string2" filename [注]:string1与string2的顺序是指定的,如果希望是乱序的 可以写成:grep -E "strin1.*string2|strin2.*string1" filename 或者:grep "strin1" filename|grep "string2" 3)grep 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秒
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律