嵌入式Linux基本命令及常用命令
嵌入式Linux基本命令及常用命令
一、Linux系统中文件层次结构
/ 为根目录
/bin 存放命令的:bin是二进制英文的缩写
/boot 系统启动装载引导程序:存放系统启动时需要用到的程序
/dev:包含了所有Linux系统中使用的外设
/etc:存放了系统管理时要用到的各种配置文件
/lib:存放系统动态链接共享库
/home:普通用户主目录(家目录)
/root:根用户(超级用户)的主目录
二、Linux基本命令
1.cd 跳转指令
cd +路径
绝对路径:
cd /mnt/hgfs 以/(根目录)开头的路径
相对路径:
cd share
. 当前的工作目录
.. 上一级目录
2.ls 列表指令
ls -a (all)
ls -l
3.cp 复制指令
cp 带复制路径的文件名 你要复制到哪里去
cp -r 复制文件夹
ps:补全键 Tab
4.mv 移动指令 (剪切)
mv 带移动路径的文件名 你要移动到哪里去
mv 可以也可以用做重命名
5.mkdir(make directory 创建目录)
mkdir -p 级联创建文件夹
6.rm remove 删除指令
rm + 文件名
rm + -rf +目录名
7.touch 创建文件或更新时间戳
8.cat指令 显示文件的内容
cat -s:多个空行和并成一个空行
cat -b:加行号显示
9.head命令和tail命令
head -n 文件名 :表示查看文件前n行
tail -n 文件名 :表示查看文件倒数n行
10.gcc 命令
gcc -o
gcc 1.c -o 1
gcc 1.c
gcc 1.c -o 1 -Wall:加了-Wall会提示语法错误
gcc -E -o 只预处理,不会编译、汇编、链接
gcc -E -o hello.i hello.c
gcc -S -o 只编译,不会汇编、链接
gcc -S -o hello.s hello.i
gcc -c -o 编译和汇编,不会链接
gcc -c -o hello.o hello.s
gcc -o hello hello.o 输出可执行文件
小结:
1)输入文件的后缀名和选项共同决定gcc到底执行哪些操作
2)在编译过程中,除非使用了-E、-S、-c选项(或者编译出错阻止了完整的编译过程)
否则最后的步骤都是链接
ps:链接就是将汇编生成的OBJ文件、系统库的OBJ文件、库文件链接起来,最终生成可以在特定平台运行的可执行程序。
crt1.o、crti.o、crtbegin.o、crtend.o、crtn.o是gcc加入的系统标准启动文件,对于一般应用程序,这些启动是必需的。
-lc:链接libc库文件,其中libc库文件中实现了printf等函数。
gcc -v -nostdlib -o hello hello.o 会提示因为没有链接系统标准启动文件和标准库文件,而链接失败。
-nostdlib选项常用于裸机/bootloader/linux内核等程序,因为它们不需要启动文件,也不需要标准库文件。
一般应用程序才需要启动文件和标准库文件.
sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4
arm gcc (在ARM环境下编译)
./a.out :表示执行程序
Makefile文件
1、当”目标文件“不存在 或 某个依赖文件比目标文件”新“ ,则执行”命令“
2、Makefile的语法
a.通配符:%.o
$@ 表示目标文件(即.o输出文件)
$< 表示第一个依赖文件
$^ 表示所有的依赖文件
b.假想目标: .PHONY: (防止有同名文件影响make的执行)
c.即时变量、延时变量,export
简单变量(即时变量):
A := xxx #A的值即刻确定,在定义时即确定(即时变量)
B = xxx #B的值使用到时才确定(延时变量)
?= xxx #延时变量,如果是第一次定义才起效,如果在前面该变量已定义则忽略
+= xxx #附加,它是即时变量还是延时变量取决于前面的定义
A := $(C)
B = $(C)
C = abc
all:
@echo A = $(A)
@echo B = $(B)
#输出
A =
B = abc
#ps: $() 表示引用变量
3、Makefile函数
a.$(foreach var,list,text)
A = a b c
B = $(foreach f, $(A), $(f).o)
#输出
a.o b.o c.o
b.$(filter pattern…,text) #在text中取出符合pattern格式的值
$(filter-out pattern…,text) #在text中取出不符合pattern格式的值
A = a b c d/
B = $(filter %/, $(A))
C = $(filter-out %/, $(A))
#输出
B = d/
C = a b c
c.$(wildcard pattern) #pattern定义了文件名的格式,wildcard取出其中存在的文件
1、
files = $(wildcard *.c)
#输出
#会打印此文件夹下所有后缀为.c的文件名
2、
file = a.c b.c c.c
files = $(wildcard $(file))
#输出
#会打印Makefile所在文件夹下与file同名的文件
d.$(patsubst pattern, replacement, $(var)) #从列表中取出每一个值,如果符合pattern,则替换为replacement
file = a.c b.c c.c
files = $(patsubst %.c, %.o, $(file))
#输出
#把传入形参(file)中后缀为.c的文件全部替换成后缀为.o的文件
files = a.o b.o c.o
4.Makefile实例
a.改进:支持头文件依赖
gcc -M c.c //打印出依赖
gcc -M -MF c.d c.c //把依赖写入文件c.d
gcc -c -o c.o c.c -MD -MF c.d //编译c.o,把依赖写入文件c.d
b.添加CFLAGS
c.分析裸板Makefile
11.pwd 命令
显示当前所在位置
12.vi 命令
命令行模式:vi + 文件名
插入模式: 进入界面按(A a,I i,O o)一般为i
a:光标后移一位
i:光标位置不变
o:光标下插入新的行
A:把光标移到所在行的最后面
I:把光标移到所在行的最前面
O:光标上插入新的行
底航模式:编辑完成后按esc
:q:退出未修改的文件
:q!:强制退出,不保存修改部分
:w:保存文件
:w FILE:不退出,当前文件另存为别的文件名
:x:保存并退出
:r FILE:把FILE中的内容读到当前文件中
vi中复制与黏贴
y0:复制光标至行首的字符
y$:复制光标至行尾的字符
rang y:1,$y(表示复制全文)(可用于复制特定行)
[N]dd:剪切(N代表几行)
[N]yy:复制
小写p:黏贴到当前光标的下一行
大写P:黏贴到当前光标的上一行
u:撤销
光标命令
h:相当于左 (H在左边)
j:相当于下 (J很像↓)
k:相当于上
l:相当于右 (I在右边)
:[N]:光标跳转到某一行
1G:跳掉第一行
G:跳到最后一行
:set nu:加行号
:set nonu:去掉行号
查找命令
/ + 想要查找的函数
n:往下查找下一个
N:往上查找下一个
ps:查找命令支持正则表达式
替换命令
:/s/old/new (表示old替换为new)
:.,$s/ole/new (表示从当前位置到文件末尾把第一个old替换为new)
:.,$s/ole/new/g (表示从当前位置到文件末尾把所有old替换为new)
:1,$s/ole/new/g (表示全文的old替换为new) 等同于 :%s/ole/new/g
三、linux常用命令
1、find [路径] [类型] [名称] (用于查找文件)
find . -name “*.txt” (找到当前路径下所有后缀为.txt的文件)
find . -mtime -2 (找到当前路径下所有2天之内修改过的文件)
2、grep [选项] [查找模式] [文件名]
grep -rn “abc” * ( -r(递归查找) -n(显示行号) 表示递归查找当前目录下文件中有"abc"字符串的文件)
-w 全字匹配
3、file [文件名] (识别文件类型)
file ~/.bashrc 为ASCII 编码的text类型
file ~/.vimrc 为UTF-8 Unicode 编码的text类型
file ~/Pictures/* 如图形文件JPEG/PNG/BMP格式
file [文件名] 为directory表明这是一个目录
file /bin/pwd 出现ELF 64-bit LSB,即为ELF格式的可执行文件
file /dev/* 出现character special(字符设备文件) block special(块设备文件)
4、which 和 whereis [命令名/应用程序名] (查找命令或应用程序所在位置)
举例:
which pwd 定位到/bin/pwd
which gcc 定位到/usr/bin/gcc
whereis 查找到可执行程序的位置和手册页的位置
5、常用压缩命令
单个文件解压缩使用 gzip 和 bzip2
多个文件和目录使用 tar
gzip常用选项
-l(list) 列出压缩文件的内容 (bzip2没有这个选项)
-k(keep) 在压缩文件解压时,保留输入文件
-d(decompress) 将压缩文件进行解压缩
1)查看文件内容 gzip -l [文件名]
2)解压文件 gzip -kd [文件名]
3)压缩文件 gzip -k [文件名]
ps:如果gzip不加任何选项,此时为压缩,压缩完文件会生成后缀为.gz的压缩文件,并删除原有的文件
若文件名不同,解压出来的大小也不一样
一般情况下,小文件使用gzip压缩,大文件使用bzip2压缩
多文件tar打包,gzip压缩 (bzip2压缩只需要把z改成j就行了)
tar -czvf [压缩文件名] [目录名]
ps: tar -czvf 和 tar czvf效果是一样的
查看
tar tvf [压缩文件名]
解压
tar xzvf [压缩文件名]
tar xzvf [压缩文件名] -C [指定目录]