参考资料
正点原子:http://www.openedv.com/docs/boards/arm-linux/zdyz-i.mx6ull.html
1 linux 命令
1.1 fdisk命令
1.1.1 查看分区
fdisk -l显示磁盘分区使用情况
1.1.2 删除分区
fdisk /dev/sdb1 用来对sdb1进行分区:
输入m表示获取帮助,默认有分区sdb1, 然后输入d删除分区1,p打印出分区表,i表示打印出详细分区信息,n表示新增分区信息,w表示保存,q表示退出。
来看dev/sd*信息,发现已经没有了sdb1
1.1.3 创建分区
再来看如何建立分区1:
先建立一个1GB的分区,1GB= 1024 * 1024 * 1024=1073741824 B = 2097152 个sector,一个sector有512 byte,再加上2048 个sector,那么等于2099200个sector。
再来何建立分区2:
这里First sector使用默认值2101248,Last sector使用4198400(1G是2097152, 2101248 + 2097152 = 4198400),分区2也是1GB
再来何建立分区3:
First sector和Last sector使用默认,那么最终分区3有26.8GiB。
最后输入w保存退出,来看下分区:
1.2 磁盘格式化命令
mkfs命令用来对磁盘分区格式化,将格式化好的sd卡放入windows系统查看,可以看到3个盘。
1.2.1 mount
1.3 du命令
1.4 df命令
1.5 xargs命令
find -name \*.sh |xargs grep -rn "build_all"
1.6 find
按时间搜索:
-atime 访问时间 (单位是天,分钟单位则是-amin,以下类似)
-mtime 修改时间 (内容被修改)
-ctime 变化时间 (元数据或权限变化)
最近7天被访问过的所有文件:
find . -atime 7 -type f -print
最近7天被修改的文件:
find . -maxdepth 2 -mtime 7 -type f
通配符
一版find命令还会伴随通配符使用:
*:匹配任意多个字符
?:匹配任意一个字符
[...]:匹配中括号内出现的任意一个字符
[!...]:不匹配中括号内出现的任意一个字符
find . -name *.txt
find -name *.[ch]
$ find -name *fsi*.? #查找包含fsi字符,同时又有.c或者.h等单个字符后缀的文件
./i2c/busses/i2c-fsi.c
./spi/spi-fsi.c
./input/joystick/fsia6b.c
./fsi/fsi-sbefifo.c
./fsi/fsi-master-ast-cf.c
./fsi/fsi-master-aspeed.c
./fsi/fsi-master.h
./fsi/fsi-occ.c
./fsi/fsi-master-hub.c
./fsi/fsi-master-gpio.c
./fsi/fsi-core.c
./fsi/fsi-scom.c
./fsi/cf-fsi-fw.h
[a-z] :所有小写字母。
[a-zA-Z] :所有小写字母与大写字母。
[!a-zA-Z] :表示匹配非英文字母的字符。
[a-zA-Z0-9] :所有小写字母、大写字母与数字。
[abc]* :所有以 a 、 b 、 c 字符之一开头的文件名。
program.[co] :文件 program.c 与文件 program.o 。
BACKUP.[0-9][0-9][0-9] :所有以 BACKUP. 开头,后面是三个数字的文件名。
伴随执行任务
# 找到后执行删除
find . -name "*.txt" -exec rm {} \;
1.6 grep命令
find /path/to/directory -type f -name "*.txt" | grep "keyword"
-w 全词匹配。
-v 反向搜索
-i 不区分大小写
$匹配以字符串结尾的行
^ 匹配以字符串开头的行
找出空行 grep "^$" test.txt -n
找出unix开头的行grep "^unix" geekfile.txt
找出.结尾的行 grep "\.$" test.txt -n -o
找出os.结尾的行,grep "os.$" geekfile.txt
[abc]中括号
匹配abc字符中的任意一个
匹配a-z
下面一个脚本用grep -v排除掉不需要的行,也就是删除包含指定字符的行从一个文件。
#!/bin/bash
# 定义要删除的特定字符
pattern="特定字符"
# 定义要处理的文件名
filename="文件名"
# 使用grep命令找到含有特定字符的行,并将结果输出到一个临时文件中
grep -v "$pattern" "$filename" > temp.txt
# 将临时文件的内容复制回原始文件
cat temp.txt > "$filename"
# 删除临时文件
rm temp.txt
uniq 删除重复行
tr字符串替换
1.6 awk数据流处理
常用的就是提取文件中的列字段,比如提取file中的第二个和第三个字段。
awk '{print $2, $3}' file
1.7 网络命令
ifconfig eth0 up/down
udhcpc -i eth0 //通过路由器分配 IP 地址
ifconfig eth0 192.168.1.251 netmask 255.255.255.0 //设置 IP 地址和子网掩码
route add default gw 192.168.1.1 //添加默认网关
2 shell命令
2.1 解释器
- sh解释器
- bash解释器
脚本开头用#!用来申明用什么解释器,如:
2.2 段代码注释
<<EOF
...
EOF
read命令
test命令
测试文件,数值,权限,字符串等参数。
中括号也能表示测试,里面只能用==或!=
文件测试
比较测试
多重条件测试
可以看到第一和第三条test都成立:
命令行参数
$0, $1, $2, $3...
$0表示脚本文件名
$1表示第一个参数
$n表示第n个参数
$#表示一共有多少个命令行参数
$@表示所有的命令行参数集合,$0 $1 $2 ... $n
$*表示等价$@
$?表示上一条命令是否返回成功,成功为0,错误非0
$$表示当前脚本的进程号
条件语句
case语句
函数
循环
数组
用括号来表示数组,数组元素用“空格”符号分割开:
array_name=(value0 value1 value2 value3)
array_name=(
value0
value1
value2
value3
)
#还可以每个元素进行定义,可以不使用连续的下标,而且下标的范围没有限制。
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
#读取数组
val=${array_name[2]}
all=${array_name[*]}
all2=${array_name[@]}
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
2.3 typeset或者declare
sh脚本默认所有变量都是字符串,比如val=1,也表示val是一个字符串“1”。那么需要如何声明一个变量类型,用typeset或者declare。
typeset -i data=1
2.4 unset
清除变量值
2.5 readonly
只读变量
2.6 sed
2.6.1 目录递归替换字符
find /path/to/dir -type f -name "*.[c-h]" -exec sed -i 's/oldstring/newstring/g' {} +
find /path/to/dir:找到指定目录/path/to/dir下的所有文件。
-type f:仅查找文件。
-name "*.txt":限制文件名以.txt结尾。
-exec:对找到的每个文件执行后面的命令。
sed -i:使用sed进行替换,-i表示直接修改文件内容。
's/oldstring/newstring/g':sed的替换表达式,g表示全局替换。
{}:表示find找到的文件名。
+:结束-exec命令,批量处理匹配到的文件。
2.6.2 去掉一行中多余的空格
sed -i 's/[[:space:]]\+/ /g' array.sh
s/[[:space:]]\+/ /g
是替换命令,它会将一个或多个空白字符(包括空格、制表符等)替换为单个空格.
2.7 shell脚本如何查看将要执行的命令
#!/bin/sh
set -x
echo "Hello, World!"
2.8 字符串中替换一个字符
string="123123"
echo ${string/3/0} #用0替换第一个遇见的3
echo ${string//3/0} #用0替换串中所有3
2.9 算数运算符
2.10 重定向
$who
weiyong.luo pts/1130 2024-09-21 12:12 (xxx.xxx.xxx.xxx)
shawn.wu pts/1036 2024-09-11 17:48 (xxx.xxx.xxx.xxx)
weiyong.luo pts/1133 2024-09-21 12:12
robin.lee pts/1134 2024-09-21 15:23
chengzhi.lian pts/1135 2024-09-21 09:02
robin.lee pts/1166 2024-09-20 18:15
who >users ##输出重定向到users文件
#再看输入重定向
#从文件获取输入信息给命令。
$ wc -l < users #统计users文件的行数
12
2.10.1 保存log到文本
make all > build_osdrv.log 2>&1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App