现在的Linux发行版诸如 Ubuntu、 CentOS、Fedora都具有图形界面环境,Linux 中的桌面环境(GNOME、Unity等)也是一个程序,它们是命令行的抽象,例如,当您通过单击“X”关闭窗口时,该操作会导致运行一个命令,关闭掉当前窗口。Linux系统作为一种常见的嵌入式开发环境,刚开始都是不带界面的,只能通过命令来管理,而且它提供的命令行非常强大,使开发人员和高级用户更加高效。所以,要想熟练使用 Linux,就必须记忆很多命令。
本文以嵌入式开发为视角,精简了一些必要的指令进行说明。同时介绍了Linux环境下提供的诸如Vim等工具,帮助工程师进行更有效的开发。另外,在制作嵌入式Linux操作系统(Android)以及底层的开发过程中,有时也不可避免的需要手写一些命令以及工具。
目录
Linux命令
系统信息相关
文件和目录
文件搜索与文本处理
其他常用命令
Vi/Vim
命令模式
输入模式
底行命令模式
SSH
Linux命令
shell是一种命令解释器,它提供了用户和操作系统之间的交互接口。您在命令行输入命令,shell进行解释,然后送往操作系统执行,shell可以执行 Linux 的系统内部命令,也可以执行应用程序。你还可以利用shell编程,执行复杂的命令程序。在ubuntu系统桌面中按下Ctrl+Alt+T组合键,可打开shell(Terminal窗口),参见下图:
系统信息相关
- uname命令用于显示操作系统信息,例如内核版本、主机名、处理器类型等。下图为不同参数显示机器的处理器架构和使用内核版本。
- cat命令能够用于连接文件并打印到标准输出设备上。可通过查看/proc下的虚拟文件来获取当前系统各方面的实时信息。
- cat /proc/cpuinfo 显示CPU info的信息。
- cat /proc/interrupts 显示中断。
- cat /proc/meminfo 校验内存使用。
- cat /proc/swaps 显示哪些swap被使用。
- cat /proc/net/dev 显示网络适配器及统计信息。
- cat /proc/mounts 显示已加载的文件系统。
- ps命令即process status,用于显示当前进程的状态,类似于 windows 的任务管理器。常见的用法是查找指定进程,例如显示php的进程:ps -ef | grep php。
- top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。
- date 显示系统日期。
- shutdown 命令可以用来进行关机程序。shutdown -h now即时关闭系统,shutdown -h hours:minutes & 按预定时间关闭系统。
- reboot 重启。
- logout 注销。
文件和目录
- cd 命令即Change Directory,切换路径。包含一下几种常见用法。
- cd .. 返回上一级目录。
- cd ../.. 返回上两级目录。
- cd 进入个人的主目录。
- cd ~user1 进入个人的主目录。
- cd - 返回上次所在的目录。
- ls命令即list directory contents,用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录),包含以下几种常见用法。
- ls 查看目录中的文件。
- ls -F 查看目录中的文件。
- ls -l 显示文件和目录的详细资料。
- ls -a 显示隐藏文件。
- pwd即print work directory,命令用于显示当前工作目录。
- tree命令显示文件和目录由根目录开始的树形结构。
- mkdir命令即make directory,用于创建目录,常见以下几种用法。
- mkdir dir1 创建一个叫做 'dir1' 的目录。
- mkdir dir1 dir2 同时创建两个目录。
- mkdir -p /tmp/dir1/dir2 创建一个目录树。
- rm命令即remove,用于删除一个文件或者目录。常见的用法如下。
- rm -f file1 删除一个叫做 'file1' 的文件。
- rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容。
- rm -rf dir1 dir2 同时删除两个目录及它们的内容。
- mv命令即move file,用来为文件或目录改名、或将文件或目录移入其它位置。常见的用法如下。
- mv dir1 new_dir 重命名/移动 一个目录。
- cp命令主要用来复制文件和目录,常见用法如下。
- cp file1 file2 复制一个文件。
- cp dir/* . 复制一个目录下的所有文件到当前工作目录。
- cp -a /tmp/dir1 . 复制一个目录到当前工作目录。
- cp -a dir1 dir2 复制一个目录。
- ln命令即link files,它的功能是为某一个文件在另外一个位置建立一个同步的链接,类似Windows的快捷方式。常见用法如下。
- ln -s file1 lnk1 创建一个指向文件或目录的软链接。
- ln file1 lnk1 创建一个指向文件或目录的物理链接。
- touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。 若文件不存在,系统会建立一个新的文件。用法如下。
- touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm)。
文件搜索与文本处理
- find命令用于在指定目录下查找文件和目录。 它可以使用不同的选项来过滤和限制查找的结果。常见的用法如下。
- find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录。
- find / -user user1 搜索属于用户 'user1' 的文件和目录。
- find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件。
- find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件。
- find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件。
- find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 结尾的文件并定义其权限。
- find / -xdev -name \*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备。
- grep命令用于从文件中搜索文本或字符串,常见的用法如下。
- grep Aug /var/log/messages 在文件 '/var/log/messages'中查找关键词"Aug"。
- grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"开始的词汇。
- grep [0-9] /var/log/messages 选择 '/var/log/messages' 文件中所有包含数字的行。
- grep Aug -R /var/log/* 在目录 '/var/log' 及随后的目录中搜索字符串"Aug"。
- cat命令即concatenate,用于创建单个或多个文件,查看文件包含,连接文件以及在终端或文件中重定向输出。常见的使用方法如下。
- cat /etc/passwd 显示/etc/passwd文件的内容。
- cat test >> test1 将test文件追加到test1后。
- cat < test2 将test2重定向到标准输入。
- sed命令即Stream EDitor,它是一个面向行处理的工具,它以“行”为处理单位,针对每一行进行处理,处理后的结果会输出到标准输出(STDOUT)。常见的使用方法如下。
- sed 's/stringa1/stringa2/g' example.txt 将example.txt文件中的 "string1" 替换成 "string2"。
- sed '/ *#/d; /^$/d' example.txt 从example.txt文件中删除所有注释和空白行。
- sed -e 's/stringa1//g' example.txt 从文档中只删除词汇 "string1" 并保留剩余全部。
- sort命令用于对文本内容进行排序,下面是几个常见的用法。
- sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份)。
- sort file1 file2 | uniq -u 删除交集,留下其他的行。
- sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件)。
- comm 命令用于比较两个已排过序的文件,常见的使用如下。
- comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容。
- comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容。
- comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分。
其他常用命令
- mount命令用于挂载Linux系统外的文件,常见的使用如下。
- mount -t vfat /dev/hda5 /mnt/hda5 挂载一个Windows FAT32文件系统。
- mount /dev/sda1 /mnt/usbdisk 挂载一个usb 捷盘或闪存设备。
- mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 挂载一个windows网络共享。
- umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用。
- df -h 用于显示已经挂载的分区列表;ls -lSr |more 以尺寸大小排列文件和目录;du -sh dir1 估算目录 'dir1' 已经使用的磁盘空间'。
- tar命令即tape archive ,常用于压缩与解压文件,用法如下。
- tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp目录下。
- tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包。
- tar -xvfj archive.tar.bz2 解压一个bzip2格式的压缩包。
- tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包。
- tar -xvfz archive.tar.gz 解压一个gzip格式的压缩包。
- tail -f /var/log/messages 实时查看被添加到一个文件中的内容,这个用法在观看log文件的时候经常用到。
- 网络相关的命令我们嵌入式工程师也经常会涉及,常见的如下。
- ifconfig eth0 显示一个以太网卡的配置。
- ifup eth0 启用一个 'eth0' 网络设备。
- ifdown eth0 禁用一个 'eth0' 网络设备。
- ifconfig eth0 192.168.1.1 netmask 255.255.255.0 控制IP地址。
- iwlist scan 显示所有无线网络。
- tcpdump tcp port 80 显示所有 HTTP 数据包。
- route -n 显示路由表。
Vi/Vim
所有的 Unix Like 系统都会内建 Vi 文本编辑器,但是目前我们使用比较多的是 Vim 编辑器。它们的区别简单的来说就是vi 是老式的字处理器,Vim 则可以说是程序开发者的一项很好用的工具。Vim 的官方网站自己也说 Vim 已经是一个程序开发工具而不单纯是文字处理软件。基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底行命令模式(Last line mode)。三种模式的切换关系如下图所示。
命令模式
用户刚刚启动 vi/vim,便进入了命令模式,在命令模式下可以使用不同的命令对文本进行操作。此状态下vi/vim接受键盘输入的命令完成动作。命令包括以下几种。
- i 命令切换到输入模式,以输入字符。
- x 命令删除当前光标所在处的字符。
- : 命令切换到底线命令模式,以在最底一行输入命令。
- dd 删除光标所在行。
- yy 复制光标所在的行。
- h 光标左移。
- o 在光标所在行的下方插入一-行并切换到输入模式。
- p 在光标所在行的下方粘帖。
- P 在光标所在行的上方粘帖。
输入模式
若想要编辑文本,首先启动Vim,进入了命令模式,按下i,切换到输入模式;若想使用更多的命令,则要输入:进入底线命令模式输入更多命令。
在输入模式中,可以使用以下按键。
- 字符按键以及Shift组合,输入字符。
- ENTER,回车键,换行。
- BACK SPACE,退格键,删除光标前一个字符。
- DEL,删除键,删除光标后一个字符。
- 方向键,在文本中移动光标。
- HOME/END,移动光标到行首/行尾。
- Page Up/Page Down,上/下翻页。
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线。
- ESC,退出输入模式,切换到命令模式。
底行命令模式
底行命令模式可以输入单个或多个字符的命令常用的命令如下。
- W 保存。
- q 退出。
- ! 强制操作。
- vs 文件名 可以不断分屏,ctrl +w +w快速切换屏幕。
- set nu 列出行号。
- # 代表一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了。
- /关键字,查找关键字。
下图展示了Vi/Vim常用的键位图。
SSH
SSH 叫安全外壳协议(Secure Shell),是一种加密的网络传输协议,可在不安全的网络中网络服务提供安全的传输环境。SSH 是一种协议, 存在多种实现,既有商业实现,也有开源实现(OSSH,OpenSSH)。本文使用的自有软件 OpenSSH, 毕竟它是目前最流行的 SSH 实现,而且是所有操作系统的默认组件。
我们可以首先在远程目标机器上运行SSH Server,这样我们就可以在本地的机器上使用SSH Client通过网络来远程访问到目标机器上的命令行。SSH Client 的基本使用方法是:
ssh user@remote -p port
- user 是你在远程机器上的用户名,如果不指定的话默认为当前用户。
- remote 是远程机器的地址,可以是 IP,域名,或者是后面会提到的别名。
- port 是 SSH Server 监听的端口,如果不指定的话就为默认值 22
实际上,知道了上面这三个参数,用任意的 SSH Client 都能连接上 SSH Server,例如在 Windows 上 PuTTY 就是很常用的 SSH Client。在执行了 ssh 命令之后,远程机器会询问你的密码。输入密码(并不回显),摁下回车即可登录成功。
local$ ssh user@remote -p port
user@remote's password:
常用的功能就是在两台机器上传输文件, 我们用scp命令就可以实现。scp 用起来很简单,下面是一些例子。
# 把本地的 /path/to/local/file 文件传输到远程的 /path/to/remote/file
scp -P port /path/to/local/file user@remote:/path/to/remote/file
# 把远程的 /path/to/remote/file 下载到本地的 /path/to/local/file
scp user@remote:/path/to/remote/file /path/to/local/file
# 远程的默认路径是家目录
# 下面命令把当前目录下的 file 传到远程的 ~/dir/file
scp file user@remote:dir/file
# 加上 -r 命令可以传送文件夹
# 下面命令可以把当前目录下的 dir 文件夹传到远程的家目录下
scp -r dir user@remote:
# 别忘了 . 可以用来指代当前目录
# 下面命令可以把远程的 ~/dir 目录下载到当前目录里面
scp -r user@remote:dir/ .
十六宿舍 原创作品,转载必须标注原文链接。
©2023 Yang Li. All rights reserved.
欢迎关注 『十六宿舍』,大家喜欢的话,给个👍,更多关于嵌入式相关技术的内容持续更新中。