命令的概念
命令格式
command [-options] [argument]
命令帮助
ls --help
每个命令都会带有一个“-h” 或者“–help”的参数,可以用来打印一些帮助说明。
自动补全
“TAB”键
就是键盘上神奇的“Tab”键。
假如我们知道有个命令是以“whic”开头,但想不起全称, 那么我们可以在终端输入“whic”然后按一下“Tab”键(键盘上字母Q的左边),它会自动补全命令为“which”。
命令的退出与取消
Ctrl+c
可以取消当前输入的内容
常用命令
清屏命令 clear
clear 命令用于清除终端上的所有内容,只留下一行提示符。
切换用户执行身份命令
主命令 | 解释/案例 | 后缀 | |
---|---|---|---|
sudo |
Ubuntu(Linux)是一个允许多用户的操作系统,其中权限最大的就是超级用户 root,有时候我们执行一些操作的时候是需要用 root 用户身份才能执行,比如安装软件。通过 sudo 命令可以使我们暂时将身份切换到 root 用户。当使用sudo 命令的时候是需要输入密码的,这里要注意输入密码的时候是没有任何提示的!命令格式如下: | -h |
显示帮助信息。 |
-l |
列出当前用户可执行与不可执行的命令 |
||
-p |
改变询问密码的提示符。 |
添加用户命令
主命令 | 解释/案例 | 后缀 | |
---|---|---|---|
adduser | -system | 添加一个系统用户 |
|
-home DIR | DIR 表示用户的主目录路径 |
||
-uid ID | ID 表示用户的 uid。 |
||
-ingroup GRP | 表示用户所属的组名 |
删除用户命令
deluser
主命令 | 解释/案例 | 后缀 | |
---|---|---|---|
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 -可切换至上次所在的工作目录 |
目录操作
创建目录
主命令 | 解释/案例 | 后缀 | |
---|---|---|---|
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 |
显示删除过程 |
文件操作
创建空文件
touch a
文件操作
创建一个有内容的文件
file 文件
重定向文件
重定向在 Linux 下用“>”和“>>”表示, “>”表示输出到一个新文件中,
而“>>”则表示输出到现有文件的末尾。如果文件已经存在,则直接操作文件,否则将创建新文件。
查看文件类型**
查看文件内容
more 和 less | |
---|---|
浏览文本文件 | 相比来说 less 命令更加灵活, 支持键盘的 Page Up 和 Page Down 键, 可任意向前先后翻页浏 览, 并且还支持文本搜索。 使用 less 打开文件后, 输入/abc 可在文本中搜索字符串 abc,匹配的 |
空格翻页 | 字符串高亮显示。如图 3.16 所示是用 less 命令打开文件后搜索 hello 字符串的截图。 |
按键盘 q 退出 |
head/tail
head 和 tail 这两个命令可分别查看文件头部和文件尾部
$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
文件复制操作
$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 文件,并显示详细信息:
~$ tar -xjvf a.tar.bz2
解压 b.tar.gz 文件,并指定解压到/home/chenxibing/目录:
~$ tar -xzvf b.tar.gz -C /home/chenxibing
紧跟 tar 命令选项的“-”可以不需要,但是-C 的“-”是必须的,例如上一条命令等价于:
~$ tar xzvf b.tar.gz -C /home/chenxibing
将 drivers 目录的文件打包,创建一个.tar.bz2 压缩文件:
~$ tar -cjvf drivers.tar.bz2 drivers
删除文件
文件改名和移动
mv 源文件/目录 目的文件/目录 | |
---|---|
mv 将文件从一个目录移动到另外一个目录 |
讲删除命令的时候,提到删除的文件不会在回收站暂存,在通用桌面 Linux,一般都设有回收 站,在桌面下删除一般会暂存在回收站,在命令行下若要想将某个文件暂存回收站,只能用 mv 命令,将文 件移动到回收站中。Linux 下的回收站,一般在主目录下,为隐藏文件.Trash,不同发行版回收站的路径 |
也各不相同。Ubuntu 的回收站目录是“~/.local/share/Trash” 。 | |
改名: |
|
mv readme.txt readme.doc |
创建链接**
ln
文件复制操作
$ ln 选项 源文件/目录 目标文件
-s |
软链接 |
---|---|
默认创建硬链接 |
硬链接:硬链接通过索引节点进行链接, 相当于源文件的镜像,占用源文件一样大小的空间,修改其中任何一个,另外一个都会进行同样的改动。给一个文件创建硬链接后,文件属性的硬
连接数会增加。
硬链接不能跨文件系统, 只能在同一个文件系统内进行链接, 且不能对目录文件建立硬链接。给目录创建硬链接会出错, 软链接:软链接是产生一个新文件, 这个文件指向另一个文件的位置,类似于 Windows 下的快捷方式。
改变文件和目录权限**
第一个字符是-,表示这是一个普通文件,
如果是 b 则表示是块设备,是 c 则表示是字符设备, 是 d 则表示是目录, 是 l 则表示是链接文件, p 表示命名管道,s 表示 Socket 文件。
网络操作命令
网络配置
ifconfig
$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 同时配置网卡多个参数的范例:
~$ sudo ifconfig eth1 192.168.1.136 netmask 255.255.255.0 broadcast 192.168.1.255 up
ping命令
$ping IP 地 址
如果没有进行特殊的路由设置,通常情况下只能 ping 同网段的主机,不能跨网段 ping
操作。
vmuser@Linux-host: ~$ ping 192.168.1.100
PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
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 只用一次,参数之间用半角逗号隔开。
# 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 盘, 则需要进行挂载, 实现文件系统安装:
#mount –t vfat /dev/sda1 /mnt
在进行嵌入式 Linux 开发过程中, mount 命令经常被使用, 特别是进行 NFS 连接和调试的时候,通过 NFS 挂载,将远程主机 Linux 的某个共享目录挂载到嵌入式系统本地,当成本地设备进行操作。
NFS 挂载范例:
[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 分区的命令示例:
#mount -t yaffs2 /dev/mtdblock2 /mnt
*使用条件:需要内核已经支持 yaffs2 文件系统。
挂载 ubifs 分区的命令示例:
#mount -t ubifs ubi0:roo√s /mnt
*使用条件:需要内核已经支持 ubifs 文件系统。
案例: #umount 挂载点 [root@zlg /]# umount /mnt |
|
---|---|
| | —- |
文件系统卸载
使用内核模块和驱动
加载(插入)模块
insmod
可以往正在运行中的内核插入某些模块而无需重启系统。
# insmod [选项] 模块 [符号名称=值]
-f |
强制将模块载入,不检查目前 kernel 版本与模块编译时的 kernel 版本是否一致 |
---|---|
-k |
将模块设置为自动卸载 |
-p |
测试模块是否能正确插入 |
-x |
不导出模块符号 |
-X |
导出模块所有外部符号(默认) |
-v |
显示执行过程 |
一般情况下,如果一个模块的版本与所运行的内核不一致,模块将无法插入系统。就算是同一版本内核编译得到,如果内核配置文件不同,也有可能无法插入。
使用-f 选项强制插入后,可能会出现运行不正确的情况。 插入和卸载模块需要 root 权限。 插入模块比较简单, 如需要往系统插入 beepdrv.ko 驱动模块,可用:
[root@zlg beep]# insmod beepdrv.ko
有些驱动/模块可以接受外部参数,在插入模块的时候为相应的符号赋值。一个模块/驱
动能否接受外部参数,能够接受几个外部参数,取决于模块/驱动的具体实现,符号以及赋值请参考相应模块/驱动的说明。这是一个范例,pcm-8032a.ko 模块能接收 irq 和 addr 两个符号参数,插入模块的时候指定:
# insmod pcm-8032a.ko irq=3 addr=0x300
系统模块操作
查看系统已经加载的模块
卸载驱动模块
rmmod
当某个内核模块或者驱动不再需要被使用, 则可以将其从系统中卸载, 以释放所占用的资源。
# rmmod [选项] 模块
-f |
强制卸载正在被使用的模块,非常危险!需要内核支持(CONFIG_MODULE_FORCE _UNLOAD 使能),否则无效 |
---|---|
-w | 通常情况下不能卸载正在被使用的模块,加上- w 选项,指定模块将会被孤立,直到不再被使 |
用 | |
---|---|
-s |
将错误信息写入 syslog,而不是标准错误 |
-v |
显示执行过程 |
[root@zlg beep]# rmmod beepdrv.ko
自动处理可加载模块
modprobe
集加载/卸载功能于一身, 并且可以自动解决模块间的依赖关系, 将某模块所依赖的其它模块全部加载。
# 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 根据该文件来寻找和解决依赖关系。
创建设备节点
#mknod 设备名 设备类型 主设备号 次设备号
#mknod /dev/led c 231 0
其他命令
重启和关机
重 启 :reboot 关机:poweroff
字符串搜索
grep
$grep 选项 表达式 [文件]
$grep ―pcf8563‖ -R arch/arm
文件同步
输入:sync
修改文件后,立即强制进行一次文件同步操作,将缓存的内容写入磁盘,确保文件系统的完整性。
文件搜索
Find
$find 路径 –选项 其它
最常用的是根据文件名来查找,只要加上-name 参数就可以了。此外还支持通配符进行模糊搜索。例如只大概知道内核源码“arch/arm”目录下有文件名以 mux
开头的文件,但不知道确切文件名,可用下列命令搜索:
$find arch/arm/ -name mux*.c