嵌入式Linux学习笔记-基础知识篇
常用命令
常用命令汇总
命令 | 功能 | 其他 | |
---|---|---|---|
pwd | 打印当前路径 | ||
cd | 切换路径 | ||
mkdir | 创建文件夹 | ||
rmdir | 删除文件夹 | ||
ls | 列出目录内容 | ls -a(显示隐藏文件);ls -l(显示详细信息) | |
cp | 复制 | cp 1.txt 12.txt; cp -frd | |
rm | 删除 | rm -rf | |
cat | 打印文件内容 | ||
mv | 移动文件/重命名 | ||
touch | 修改文件时间/创建空文件 | ||
find | 按照文件名查找 | ||
grep | 按照文件内容名查找 | ||
clear | 清屏 | ||
sudo | 临时切换 root 用户 | ||
ifconfig | 查看网/修改络信息 | ||
reboot | 重启系统 | ||
poweroff | 关机 | ||
man | 打开帮助信息 | ||
sync | 数据同步写入磁盘 | ||
du | 查看文件大小 | ||
df | 磁盘空间检测 | ||
ps | 查看当前进程 | ||
top | 查看进程实时运行状态 | ||
file | 查看文件类型 |
文件常用操作
命令 | 功能 | 其他 | |
---|---|---|---|
pwd | 打印当前路径 | ||
cd | 切换路径 | ||
mkdir | 创建文件夹 | ||
rmdir | 删除文件夹 | ||
ls | 列出目录内容 | ls -a(显示隐藏文件);ls -l(显示详细信息) | |
cp | 复制 | cp 1.txt 12.txt; cp -frd | |
rm | 删除 | rm -rf | |
cat | 打印文件内容 | ||
mv | 移动文件/重命名 | ||
touch | 修改文件时间/创建空文件 | ||
tar | 压缩/解压 | ||
mv
1 | mv file.txt /home/user/Documents/ |
文件查找
命令 | 功能 | |
---|---|---|
find | 按照文件名查找 | |
grep | 按照文件内容名查找 |
find
1 | find -name 1.txt |
grep
1 | grep "abc" * |
压缩命令
命令 | 功能 | |
---|---|---|
gzip | ||
bzip2 | ||
tar |
压缩命令
1 | dd if=/dev/zero of=test bs=1024 count=1024 |
解压命令**
1 | gzip -dk test.gz # -k 保留之前的文件 |
Vi 编辑器
1 | gedit 1.txt |
用户与组
1 | adduser --help |
文件权限管理
r
可读文件w
可写文件x
可执行文件-rw-rw-r--
本用户-组内其他用户-其他组用户的权限
修改文件权限
rwx
每个权限激活为 1
,二进制表示
111
,十进制表示为 7
1 | chmod 664 hello |
修改文件所属的用户
1 | sudo chown root hello # 修改用户 |
链接文件
- 符号链接
- 符号链接需要使用绝对路径
- 原文件删除后符号链接不能使用
- 硬链接
- 只有硬链接的文件全都删除才算删除该文件
- 修改硬链接的随意一个文件,其他文件都被修改
- 硬链接不能跨文件系统
1 | ln -s /home/book/hello ./abc/hello1 # 符号链接 |
Makefile与make
Makefile
文件是让 gcc
编译工具以一定的规则来进行编译文件
gcc -c
只编译文件,不产生链接gcc -o
指定链接的输出文件名,可以生成可执行文件,也可以指定目标文件名
1 | 例子 |
main
需要
main.o input.o add.o
,都有则执行下一句,gcc main.o input.o add.o -o main
,没有的话找下面有
main.o
的地方,生成 main.o
,以此类推。当
input.c
比 input.o
要新时,会重新编译
input.c
。
makefile01
1
2
3
4
5
6
7
8
9
10
11main: main.o input.o add.o
gcc main.o input.o add.o -o main
main.o: main.c
gcc -c main.c
input.o: input.c
gcc -c input.c
add.o: add.c
gcc -c add.c
clear:
rm *.o
rm mainmakefile02
1
2
3
4
5
6
7
8object = main.o input.o add.o
main: $(object)
gcc -o $(object)
.o: %.c
gcc -c $<
clear:
rm *.o
rm mainmakefile03
1
2
3
4
5
6
7
8
9object = main.o input.o add.o
main: $(object)
gcc -o $(object)
.o: %.c
gcc -c $<
.PHONY:clear
clean:
rm *.o
rm mainmakefile04
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对象文件列表
object := main.o input.o add.o
生成可执行文件
main: $(object)
gcc -o $@ $(object)
生成依赖文件列表
dep_files := $(foreach f, $(object), .$(f).d) # foreach 循环生成 .main.o.d
dep_files := $(wildcard $(dep_files)) # wildcard 把存在的文件列出来
如果有依赖文件,包含它们
ifneq ($(dep_files),)
include $(dep_files)
endif
编译规则,生成 .o 和 .d 文件
.o: %.c
gcc -Wp,-MD,.$@.d -c $< -o $@
清理
.PHONY: clean
clean:
rm *.o
rm .*.d
rm main执行
Makefile
文件,输入以下代码1
2make Makefilr
make
Makefile 语法
变量与引用变量
1
2object = main.o input.o add.o
main: $(object)将变量的最新值进行赋值给其他变量
1
2
3name = xxh
newname = $(name) # newname = xxh1230
name = xxh1230:=
1
2
3name = xxh
newname := $(name) # newname = xxh
name = xxh1230?=
若变量之前没有赋值,则赋=后的值1
newname ?= xxh1230 # newname = xxh1230
%
通配符,相当于正则表达式里面的*
,$@, $<, $^
自动化变量$@
目标集$^
所有的依赖对象集$<
依赖对象集中的第一个
1
2
3
4
5
6main : main.o func1.o func2.o
$@ = main
$^ = main.o func1.o func2.o
$< = main.o
.o: %.c
gcc -c $<.PHONY:clear
声明伪目标,防止文件夹里面有同名的文件导致程序没有执行1
2
3.PHONY:clear
rm *.o
rm main$(foreach <var>;,<list>;,<text>;)
函数1
2
3object := main.o input.o add.o
判断是否存在依赖文件
dep_flies := $(foreach f, $(object), .$(f).d) # foreach 循环生成 .main.o.d$(wildcard pattern)
函数1
2dep_flies := $(foreach f, $(object), .$(f).d)
dep_flies := $(wilcard, $(dep_flies)) # pattern 把存在的文件列出来
Automake 的用法
shell
简单的shell
1
2!/bin/bash
echo "hello world"定义变量
1
2
3
4!/bin/bash
echo "please input name"
read name
echo "your name:" $name定义双变量
1
2
3!/bin/bash
read -p "please input your name and age" name age
echo "your name: $name, your age: $age"变量运算
1
2
3
4
5
6!/bin/bash
echo "please input two int number"
read -p "first number:" x1
read -p "second number:" x2
y=$(($x1+$x2))
echo "$x1 + $x2 = $y"test 与 && 与 ||
test -e
检测文件是否存在a && b
a 成立则执行 ba || b
a 不成立则执行 b
1
2
3
4!/bin/bash
echo "please input file name"
read -p "file name:" name
test -e $name && echo "$name exit" || echo "$name not exit" #1
2
3
4
5!/bin/bash
echo "please input two string"
read -p "file string:" str_1
read -p "second string:" str_2
test $str_1 == $str_2 && echo "$str_1=$str_2" || echo "$str_1!=$str_2" # == 两边有空格[]
判断符1
2
3
4
5!/bin/bash
echo "please input two string"
read -p "file string:" str_1
read -p "second string:" str_2
[ "$str_1" == "$str_2" ] && echo "$str_1=$str_2" || echo "$str_1!=$str_2" # 靠近 [] 两边有空格默认变量
$0 - $n
$0表示 本身命令 $1 - $n 表示传入的参数$#
表示最后一个参数的序号$@
表示 $1 - $n 所有传入的参数
1
2
3
4
5
6!/bin/bash
echo "file name" $0
echo "total param num" $#
echo "first param num" $1
echo "second param num" $2
echo "whole param num" $@条件判断
if then fi
1
2
3
4
5
6
7
8
9
10!/bin/bash
read -p "please input [y/n]" val
if [ $val == "y" ] || [ $val == "Y" ]; then
echo "you input is y"
exit 0
fi
if [ $val == "n" ] || [ $val == "N" ]; then
echo "you input is n"
exit 0
fi条件判断
if then else fi
1
2
3
4
5
6
7
8
9!/bin/bash
read -p "please input [y/n]" val
if [ $val == "y" ] || [ $val == "Y" ]; then
echo "you input is y"
exit 0
else
echo "you input is $val"
exit 0
fi条件判断
if then elif then else fi
1
2
3
4
5
6
7
8
9
10
11!/bin/bash
read -p "please input [y/n]" val
if [ $val == "y" ] || [ $val == "Y" ]; then
echo "you input is y"
exit 0
elif [ $val == "n" ] || [ $val == "N" ]; then
echo "you input is n"
exit 0
else
echo "you input can't identify"
ficase
1
2
3
4
5
6
7
8
9
10
11
12!/bin/bash
case $1 in
"a")
echo "you input is a"
;;
"b")
echo "you input is b"
;;
*)
echo "you input is $1"
;;
esac函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15!/bin/bash
function help(){
echo "this is help cmd"
}
function close(){
echo "this is close cmd"
}
case $1 in
"-h")
help
;;
"-c")
close
;;
esac函数传参
1
2
3
4
5
6!/bin/bash
print(){
echo "param 1: $1"
echo "param 2: $2"
}
print a bwhile do done
与until do done
1
2
3
4
5
6!/bin/bash
while [ "$val" != "close" ] # 匹配多个字符串需要加""
do
read -p "please input string:" val
done
echo "stop while!!"for do done
1
2
3
4
5!/bin/bash
for name in xxh1 xxh2 xxh3
do
echo "your name: $name"
done1
2
3
4
5
6
7
8!/bin/bash
read -p "please input count:" val
total=0
for ((i=0; i<=$val; i++))
do
total=$(($i+$total))
done
echo "1+2+...+$val=$total"