命令的概念

命令格式

  1. command [-options] [argument]

命令帮助

  1. ls --help

每个命令都会带有一个“-h” 或者“–help”的参数,可以用来打印一些帮助说明。

自动补全

“TAB”键

就是键盘上神奇的“Tab”键。
假如我们知道有个命令是以“whic”开头,但想不起全称, 那么我们可以在终端输入“whic”然后按一下“Tab”键(键盘上字母Q的左边),它会自动补全命令为“which”。

按一下TAB键不行的话,就按两下。

命令的退出与取消

Ctrl+c
可以取消当前输入的内容

常用命令

清屏命令 clear


clear 命令用于清除终端上的所有内容,只留下一行提示符。

切换用户执行身份命令

主命令 解释/案例 后缀





sudo
Ubuntu(Linux)是一个允许多用户的操作系统,其中权限最大的就是超级用户 root,有时候我们执行一些操作的时候是需要用 root 用户身份才能执行,比如安装软件。通过 sudo 命令可以使我们暂时将身份切换到 root 用户。当使用sudo 命令的时候是需要输入密码的,这里要注意输入密码的时候是没有任何提示的!命令格式如下:

-h


显示帮助信息。


-l


列出当前用户可执行与不可执行的命令


-p


改变询问密码的提示符。
基本命令 - 图1

添加用户命令


主命令 解释/案例 后缀
adduser -system
添加一个系统用户
-home DIR
DIR 表示用户的主目录路径
-uid ID
ID 表示用户的 uid。
-ingroup GRP
表示用户所属的组名

基本命令 - 图2

删除用户命令

deluser

基本命令 - 图3
主命令 解释/案例 后缀




adduser
-system 当用户是一个系统用户的时候才能删除。
-remove-home
删除用户的主目录
-remove-all-files 删除与用户有关的所有文件
-backup
备份用户信息

切换用户命令 su


主命令 解释/案例 后缀




su
前面在讲解命令“sudo”的时候说过, “sudo”是以 root 用户身份执行一个命令,并没有更改当前的用户身份,所有需要root 身份执行的命令都必须在前面加“sudo”。命令“su”可以直接将当前用户切换为 root 用户,切换到 root 用户以后就可以尽情地尽情任何操作了!因为你已经获得了系统最高权限,在 root 用户下, 所有的命令都可以无障碍执行,不需要在前面加上“sudo”,“su”命令格式
-c command
执行指定的命令,执行完毕以后回复原用户身份

-login
改变用户身份,同时改变工作目录和
PATH 环境变量
-m 改变用户身份的时候不改变环境变量
-h 显示帮助信息

导航命令


查看当前目录内容


主命令 解释 后缀

ls查看当前目录
*
1. Linux 区分大小写,在输入的时候需要特别注意;
2. 各参数可以任意组合,如 ls -la;
3. 支持通配符
、?等。

按字母顺序列出当前目录下的所有非隐藏文件
(包括目录)


-a
按字母顺列出当前目录下的所有文件,包括隐藏文件
-l 列出当前目录下的所有文件,包括文件长度、拥有者、权限和时间戳等信息
按最后修改时间列出文件
-t

-F
斜线(/) 表示目录
按类型列出所有文件,在文件末尾用不同符号区 分:
星号(*) 表示可执行文件
@符号 表示链接文件

—color


**

切换工作目录


主命令 解释 后缀


cd

/
根目录

句点(.)
当前目录
Linux 下目录、计算机名和域名之间都是用斜线(/)分
开,而非反斜线(\) ;
当前用户的主目录, 一为/home/username, 如当前登录用户为 user, 则~表示/home/user
Linux 下切换目录,可用相对路径,亦可用绝对路径。 ~ 目录,cd 命令不加任何参数,将切换到用户主目录(~)

短横线(-)
上一次工作目录,cd -可切换至上次所在的工作目录


基本命令 - 图4

查看当前路径
pwd

目录操作

创建目录


主命令 解释/案例 后缀

mkdir


mkdir new_dir

mkdir –p dir1/apps/hello
-m 创建目录的同时指定访问权限

-p
如果所创建目录的父目录不存在,则一同创建父目录

删除目录


主命令 解释/案例 后缀



rmdir
rmdir 命令只能删除空目录
也可删除多级空目录
rmdir 命令只能删除空目录,无法删除非空目录。
案例:
rmdir dir1 dir2

rmdir -p dir4/dir5/dir6/





-p



删除某个目录后,如果父目录也成了空目录, 则连父目录一并删除。






rm
rm 命令既可以删除文件,也可以删除目录而不管目录是否非空。

注意:删除命令,无论是删除目录还是文件,一旦删除,都将不可恢复,并不像Windows 下或者桌面下会移动到回收站暂存。特别是一般的嵌入式并不设定“回收站” ,所以在删除的时候请特别小心。

为了确保不误删文件,可使用 alias 别名,将rm 命令设置为“rm -i” ,这样每次删除都会有确认过程。用法:alias rm=”rm -i”。

rm [选项] 文件/目录案例:
rm -fr dir3 video1.mpeg rm -i config.gz


-f

强制删除文件或者目录,无需用户确认


-i

删除文件或者目录之前,需用户确认


-r

递归删除,删除指定目录以及子目录下的文件


-v

显示删除过程

文件操作

创建空文件

  1. touch a

文件操作

创建一个有内容的文件

  1. file 文件

重定向文件

重定向在 Linux 下用“>”和“>>”表示, “>”表示输出到一个新文件中,

而“>>”则表示输出到现有文件的末尾。如果文件已经存在,则直接操作文件,否则将创建新文件。


查看文件类型**

查看文件内容


more 和 less
浏览文本文件 相比来说 less 命令更加灵活, 支持键盘的 Page Up 和 Page Down 键, 可任意向前先后翻页浏
览, 并且还支持文本搜索。 使用 less 打开文件后, 输入/abc 可在文本中搜索字符串 abc,匹配的
空格翻页 字符串高亮显示。如图 3.16 所示是用 less 命令打开文件后搜索 hello 字符串的截图。
按键盘 q 退出

head/tail
head 和 tail 这两个命令可分别查看文件头部和文件尾部

  1. $head/tail [选项][参数] 文件
-n [数字] 显示[数字]所指定的行数
-c [数字] 显示[数字]所指定的字节数


指定显示多少行,如查看文件头 20 行:
vmuser@Linux-host: hello$ head -n 20 install.cf

指定显示多少字节,例如,指定查看 300 字节:
vmuser@Linux-host: hello$ head -c 300 install.cf
查看文件开头的 512 字节:
vmuser@Linux-host: hello$ head -c 1b install.cf

文件合并


cat
将一个或者多个文件输出到标准输出上,可以用于文件查看


-n
从 1 开始对输出行进行编号

-b
类似于-n,从 1 开始编号,但是忽略空白行

-s
遇到连续两行或以上的空白行,就替换为一行空白行

$ cat [选项] 文件 1 文件 2 … [>文件 3]
$ cat -n hello.c Makefile > test

文件复制


cp
文件复制操作

  1. $cp [选项] 源文件/目录 目的文件/目录

-a
保留链接、文件属性并递归复制,等同于-dpR 组合,常用语复制目录

-d
复制时保留链接

-f
若目标文件已经存在,则直接删除而不提示

-i
若目标文件已经存在,需要用户确认操作,与-f 相反

-p
除复制文件内容外,把访问权限和修改时间也复制到新文件中

-r
递归复制,递归复制指定目录下的文件和目录

-v
显示文件复制过程

文件压缩


tar
tar 是 UNIX 系统的一个文件打包工具,只是连续首尾相连的将文件堆放起来,并不具备压缩功能, 但是加上选项, tar 可以调用其它压缩/解压工具, 能够实现文件的压缩和解压。


-c
创建存档文件,与-x 相斥


-t 列出档案文件的文件列表

-x
解包存档文件,与-c 相斥

-A
合并存档文件

-d
比较存档文件与源文件

-r
追加文件到存档文件末尾

-u
更新存档文件

-f
指定存档文件,与其它选项同时使用时,必须在最后,如 tar -xjvf a.tar.bz2

-v
显示详细处理信息

-C
转到指定目录,常用于解开存档文件

-j
调用 bzip2 程序

-z
调用 gzip 程序

-Z
调用 compress 程序

解压 a.tar.bz2 文件,并显示详细信息:

  1. ~$ tar -xjvf a.tar.bz2



解压 b.tar.gz 文件,并指定解压到/home/chenxibing/目录:

  1. ~$ tar -xzvf b.tar.gz -C /home/chenxibing



紧跟 tar 命令选项的“-”可以不需要,但是-C 的“-”是必须的,例如上一条命令等价于:

  1. ~$ tar xzvf b.tar.gz -C /home/chenxibing



将 drivers 目录的文件打包,创建一个.tar.bz2 压缩文件:

  1. ~$ tar -cjvf drivers.tar.bz2 drivers

删除文件

删除文件用 rm 命令,用法与删除目录相同。

文件改名和移动


mv 源文件/目录 目的文件/目录

mv
将文件从一个目录移动到另外一个目录

讲删除命令的时候,提到删除的文件不会在回收站暂存,在通用桌面
Linux,一般都设有回收
站,在桌面下删除一般会暂存在回收站,在命令行下若要想将某个文件暂存回收站,只能用 mv 命令,将文
件移动到回收站中。Linux 下的回收站,一般在主目录下,为隐藏文件.Trash,不同发行版回收站的路径
也各不相同。Ubuntu 的回收站目录是“~/.local/share/Trash” 。

改名:
mv readme.txt readme.doc


创建链接**

ln
文件复制操作

  1. $ ln 选项 源文件/目录 目标文件

-s
软链接
默认创建硬链接

硬链接:硬链接通过索引节点进行链接, 相当于源文件的镜像,占用源文件一样大小的空间,修改其中任何一个,另外一个都会进行同样的改动。给一个文件创建硬链接后,文件属性的硬
连接数会增加。
硬链接不能跨文件系统, 只能在同一个文件系统内进行链接, 且不能对目录文件建立硬链接。给目录创建硬链接会出错, 软链接:软链接是产生一个新文件, 这个文件指向另一个文件的位置,类似于 Windows 下的快捷方式。

改变文件和目录权限**

第一个字符是-,表示这是一个普通文件,
如果是 b 则表示是块设备,是 c 则表示是字符设备, 是 d 则表示是目录, 是 l 则表示是链接文件, p 表示命名管道,s 表示 Socket 文件。

基本命令 - 图5

网络操作命令

网络配置


ifconfig

  1. $ifconfig 网络接口 [选项] 地址/参数

Linux 系统配置网卡的命令工具,可用于查看和更改网络接口的地址和参数,包括 IP 地址、广播地址、子网掩码和物理地址,也可激活和关闭网卡。


-a
查看系统拥有的全部网络接口
ifconfig -a
网络接口 指定操作某个网口
ifconfig eth0 192.168.1.136

broadcast
设置网口的广播地址
ifconfig eth0 broadcast 192.168.1.255

netmask
设置网口的子网掩码
ifconfig eth0 netmask 255.255.255.0

hw ether
设置网卡物理地址(如果驱动不支持则无效)
ifconfig eth0 hw ether 00:11:00:00:11:22

up
激活指定网卡
ifconfig eth0 up

down
关闭指定的网卡
ifconfig eth0 down


(1) 使用 ifconfig 命令操作网口需要 root 权限;
(2) 使用 ifconfig 修改网卡配置无需重启系统,但不能复位保存;
(3) 可以同时配置网口的多个参数。

使用 ifconfig 同时配置网卡多个参数的范例:

  1. ~$ sudo ifcong eth1 192.168.1.136 netmask 255.255.255.0 broadcast 192.168.1.255 up






ping命令
$ping IP 地 址
如果没有进行特殊的路由设置,通常情况下只能 ping 同网段的主机,不能跨网段 ping
操作。

  1. vmuser@Linux-host: ~$ ping 192.168.1.100
  2. PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
  3. 64 bytes from 192.168.1.100: icmp_seq=1 ttl=128 time=0.206 ms 64 bytes from 192.168.1.100: icmp_seq=2 ttl=128 time=0.179 ms

安装和卸载文件系统

文件系统挂载

mount

Linux 允许多个文件系统存在于同一个系统中,也允许用户在系统运行时安装内核所支持的文件系统。例如,将一个 FAT 格式的 U 盘插入到 Linux 系统中。
(1) 挂载点必须是一个已经存在的目录;
(2) 如果挂载点非空,则 mount 后之前的内容将不可用,卸载后方可用;
(3) 一个挂载点可被多个设备/文件重复挂载,只是后一次挂载将覆盖前一次内容,卸载后可用;
(4) 使用多个-o 参数的时候,-o 只用一次,参数之间用半角逗号隔开。

  1. # mount [-参数] [设备名称] [挂载点]

Linux 系统安装文件系统需要用到 mount 命令,并且需要 root 权限。


-a
挂载/etc/fstab 文件中列出的所有文件系统

-r
以可读方式挂载

-w
以可写方式挂载(默认)

-v
显示详细安装信息

-t <文件系统类型>
指定文件系统类型,常见的文件系统类型有:


ext/ext2/ext3/ext4
Linux 常用文件系统

msdos
MS-DOS 的 FAT,即 FAT16

vfat
Windows 系统的 FAT,FAT32

nfs
网络文件系统

nVs
Windows2000/NT/XP 的 nVs 文件系统

auto
自动检测文件系统

-o <选项>
指定挂载时的一些选项,常有的有:

defaults 使用默认值(auto、nouser、rw、suid)

suid/nosuid
确认/不确认 suid 和 sgid 位

user/nouser
允许/不允许一般用户挂载

codepage=XXX
指定 codepage

iocharset=XXX
指定字符集

ro
以只读方式挂载

rw
以读写方式挂载

remount
重新安装已经安装了的文件系统

loop
挂载 loopback 设备以及 ISO 文件


假如需要在 Linux 系统中使用 FAT 格式的 U 盘, 则需要进行挂载, 实现文件系统安装:

  1. #mount –t vfat /dev/sda1 /mnt

在进行嵌入式 Linux 开发过程中, mount 命令经常被使用, 特别是进行 NFS 连接和调试的时候,通过 NFS 挂载,将远程主机 Linux 的某个共享目录挂载到嵌入式系统本地,当成本地设备进行操作。
NFS 挂载范例:

  1. [root@zlg /]#mount -t nfs 192.168.1.138:/home/chenxibing/lpc3250 /mnt -o nolock

nolock 表示禁用文件锁,当连接到一个旧版本的 NFS 服务器时常加该选项。
此外,嵌入式开发中常用的文件系统还有 cramfs、jffs2、yaffs/yaffs2 以及 ubifs 等,特别是用于 NOR Flash 的 jffs2 和用于 NAND Flash 的 yaffs/yaffs2、ubifs 等,在进行系统操作中通常需要对各设备进行挂载或者卸载, 需要在挂载的时候指定正确的文件系统类型。
挂载yaffs2 分区的命令示例:

  1. #mount -t yaffs2 /dev/mtdblock2 /mnt

*使用条件:需要内核已经支持 yaffs2 文件系统。

挂载 ubifs 分区的命令示例:

  1. #mount -t ubifs ubi0:roo√s /mnt

*使用条件:需要内核已经支持 ubifs 文件系统。

基本命令 - 图6


案例:
#umount 挂载点
[root@zlg /]# umount /mnt

| | —- |

文件系统卸载


使用内核模块和驱动
加载(插入)模块

insmod

可以往正在运行中的内核插入某些模块而无需重启系统。

  1. # insmod [选项] 模块 [符号名称=值]



-f
强制将模块载入,不检查目前 kernel 版本与模块编译时的 kernel 版本是否一致

-k
将模块设置为自动卸载

-p
测试模块是否能正确插入

-x
不导出模块符号

-X
导出模块所有外部符号(默认)

-v
显示执行过程

一般情况下,如果一个模块的版本与所运行的内核不一致,模块将无法插入系统。就算是同一版本内核编译得到,如果内核配置文件不同,也有可能无法插入。
使用-f 选项强制插入后,可能会出现运行不正确的情况。 插入和卸载模块需要 root 权限。 插入模块比较简单, 如需要往系统插入 beepdrv.ko 驱动模块,可用:

  1. [root@zlg beep]# insmod beepdrv.ko



有些驱动/模块可以接受外部参数,在插入模块的时候为相应的符号赋值。一个模块/驱
动能否接受外部参数,能够接受几个外部参数,取决于模块/驱动的具体实现,符号以及赋值请参考相应模块/驱动的说明。这是一个范例,pcm-8032a.ko 模块能接收 irq 和 addr 两个符号参数,插入模块的时候指定:

  1. # insmod pcm-8032a.ko irq=3 addr=0x300

系统模块操作


查看系统已经加载的模块

基本命令 - 图7

卸载驱动模块


rmmod
当某个内核模块或者驱动不再需要被使用, 则可以将其从系统中卸载, 以释放所占用的资源。

  1. # rmmod [选项] 模块


-f
强制卸载正在被使用的模块,非常危险!需要内核支持(CONFIG_MODULE_FORCE
_UNLOAD 使能),否则无效
-w 通常情况下不能卸载正在被使用的模块,加上- w 选项,指定模块将会被孤立,直到不再被使



-s
将错误信息写入 syslog,而不是标准错误

-v
显示执行过程


[root@zlg beep]# rmmod beepdrv.ko

自动处理可加载模块


modprobe
集加载/卸载功能于一身, 并且可以自动解决模块间的依赖关系, 将某模块所依赖的其它模块全部加载。

  1. # modprobe [选项] 模块 [符号=值]

-C <文件>
不使用默认配置文件,使用指定文件作为配置文件

-i
忽略配置文件中的加载和卸载命令

-r
卸载指定模块,包括依赖模块

-f
强制安装

-l
显示所有匹配模块

-a
安装所有匹配的模块

—show-depends
显示模块的依赖关系

-v
显示执行过程

-q
不显示任何信息

-V
显示版本信息



modprobe 处理模块时忽略模块的路径,这要求系统模块和驱动是按照 make modues_install 方式安装的,即模块必须放在/lib/modules/$(uname -r)目录下,并且有正确的/lib/modules/$(uname -r)/modules.dep 文件,modprobe 根据该文件来寻找和解决依赖关系。

创建设备节点


  1. #mknod 设备名 设备类型 主设备号 次设备号
  2. #mknod /dev/led c 231 0

其他命令

重启和关机

重 启 :reboot 关机:poweroff

字符串搜索

grep

  1. $grep 选项 表达式 [文件]
  2. $grep pcf8563 -R arch/arm

“-R”表示进行递归查找,而不是仅仅在指定的目录下查找。

文件同步

输入:sync
修改文件后,立即强制进行一次文件同步操作,将缓存的内容写入磁盘,确保文件系统的完整性。

文件搜索

Find

  1. $nd 路径 –选项 其它

最常用的是根据文件名来查找,只要加上-name 参数就可以了。此外还支持通配符进行模糊搜索。例如只大概知道内核源码“arch/arm”目录下有文件名以 mux
开头的文件,但不知道确切文件名,可用下列命令搜索:
$find arch/arm/ -name mux*.c