《嵌入式Linux开发实用教程》——第1章 嵌入式Linux基础 1.1 Linux基本命令

简介:

本节书摘来自异步社区《嵌入式Linux开发实用教程》一书中的第1章,第1.1节,作者 朱兆祺,李强,袁晋蓉,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第1章 嵌入式Linux基础

1.1 Linux基本命令

在学习嵌入式Linux开发的过程中,将经常使用到Linux的操作命令。实际上,Linux系统中的命令也是为实现特定的功能而编写的,而且绝大数的命令是用C语言编写的。有些实用性强的程序被广泛使用和传播,逐渐地演变成Linux的标准命令。但是Linux的操作命令繁多,本节将在U-Boot、Linux移植过程中常用到的Linux操作命令罗列出来进行讲解,为后续的学习做良好的铺垫。读者不要认为这是Linux简单命令则不屑一顾,嵌入式Linux学习是一个漫长的过程,循序渐进方能有所成就,这个过程是由每一小步累加而成的。天下难事,必作于易;天下大事,必作于细。所以读者务必要对待学习的每一个细节。

1.1.1 文件属性查询与修改

1.文件属性查询

“ls”命令在Linux目录中占据着重要地位,主要用于查看文件属性、查看目录下所包含的文件等。

zhuzhaoqi@zhuzhaoqi-desktop:~/Linux/busybox-1.20.2/_install$ ls
bin       dev home linuxrc proc sbin tmp var
creat_yaffs2.sh etc lib  mnt   root sys  usr

通过“ls”命令可查看_install目录下有哪些东西。如果要进一步查看文件属性,则使用“ll”命令或者“ls -al”命令,这两个命令是等效的。

zhuzhaoqi@zhuzhaoqi-desktop:~/Linux/busybox-1.20.2/_install$ ll
总用量 64
drwxr-xr-x 15 zhuzhaoqi zhuzhaoqi 4096 2013-03-17 16:33 .
drwxr-xr-x 35 zhuzhaoqi zhuzhaoqi 4096 2013-03-17 15:34 ..
drwxr-xr-x 2 zhuzhaoqi zhuzhaoqi 4096 2013-03-17 15:34 bin
-rw-r--r-- 1 zhuzhaoqi zhuzhaoqi 393 2013-03-17 16:32 creat_yaffs2.sh
drwxr-xr-x 2 zhuzhaoqi zhuzhaoqi 4096 2013-03-17 16:33 dev
drwxr-xr-x 3 zhuzhaoqi zhuzhaoqi 4096 2013-03-17 21:01 etc
drwxr-xr-x 2 zhuzhaoqi zhuzhaoqi 4096 2013-03-17 16:33 home
drwxr-xr-x 3 zhuzhaoqi zhuzhaoqi 4096 2013-03-18 09:57 lib
lrwxrwxrwx 1 zhuzhaoqi zhuzhaoqi  11 2013-03-17 15:34 linuxrc -> bin/busybox
drwxr-xr-x 5 zhuzhaoqi zhuzhaoqi 4096 2013-03-17 16:33 mnt
drwxr-xr-x 2 zhuzhaoqi zhuzhaoqi 4096 2013-03-17 16:33 proc
drwxr-xr-x 2 zhuzhaoqi zhuzhaoqi 4096 2013-03-17 16:33 root
drwxr-xr-x 2 zhuzhaoqi zhuzhaoqi 4096 2013-03-17 15:34 sbin
drwxr-xr-x 2 zhuzhaoqi zhuzhaoqi 4096 2013-03-17 16:33 sys
drwxrwxrwx 2 zhuzhaoqi zhuzhaoqi 4096 2013-03-17 16:33 tmp
drwxr-xr-x 7 zhuzhaoqi zhuzhaoqi 4096 2013-03-17 16:33 usr
drwxr-xr-x 2 zhuzhaoqi zhuzhaoqi 4096 2013-03-17 16:33 var

这样每一个文件的属性将一目了然,而属性中的每一个数据都有特定的含义,如表11所示。


screenshot

其中文件权限的10个字符的含义如表1.2所示。


screenshot

因此/bin目录的文件权限是:文件所有者对/bin目录可读可写可执行,文件所属用户组对/bin目录可读不可写可执行,其他人对/bin目录可读不可写可执行。

当对某个文件进行操作,要特别注意这个文件是否具有将要进行操作的权限。如果我们所在的用户组没有操作权限而又得进行操作,此时就得修改文件的权限。

2.文件权限修改

“chmod”命令的作用是变更一个文件的权限。

zhuzhaoqi@zhuzhaoqi-desktop:~/linux/include$ ll
总用量 8
drwxr-xr-x 2 zhuzhaoqi zhuzhaoqi 4096 2013-03-18 22:02 ./
drwxr-xr-x 3 zhuzhaoqi zhuzhaoqi 4096 2013-03-18 22:07 ../
-rw-r--r-- 1 zhuzhaoqi zhuzhaoqi  0 2013-03-18 22:02 s3c6410.h

从上一小节可知,“drwxr-xr-x”除了“d”是文件类型,剩下9个字符划分成3组,表示3个用户组的使用权限。而在Linux系统中,每一个用户组的3个字母分别可用数字进行描述其权限,r:4、w:2、x:1、-:0,将每一组的数字进行相加,即得到这组用户的权限。例如上面s3c6410.h的权限是:rw-r--r--,那么每一用户组权限分别是:6、4、4,那么组合起来即为644。每个文件的最高权限为777。

给予s3c6410.h最高权限,如下:

zhuzhaoqi@zhuzhaoqi-desktop:~/linux/include$ chmod 777 s3c6410.h
zhuzhaoqi@zhuzhaoqi-desktop:~/linux/kernel/include$ ll
总用量 8
drwxr-xr-x 2 zhuzhaoqi zhuzhaoqi 4096 2013-03-18 22:02 ./
drwxr-xr-x 3 zhuzhaoqi zhuzhaoqi 4096 2013-03-18 22:07 ../
-rwxrwxrwx 1 zhuzhaoqi zhuzhaoqi  0 2013-03-18 22:02 s3c6410.h*

通过“chmod”更改权限命令可以看到s3c6410.h的权限是最高权限。

1.1.2 目录与路径处理命令

1.切换目录

“cd”命令的作用是从当前目录切换到另一个目录下。如从用户根目录进入/linux目录下,如下操作:

zhuzhaoqi@zhuzhaoqi-desktop:~$ cd linux/
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$

2.创建新目录

“mkdir”命令的作用是创建一个新的目录,如在/linux目录下再创建一个/linux-3.8.3子目录,如下操作:

zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ mkdir linux-3.8.3
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
linux-3.8.3

mkdir的用法很多,可以通过输入mkdir –help查看,如下:

zhuzhaoqi@zhuzhaoqi-desktop:~$ mkdir --help
用法:mkdir [选项]... 目录...
若指定目录不存在则创建目录

长选项必须使用的参数对于短选项时也是必需使用的
 -m, --mode=模式  设置权限模式(类似chmod),而不是rwxrwxrwx 减umask
 -p, --parents     需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理
 -v, --verbose     每次创建新目录都显示信息
-Z, --context=CTX 将每个创建的目录的SELinux 安全环境设置为CTX
--help    显示此帮助信息并退出
--version    显示版本并退出

mkdir –p这个指令在U-Boot和Linux内核源码中的Makefile中的使用是相当频繁的。

3.删除目录

如果是删除一个空目录,则使用“rmdir”命令即可;如果该目录下有东西,则不能使用“rmdir”命令删除。

zhuzhaoqi@zhuzhaoqi-desktop:~/linux/linux-3.6.7$ ls
arch
zhuzhaoqi@zhuzhaoqi-desktop:~/linux/linux-3.6.7$ cd ..
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
linux-3.6.7 linux-3.8.3
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ cd linux-3.8.3/
zhuzhaoqi@zhuzhaoqi-desktop:~/linux/linux-3.8.3$ ls
zhuzhaoqi@zhuzhaoqi-desktop:~/linux/linux-3.8.3$ cd ..
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
linux-3.6.7 linux-3.8.3
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ rmdir linux-3.8.3/
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
linux-3.6.7
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ rmdir linux-3.6.7/
rmdir: 删除 "linux-3.6.7/" 失败:目录非空

从上面操作可知,由于/linux-3.8.3目录为空,则可使用“rmdir”删除;但是/ linux-3.6.7目录下有一个子目录/arch,则不能使用“rmdir”删除。此时则应该使用“rm -r”命令删除。

zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
linux-3.6.7
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls linux-3.6.7/
arch
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ rm -r linux-3.6.7/
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$

通过“ls”命令可知,linux目录下的linux-3.6.7/目录以及被删除。

1.1.3 文件操作

1.新建文件

新建一个文件可以使用“vim”命令,但是使用“vim”命令退出打开的文件时需要保存退出,否则会视为没有创建文件。

zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ vim s3c6410.h
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
s3c6410.h

2.复制文件

复制文件命令为“cp”。如下:

zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
include s3c6410.c s3c6410.h
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ cp s3c6410.h include/
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
include s3c6410.c s3c6410.h
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls include/
s3c6410.h

如果要复制并且重命名,如下操作:

zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
include kernel s3c6410.c s3c6410.h
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ cp s3c6410.c include/s3c6400.c
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls include/
s3c6400.c s3c6410.h

当复制目录时,使用“cp -r”命令。如下:

zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
include kernel s3c6410.c s3c6410.h
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls kernel/
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ cp -r include/ kernel/
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
include kernel s3c6410.c s3c6410.h
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls kernel/
include

3.移动文件

移动一个文件则使用“mv”命令,如下:

zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
include kernel s3c6410.c s3c6410.h
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ mv s3c6410.c kernel/
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls
include kernel s3c6410.h
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ ls kernel/
include s3c6410.c

编辑一个文件,建议使用“gedit”命令或者“vim”命令。

zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ gedit s3c6410.h
zhuzhaoqi@zhuzhaoqi-desktop:~/linux$ vim s3c6410.c

1.1.4 打包与解包、压缩与解压缩

熟悉打包与解包、压缩与解压缩的操作命令是操作Linux文件的必备技能。Linux下的打包与解包、压缩与解压缩的操作命令种类繁多,本节截取常用的8个格式进行讲解。本节中,FileName是指打包、压缩之后的文件名,DirName是指待打包、压缩的文件名。

(1).tar格式

单纯的tar功能其实仅仅是打包而已,也就是说将很多文件集结成一个文件,并没有进行压缩。

解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName

(2).gz格式

GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNIX系统的文件压缩。在Linux中经常会碰到后缀名为.gz的文件,它们的原型即是GZIP格式。

解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName

(3).tar.gz格式和.tgz格式

以.tar.gz和.tgz为后缀名的压缩文件在在Linux和OSX下是非常常见的,Linux和OSX都可以直接解压使用这种压缩文件。

解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName

(4).bz2格式

压缩生成后缀名为.bz2的压缩算法使用的是“Burrows-Wheeler block sorting text”,这类算法压缩比率比较高。

解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z DirName

这里需要注意的是,当执行压缩指令之后,将会生成FileName.bz2压缩文件,同时DirName文件将会自动删除。

(5).tar.bz2格式

bzip2是一个压缩能力非常强的压缩程序,以.bz2和.tar.bz2为后缀名的压缩文件都是bzip2压缩的结果。

解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName

(6).Z格式

compress 是一个相当古老的UNIX压缩指令,压缩后的文件是以.Z 作为后缀名。

解压:uncompress FileName.Z
压缩:compress DirName

(7).tar.Z格式

这个压缩格式可以认为是.tar打包加上.Z压缩。

解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName

(8).zip格式

因为格式开放而且免费,越来越多的软件支持打开Zip文件。

解压:unzip FileName.zip
压缩:zip FileName.zip DirName

以上8种打包压缩算法都有所区别,最终导致的结果是压缩时间和压缩大小不一样。每一种压缩格式都有其优势和不足,在何种场合应该使用何种压缩格式就得视实际情况而定了。

在程序设计当中,空间换取时间、时间换取空间的现象是非常常见的一种方法。比如在单片机的LED跑马灯中,经常使用在数组中取出想要的花样,这就是空间换取时间。

相关文章
|
12天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
97 6
|
13天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
52 3
|
13天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
39 2
|
8天前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
36 3
|
13天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
48 3
|
16天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
50 6
|
17天前
|
缓存 网络协议 Linux
Linux ip命令常用操作
Linux的 `ip`命令是一个强大且灵活的网络管理工具,能够执行从基本的网络接口配置到高级的路由和VLAN管理等多种操作。通过熟练掌握这些常用操作,用户可以更加高效地管理和配置Linux系统的网络环境。无论是在日常管理还是故障排除中,`ip`命令都是必不可少的工具。
19 2
|
5月前
|
Linux
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
|
5月前
|
Linux
Linux部署 cd-pwd命令,cd 不写参数 就直接回到用户的HOME目录,pwd 查看当前的工作目录,pwd是常看当前目录的路径,无参数
Linux部署 cd-pwd命令,cd 不写参数 就直接回到用户的HOME目录,pwd 查看当前的工作目录,pwd是常看当前目录的路径,无参数
|
5月前
|
Linux
Linux02---命令基础 Linux命令基础, ls命令入门,ls命令参数和选项,命令行是一种以纯字符操作系统的方式,command命令本身,options命令的细节行为,parameter命令的
Linux02---命令基础 Linux命令基础, ls命令入门,ls命令参数和选项,命令行是一种以纯字符操作系统的方式,command命令本身,options命令的细节行为,parameter命令的