fuzidage
专注嵌入式、linux驱动 、arm裸机研究

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

参考资料

正点原子:http://www.openedv.com/docs/boards/arm-linux/zdyz-i.mx6ull.html

1 linux 命令

1.1 fdisk命令

1.1.1 查看分区

fdisk -l显示磁盘分区使用情况
image

1.1.2 删除分区

fdisk /dev/sdb1 用来对sdb1进行分区:
image

输入m表示获取帮助,默认有分区sdb1, 然后输入d删除分区1,p打印出分区表,i表示打印出详细分区信息,n表示新增分区信息,w表示保存,q表示退出。
image
来看dev/sd*信息,发现已经没有了sdb1
image

1.1.3 创建分区

再来看如何建立分区1:
先建立一个1GB的分区,1GB= 1024 * 1024 * 1024=1073741824 B = 2097152 个sector,一个sector有512 byte,再加上2048 个sector,那么等于2099200个sector。
image
再来何建立分区2:
image
这里First sector使用默认值2101248,Last sector使用4198400(1G是2097152, 2101248 + 2097152 = 4198400),分区2也是1GB
再来何建立分区3:
image
First sector和Last sector使用默认,那么最终分区3有26.8GiB。
最后输入w保存退出,来看下分区:
image
image
image

1.2 磁盘格式化命令

mkfs命令用来对磁盘分区格式化,将格式化好的sd卡放入windows系统查看,可以看到3个盘。
image
image

1.2.1 mount

image

1.3 du命令

image

1.4 df命令

image

1.5 xargs命令

find -name \*.sh |xargs grep -rn "build_all"
image

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字符中的任意一个
image
匹配a-z
image

下面一个脚本用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 解释器

  1. sh解释器
  2. bash解释器
    脚本开头用#!用来申明用什么解释器,如:

image

2.2 段代码注释

<<EOF
...
EOF

image

read命令

image

test命令

测试文件,数值,权限,字符串等参数。
image
image
中括号也能表示测试,里面只能用==或!=
image

文件测试

image

比较测试

image

多重条件测试

image
image

可以看到第一和第三条test都成立:
image

命令行参数

$0, $1, $2, $3...
$0表示脚本文件名
$1表示第一个参数
$n表示第n个参数
$#表示一共有多少个命令行参数
$@表示所有的命令行参数集合,$0 $1 $2 ... $n
$*表示等价$@
$?表示上一条命令是否返回成功,成功为0,错误非0
$$表示当前脚本的进程号

image

条件语句

image

case语句

image

函数

image
image
image

循环

image
image
image

数组

用括号来表示数组,数组元素用“空格”符号分割开:

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 算数运算符

image

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

posted on   fuzidage  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
 
点击右上角即可分享
微信分享提示