build_embed_linux_system

Linux Shell命令行总结

Linux Shell由一系列脚本命令组成,其内容如下所示。

在Linux系统构建中,shell命令是使用Linux平台的基础技能,可以说大部分的开发和应用都依赖这些命令。shell命令支持依赖于支持的运行环境,常见的有bash, ash,korn,tcsh,zsh。shell命令一般指的是在Linux命令行模式下可以直接使用的可执行命令,这些命令包含内置命令,以及存在于系统目录(echo $PATH)中的”/bin/,/usr/bin/,/usr/sbin/”以及$PATH目录指定下的可执行程序或者脚本;这些脚本和程序按照来源不同如下所示。

这些命令的最重要特征是可以全局执行,可以通过whereis或者which来查找命令的位置,部分指令可以通过man [command]查看说明。本篇对于命令的说明只能说是沧海一粟,对于实际运用中,需要长期的经验积累不断学习。这里列出参考文档或者书籍,如果有时间去系统的学习了解,十分有意义。

注意:本章节中所有的指令只提供说明和例程指令,如果需要具体的功能和参数,建议在Linux系统中使用man命令查看,或者参考如下书籍系统的学习。

关于本节涉及的命令和列表如下。

basic_knowledge

在本小节中会列出一些常见命令的使用和系统设备信息查看方法。

常见技巧

# 退出当前shell命令行
Ctrl+D 或 exit

# 软件以守护进程形式执行
[command/app] &

# 显示系统信息
sudo apt-get install neofetch
neofetch

# 设置时区
sudo dpkg-reconfigure tzdata

系统预设变量

变量名 描述
UID 当前账户的ID号
USER 当前账户的账户名称
HISTSIZE 当前终端的最大历史命令条目数量
HOME 当前账户的根目录
LANG 当前环境使用的语言
PATH 命令搜索路径
PWD 当前工作目录
RANDOM 随机返回0~32767的整数
$0 返回当前命令的名称
$n 返回位置参数,大于9需要使用${n}
$# 命令参数的个数
$* 命令行的所有参数,”$*“所有参数作为一个整体
$@ 命令行的所有参数,”$@”所有参数作为独立个体
$? 返回上一条命令退出时的状态代码,0表示正确,非0失败
$$ 返回当前进程的进程号
$! 返回最后一个进程的进程号

系统关键信息

#/etc目录
/etc/issue                      # 显示操作系统登录时输出信息
/etc/passwd                     # 用户名,组和启动执行定义文件
/etc/shadow                     # passwd的影子目录,保存口令信息
/etc/hosts                      # ip地址映射目录,主机名映射在此添加
    # 定义网址的映射
    127.0.0.1   localhost
    xx.xx.xx.xx github.com
/etc/resolv.conf                # dns服务器地址映射目录,网络正常无法访问网址在此更新dns服务器
    # dns ipaddress
    nameserver 192.168.1.1
    nameserver 8.8.8.8
/etc/apt/sources.list           # 镜像源网址,用于apt更新访问的目录
/etc/ssh/sshd_config            # sshd服务器配置文件.
/etc/ssh/ssh_config             # ssh客户端配置文件.
/etc/init.d/rcS                 # 开机自启动的脚本
/etc/network/interfaces         # 设置网络静态ip,需要为debian系Linux系统(debian,ubuntu)
/etc/hostname                   # 记录主机名称,也可通过hostname查看
/etc/os-release                 # 文件系统版本信息

#/proc目录
/proc/cmdline                   # 显示内核启动参数
/proc/cpuinfo                   # 列出cpu信息
/proc/crypto                    # 列出系统已经注册的加密算法
/proc/devices                   # 列出了系统中已注册的设备驱动程序及其主设备号
/proc/diskstats                 # 显示磁盘IO统计信息
/proc/filesystems               # 列出了当前系统支持的文件系统类型
/pro/interrupts                 # 系统已经注册的中断
/proc/iomem                     # 列出了系统中已注册的I/O设备及其内存映射
/proc/kallsyms                  # 查看导出的内核符号表
/pro/meminfo                    # 系统的内存分配信息
/proc/misc                      # 显示已经注册杂项设备的子设备号
/proc/mounts                    # 系统已经挂载的文件目录
/proc/partitions                # 系统已经注册的分区
/proc/slabinfo                  # 显示系统的slab缓存信息
/proc/softirqs                  # 显示系统已经注册的中断
/proc/stat                      # 显示系统当前的状态信息
/proc/swaps                     # 显示系统已经注册的交换分区
/proc/version                   # 显示内核的版本
    # 举例: Linux version 5.15.153.1-microsoft-standard-WSL2 (root@941d701f84f1) (gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37) #1 SMP Fri Mar 29 23:14:13 UTC 2024
    # 格式: 内核版本 | gcc: 编译工具 | #1: 清理内核编译次数 | SMP: Linux内核 | 内核编译时间 |
/proc/net/dev                   # 系统当前网络设备

/proc/device-tree/              # 设备树信息

/proc/sys/kernal/threads-max    # 最大线程数
/proc/sys/kernal/pid_max        # 支持最大的pid数目
/proc/sys/vm/max_map_count      # 一个进程可以拥有的vma数量
/proc/sys/vm/min_free_kbytes    # 定义最小回收内存字节(lower为125%, high为150%)
/proc/sys/vm/drop_caches        # 用于控制内核的缓存(页面,目录和索引节点),
    - 0: 不清理任何缓存 
    - 1: 清理页面缓存
    - 2: 清理目录和索引节点缓存
    - 3: 清理页面,目录和索引节点缓存
/proc/sys/fs/dentry-state       # 这个文件提供了关于文件系统目录项(dentry)缓存状态的信息
    - nr_dentry 当前目录项缓存中的目录项数量
    - nr_unused 当前未使用的目录项数量
    = nr_innode 当前使用的inode数量
    - nr_inode_unused 当前未使用的inode数量
/proc/sys/kernel/printk         # 控制内核的打印权限(printk, dev_dbg...),小于等于的权限值都可以打印(1-7)
    echo "7 7 1 7" > /proc/sys/kernel/printk

# socket缓冲区
/proc/sys/net/core/rmem_max     # 接收缓冲区最大值
/proc/sys/net/core/wmem_max     # 发送缓冲区最大值
/proc/sys/net/core/rmem_default # 接收缓冲区默认值
/proc/sys/net/core/wmem_default # 发送缓冲区默认值

/proc/sys/net/ipv4/tcp_rmem     # tcp接收缓冲区内存信息<min default max>
/proc/sys/net/ipv4/tcp_wmem     # tcp发送缓冲区内存信息<min default max>
/proc/sys/net/ipv4/tcp_mem      # tcp内存信息<low pressure high>,
# min:TCP使用的内存的最小值(以页为单位)。在这个水平下,内核将不会释放TCP内存,即使其他应用程序请求内存。
# pressure:当TCP使用的内存超过这个值时,内核会开始回收TCP内存,但会尽量保持TCP性能。
# max:TCP可以使用的内存的最大值。当达到这个值时,TCP可能会开始丢弃数据包,从而影响网络性能。
# 通过echo命令可以修改特定的配置项,单次生效
echo "92901 123870 185802" > /proc/sys/net/ipv4/tcp_mem

/proc/sys/net/ipv4/udp_rmem_min # udp接收缓冲区最小值
/proc/sys/net/ipv4/udp_wmem_min # udp发送缓冲区最小值
/proc/sys/net/ipv4/udp_mem      # udp内存信息<low pressure high>
# low:当UDP内存使用量低于此值时,内核不会尝试回收UDP内存。
# pressure:当UDP内存使用量达到此值时,内核开始考虑回收UDP内存。
# high:当UDP内存使用量达到或超过此值时,内核会积极地回收UDP内存。

/proc/bus/input/devices         # 输入设备信息

# 永久配置可修改在/etc/sysctl.conf中
net.core.rmem_default = 212992
net.core.rmem_max = 212992
net.core.wmem_default = 212992
net.core.wmem_max = 212992
net.ipv4.tcp_mem = 92901 123870 185802
net.ipv4.tcp_rmem = 4096 131072 6291456
net.ipv4.tcp_wmem = 4096 16384 419304

# cpu信息
/sys/class/thermal/cpu0/                                            # 设备的温度信息
/sys/class/thermal/thermal_zone0/temp                               # 设备当前温度
/sys/bus/cpu/devices/cpu0/cpufreq                                   # 设备当前的时钟频率(可读写)
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor               # 当前的主频模式(可读写)
/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies  # 可配置的主时钟频率
/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors    # 可配置的主频工作模式

Linux-shell

查询linux系统信息。

# 查询内核版本信息
uname -a

# 查询系统版本信息(ubuntu)
lsb_release -a

# 测试磁盘性能
hdparm -tT /dev/sda

# 显示处理器架构
arch

口令和用户功能

在root用户下,可通过passwd命令修改口令, 支持命令如下:

# 修改root账户口令
passwd root

# 修改用户账户口令
passwd [user]

# 删除用户口令
passwd -d [user]

# 添加用户
useradd [user]

# 删除用户
userdel [user]

# 添加用户组
groupadd [group]

# 删除用户组
groupdel [group]

# 重命名一个用户组
groupmod -n new_group_name old_group_name

# 检查/etc/passwd的文件格式
pwck

# 修改用户登录信息
chage [user]

切换用户

在linux下,可通过如下命令切换用户和退出root.

# 切换到root用户
sudo su

# 切换到其它用户
su [user]

# 在root权限下可以退出到普通用户
exit

git的安装和使用

git更换用户后,访问原用户需要增加安全限制

# git添加对于不安全目录的访问支持
git config --global --add safe.directory D:/user_project/git/build_embed_linux_system

网络相关应用

网络相关命令主要有ifconfig, ethtool, ping, iperf等,相关说明如下所示。

# 查看网络设备信息
ifconfig eth0                   # 查看网口状态
cat /proc/net/dev               # 查看收发包统计
cat /sys/class/net/eth0/speed   # 查看当前速率

# 打开/关闭网络设备
ifconfig eth0 up                # 打开网络设备
ifconfig eth0 down              # 关闭网络设备

# 配置网络设备
ifconfig eth0 192.168.1.100     # 配置静态ip
ifconfig eth0 hw ether 00:01:02:03:04:04  # 配置mac地址
udhcpc -i eth0                  # 动态获取ip地址
ethtool -s eth0 speed 100 duplex full autoneg on # 设置速率100Mbps, 全双工,自适应

# 常用测试命令
ping 192.168.1.120             # 测试设备连接性

# tcp吞吐测试
iperf -s -i 1                  # server端tcp吞吐测试
iperf -c 192.168.1.100 -i 1 -t 60 -P 4  # client端tcp吞吐测试

# udp吞吐测试
iperf -u -s -i  1                                   # server端udp吞吐测试
iperf -c 192.168.1.100 -u -b 100M -i 1 -t 60 -P 4  # client端udp吞吐测试

command_list

file_manage

apt

apt是一款适用于Unix和Linux系统的软件包管理工具,主要用于检索、安装、更新和删除应用程序

# 从软件源更新list
sudo apt-get update

# 从软件源升级软件
sudo apt-get upgrade

# 安装软件
sudo apt-get install [package]

# 移除软件(彻底删除,包含配置文件)
sudo apt-get purge [package]

# 检查没有依赖会自己删除
sudo apt-get autoremove

# 查询已经安装的软件列表
sudo apt --installed list

# 安装失败后,用于修复之前安装需要的环境
sudo apt --fix-broken install

#查询软件包, 支持通配
apt search [package]
apt --names-only search [package]

# 显示
# Hit: 表示命中,检查包列表上的时间戳,匹配且没有变化
# Ign: 忽略,索引文件没有变化,也不会更新
# Get: 从目标获取文件,更新索引

如果apt出问题,可删除索引,重新更新
sudo rm -rf /var/lib/apt/list/*
sudo apt update

awk

awk 命令是一种文本处理工具,用于从文本文件中提取和处理数据。它基于模式扫描和处理文本,并支持自定义字段分隔符和记录分隔符。

用法: awk [选项] ‘模式 {动作}’ [文件]

-F: 指定字段分隔符。
-v: 定义变量。
-f: 从文件中读取 awk 脚本。

具体示例如下。

# 输出文件的第一列
awk '{print $1}' file.txt

# 输出文件的第二列和第三列
awk '{print $2, $3}' file.txt

# 使用指定的分隔符
awk -F: '{print $1}' /etc/passwd

# 定义变量
awk -v var="value" '{print var, $1}' file.txt

# 从文件中读取 awk 脚本
awk -f script.awk file.txt

basename

basename 命令用于从路径中提取文件名或目录名。它可以用于删除路径中的目录部分,只保留文件名或目录名。

用法: basename [选项]… 路径…

-a: 从多个路径中提取文件名或目录名。
-s: 从路径中删除后缀。
-z: 压缩多个连续的目录分隔符为一个。
--help: 显示帮助信息。
--version: 显示版本信息。

具体示例如下。

# 提取文件名
basename /path/to/file.txt

# 提取目录名
basename /path/to/directory

# 删除后缀
basename -s .txt /path/to/file.txt

# 从多个路径中提取文件名或目录名 "str1" \n "str2"
basename -a any/str1 any/str2

cat

cat 命令主要用于读取、创建或合并文件的内容,并将结果输出到标准输出设备(通常是屏幕)或重定向到另一个文件中。

用法: cat [选项]… [文件]…

-n: 对输出的所有行进行编号。
-b: 对非空输出行进行编号,与-n类似,但空行不编号。
-s: 将连续的多个空行压缩为一个空行。
-v: 显示非打印字符,用 ^ 和 M-(表示 Meta)来分别标记控制字符和 Meta 字符。
-E: 在每行的行尾显示一个 $ 符号,以表示行的结束。
-T: 将制表符(Tab)显示为 ^I。
-A: 相当于 -vET 的组合,显示所有非打印字符。

具体示例如下。

# 显示系统中某文件内容
cat /proc/filesystem

# 连接两多个文件,并显示
cat 1.txt 2.txt

# 连接多个文件,输出到另一个文件中
cat 1.txt 2.txt > 3.txt

#带行号显示文件内容
cat -n [file]

chattr

chattr 命令用于修改文件或目录的属性。它可以用于设置文件的权限、隐藏文件、防止文件被删除等。

用法: chattr [选项]… 文件…

-R: 递归处理目录中的所有文件和子目录。
-V: 显示详细的操作信息。
-f: 强制操作,忽略不存在的文件或目录。
-p: 保留文件的属性,不改变文件的权限。

cp

cp 命令用于复制文件和目录的命令行工具。

用法: cp [选项]… 源文件 目标文件

-a: 归档模式,递归复制目录并保留所有文件属性
-v: 详细模式,显示复制的文件和目录
-r: 递归复制目录及其内容
-d: 复制符号链接本身,而不是链接指向的文件

具体示例如下。

#将本目录下所有文件复制到tmp下
cp -av * /tmp/

#复制指定类型文件到指定目录
cp -rv *.img /sdk/img/

#复制软链接
cp -d /sbin/init /bin/init

dirname

dirname 命令用于从路径中提取目录名。它可以用于删除路径中的文件名,只保留目录部分。

用法: dirname [选项]… 路径…

-z: 压缩多个连续的目录分隔符为一个。
--help: 显示帮助信息。
--version: 显示版本信息。

具体示例如下。

# 提取目录名 "/usr"
dirname /usr/bin/

# 提取多级目录名 "/path/to"
dirname /path/to/directory/

# 提取多个路径的目录名 "/dir1" \n "/dir2"
dirname dir1/str dir2/str

dos2unix

dos2unix 命令用于将包含 DOS 风格换行符的文本文件转换为 UNIX 风格的换行符。

用法: dos2unix [选项]… 文件…

-q: 安静模式,不显示任何消息。
-n: 不备份原始文件,直接在原始文件上进行转换。

具体示例如下。

# 将文件 file.txt 转换为 UNIX 风格的换行符
dos2unix file.txt

# 安静模式,不备份原始文件,直接在原始文件上进行转换
dos2unix -q -n file.txt

dpkg

dpkg 命令是Debian及其衍生发行版如Ubuntu中用于管理软件包的工具。它可以用于安装、卸载、查询和管理软件包。

用法: dpkg [选项] [命令] [软件包]

-i: 安装指定的 .deb 软件包。
-r: 移除指定的软件包,但保留其配置文件。
-P: 完全移除指定的软件包,包括其配置文件。
-l: 列出当前系统中已安装的所有软件包。
-s: 显示指定软件包的详细信息。
-L: 列出指定软件包安装的所有文件。
# 安装文件
sudo dpkg -i package.deb

# 移除软件包
sudo dpkg -r package

# 完全移除软件包
sudo dpkg -P package

file

file 命令用于辨识文件类型和一些编码格式。通过查看文件的头部信息来获取文件类型。

用法: file [-options] 文件或目录

-b: 只显示文件类型,不显示文件名
-i: 输出MIME类型字符串。

具体示例如下。

# 查询文件类型
file /etc/profile

# 输出MIME类型字符串
file -i /bin/sh

find

find命令是搜索工具,用于在文件系统中搜索文件和目录.

用法: find [路径] [选项] [表达式]

-name: 按文件名查找文件。
-type: 按文件类型查找文件。
-size: 按文件大小查找文件。
-mtime: 按文件修改时间查找文件

具体示例如下。


# 查询指定路径下符合要求的文件
find /usr -name *.c # 查询usr目录和子目录下的.c后缀文件
find . -name *.txt  # 查询当前目录和子目录下的.txt后缀文件

# 查询指定路径下符合要求的目录
find / -type d -name test # 查询根目录下名为test的目录

# 查询指定路径下符合要求的文件大小
find / -size +100M # 查询根目录下大于100M的文件

# 查询指定路径下符合要求的文件修改时间
find / -mtime -7 # 查询根目录下最近7天内修改过的文件

iconv

iconv 命令用于在不同的字符编码之间进行转换。它可以将文本从一种编码转换为另一种编码,例如将 UTF-8 转换为 GBK。

用法:iconv [选项]… 文件…

-f <编码>:指定输入文件的编码,例如 -f UTF-8。
-t <编码>:指定输出文件的编码,例如 -t GBK。
-o <文件>:指定输出文件的名称,默认输出到标准输出。

具体示例如下。

# 将 UTF-8 编码的文件转换为 GBK 编码
iconv -f UTF-8 -t GBK input.txt -o output.txt

join

join 命令用于将两个文件按指定字段进行连接。它可以用于将两个文件按指定字段进行连接,并生成一个新的文件。

用法: join [选项] 文件1 文件2

-a: 指定要显示的行数。
-t: 指定字段分隔符,默认为制表符。
-1: 指定文件1中的字段。
-2: 指定取文件2中的字段。
--header: 显示文件头

具体示例如下。

# 将两个文件按指定字段进行连接
join -t ',' -1 1 -2 2 file1.csv file2.csv > joined.csv

less

less命令是一个用于查看文件内容的分页工具,它允许用户逐页查看文件内容,并支持搜索、滚动、翻页等操作。

用法:less [-options] file

-N: 显示行号。
-S: 不换行显示长行。
-g: 高亮显示搜索结果。
-i: 忽略搜索时的大小写。
-p "pattern": 搜索指定的模式。
-?: 显示帮助信息

具体示例如下。

# 使用less读取文件,支持分页
less README.md

# 显示行号
less -N README.md

# 搜索指定的模式
less -p "pattern" README.md

grep

文本搜索工具,它使用正则表达式搜索文本,并把匹配的行打印出来.

用法:grep [options] pattern [file…]

-c: 计算匹配行的数量。
-I: 不区分大小写。
-n: 显示匹配行及行号。
-s: 不显示不存在的文件或无匹配文本的错误信息。
-v: 显示不包含匹配文本的所有行。
-q: 静默匹配,结果不显示在命令行上

具体示例如下。

# 匹配名称为"shell", 带行号
grep -n shell README.md 
cat README.md | grep -n shell

从文件头查看指定行数,打印显示

用法:head [options] [file…]

-n: 显示指定行数。
-q: 静默模式,不显示文件名。
-v: 显示非匹配行。
-c: 显示指定字符数。

具体示例如下。

# 打印文件的前20行
head -n 20 example.txt

ln

ln 主要功能是用于在文件系统中为文件或目录创建链接。链接是一种特殊类型的文件,它指向另一个文件或目录,从而允许用户通过链接访问目标文件或目录.

用法:ln [选项]… 源文件或目录 目标文件或目录

-s: 创建软链接(符号链接)。
-f: 强制创建链接,如果目标文件或目录已存在,则覆盖它。
-d: 允许超级用户创建目录的硬链接。
-v: 显示详细的操作信息。

具体示例如下。

# 创建软链接
ln -sf [srcfile/srcdir] [dstfile/dstdir]

# 创建硬链接,覆盖原文件或者链接
ln -f [srcfile] [dstfile]

locate

locate 命令用于在系统上查找文件。它可以根据文件名、路径、内容等信息快速查找文件。

用法:locate [选项] 文件或目录

-b: 搜索文件名中的空格。

ls

ls命令功能为显示当前目录下的文件和目录.

用法:ls [选项] [文件或目录]

-a: 显示所有文件,包括隐藏文件。
-l: 以长格式显示文件信息,包括文件权限、硬链接数、属主、属组、大小、修改时间等。
-h: 以人类可读的格式显示文件大小,如1K、1M、1G等。
-t: 按修改时间排序文件。
-r: 按逆序排序文件。
-d: 仅显示目录,不显示文件。
-F: 在文件或目录后添加文件类型标识符,如目录末尾加"/",可执行文件末尾加"*"等。

具体示例如下。

# 显示当前目录下的详细信息
ls -alF

# 显示某个文件的详细信息
ls -alF | grep [file]

# 类型: 目录(d), 文件(-), 链接(l), 字符设备(c), 块设备(b)
# 文件的权限
# 文件的硬链接数目: 10
# 文件属主: freedom
# 文件属组: freedom
# 文件大小: 文件则以字节为单位表示大小, 目录只表示目录本身占用的大小,与内部内容容量关系不大。
# 上次修改时间: Mar 4 16:45
# 文件名或目录名: dl/
drwxr-xr-x   10 freedom freedom   4096 Mar  4 16:45 dl/

# ls可以配合过滤器
# 问号(?)代表任意单个字符
# 问号(*)代表任意零个或者多个字符
ls -l boo*

# 系统支持的库目录
ls /usr/lib

lsattr

lsattr 命令用于显示文件或目录的属性信息。

用法:lsattr [选项] 文件或目录

-R: 递归显示目录中的所有文件和子目录。
-v: 显示详细的属性信息。

具体示例如下。

# 显示当前目录下的文件属性
lsattr

# 递归显示目录下的所有文件属性
lsattr -R /path/to/directory

md5sum

md5sum 命令用于计算文件的MD5校验和。

用法:md5sum [选项] [文件]

-b: 以二进制模式读取文件。
-c: 校验文件的MD5校验和是否与提供的校验和匹配。
-t: 计算字符串的MD5校验和。
-z: 压缩输出,将多个文件的校验和合并为一个校验和。
--ignore-missing: 忽略不存在的文件,而不是报错。
--help: 显示帮助信息。
--version: 显示版本信息。

具体示例如下。

# 计算文件的MD5校验和
md5sum [file]

# 校验文件的MD5校验和是否与提供的校验和匹配
md5sum -c [file].md5

# 计算字符串的MD5校验和
md5sum -t "string"

mkdir

创建文件目录.

用法:mkdir [选项] [目录]

-p: 递归创建目录,即使父目录不存在。
-v: 显示创建的目录。
-m <目录权限>: 创建时指定目录的权限。

具体示例如下。

# 在当前目录下创建指定目录
mkdir test/

# 创建目录时指定权限
mkdir -m 755 dir/

# 递归创建指令目录(不存在则会自动创建所有目录, 创建目录树)
mkdir -p test/1/

more

在Linux中,more命令是一个基于VI编辑器的文本过滤器,主要以全屏幕的方式按页显示文本文件的内容。

用法:more [选项] [文件]

-n: 指定每屏显示的行数
+n: 从第n行开始显示文件内容

具体示例如下。

# 显示读取文件
more [file]

# 从第20行开始,每个页面10个显示文件内容
more +20 -10 [file]

mv

Linux中的mv命令用于移动或重命名文件或目录。

用法:mv [选项] 源文件或目录 目标文件或目录

-f:强制移动或重命名,不提示确认信息,即使目标文件或目录已存在也会直接覆盖。
-i:交互模式,在覆盖目标文件或目录之前会提示用户确认。
-v:详细模式,显示移动或重命名的操作过程。
-u:只在源文件比目标文件新或者目标文件不存在时才进行移动。

具体示例如下。

# 显示移动的内容v,强制覆盖f
mv -vf src/ mnt/

od

od(Octal Dump)是一个在Linux和类Unix系统中用于以八进制、十进制、十六进制、ASCII 等不同格式显示文件内容的命令行工具

格式: od [选项] [文件]

-d: 以十进制格式显示文件内容。
-o: 以八进制格式显示文件内容。
-x: 以十六进制格式显示文件内容。
-n: 不显示地址
-A: 以 ASCII 格式显示文件内容。

具体示例如下。

# 显示文件内容
od -x /dev/input/event0

paste

paste命令用于将多个文件的内容按行合并在一起。

用法:paste [选项] [文件]

-d <分隔符>:指定合并时使用的分隔符,默认是制表符。
-s:将多个文件的内容按行合并在一起,而不是按列合并。

具体示例如下。

# 将多个文件的内容按行合并在一起
paste file1.txt file2.txt

# 将多个文件的内容按行合并在一起,使用逗号作为分隔符
paste -d ',' file1.txt file2.txt

ps

用于列出系统中当前运行的进程,通过管道配合grep实现匹配

用法:ps [选项] [进程号]

-a:显示所有进程,包括没有控制终端的进程。
-u:显示进程的用户名。
-x:显示没有控制终端的进程。
-l:显示进程的完整命令行。
-e: 显示所有进程,包括没有控制终端的进程。
-f:显示完整格式的进程信息。
-p <进程号>: 显示指定进程号的进程信息。

具体示例如下。

# 列出所有带qemu的选项
ps -ef | grep qemu

# 列出所有带qemu的项,但不包括自己
# 参数展开
ps -ef | grep [q]emu
ps -ef | grep qemu | grep -v grep

pwd

输出当前工作的目录

用法:pwd [选项]

-L: 显示符号链接的实际路径。
-P: 显示符号链接的物理路径。

具体示例如下。

# 输出当前目录
pwd

# 输出当前目录的物理路径
pwd -P

readelf

readelf是一个在Linux及类Unix系统下用于查看ELF文件信息的命令行工具,其中文件需要为绝对地址文件或者当前目录下文件。

用法:readelf [选项] [文件]

-h或--file-header:显示ELF文件的头部信息,包括文件类型、机器类型、版本、入口点地址、程序头表和节头表的位置和大小等。
-l或--program-headers:显示ELF文件的程序头部信息,包括段类型、段偏移、段虚拟地址等。程序头部是用来加载和运行可执行文件的重要数据结构。
-S或--section-headers:显示ELF文件的节区表信息,包括节区的名称、类型、起始虚拟地址、大小等。通过查看节区信息,可以了解可执行文件或共享库中各个节区的作用和内容。
-s或--symbols:显示ELF文件的符号表信息,包括符号名称、符号地址、符号类型等。符号表对于程序的调试和动态链接非常重要。
-d或--dynamic:显示ELF文件的动态节区信息,包括动态符号表、动态链接器的路径、动态库的依赖关系等。
-r:显示重定位表信息,包括重定位节、符号、类型等。
-a或--all:显示所有可用的ELF文件信息,包括文件头、节区表、符号表、重定位表、动态节区等。

具体示例如下。

# 显示可执行文件的头部信息
readelf -h lsz

# 显示可可自行文件的符号表信息
readelf -s ls

rev

rev命令用于将文件内容倒序显示。

用法:rev [选项] [文件]

-h: 显示帮助信息
-V: 显示版本信息

具体示例如下。

# 倒序显示文件内容
rev file

rm

rm 是 Linux 命令行的一个基本命令,用于删除文件或目录。

注意:rm文件会直接将文件删除,如果删除系统文件很可能导致无法启动,因此尽量不要root权限执行

用法: rm [选项] 文件或目录

-f: 强制删除,不提示确认信息
-i: 交互式删除,提示确认信息
-r: 递归删除目录及其子目录
-v: 显示删除的文件或目录

具体示例如下。

# 删除指定文件(递归删除)
rm -rf /home/program/download/tmp/*

rmdir

rmdir命令用于删除空目录。它的功能是从一个目录中删除一个或多个空的子目录。要使用rmdir命令,用户需要具有对父目录的写权限.

用法: rmdir [选项] 目录

-p: 递归删除目录,即使目录不为空
-v: 显示删除的目录

具体示例如下。

# 删除指定目录(需要目录为空)
rmdir test

# 递归删除目录
rmdir -p test

sed

sed(Stream EDitor)是一个强大的文本处理工具,广泛用于在Linux和Unix系统中对文本文件进行查找、替换、删除、插入等操作.

用法:sed [选项] [命令] [文件]

s/pattern/replacement/flags:替换命令,pattern 是要查找的模式,replacement 是替换后的文本,flags 是标志(如 g 表示全局替换)
d:删除行
p:打印行
a\text:在匹配行后追加text
i\text:在匹配行前插入text
c\text:用text替换匹配行

具体示例如下。

# 将文件 example.txt 中的 "foo" 替换为 "bar"
sed "s/foo/bar/" example.txt
 
# 全局替换(替换每一行中的所有匹配项)
sed "s/foo/bar/g" example.txt

# 删除文件 example.txt 中的第2行
sed '2d' example.txt
 
# 删除包含 "foo" 的行
sed '/foo/d' example.txt

# 在包含 "foo" 的行后追加 "bar"
sed '/foo/a\bar' example.txt
 
# 在包含 "foo" 的行前插入 "bar"
sed '/foo/i\bar' example.txt

# 将包含 "foo" 的行替换为 "bar"
sed '/foo/c\bar' example.txt

sort

sort是用于对文本文件中的行进行排序的命令行工具。

格式为:sort [选项]… [文件]…

-n: 按照数值大小进行排序,而不是按照字典顺序。
-r: 逆序排序,即降序排序(默认是升序)。
-t CHAR:指定字段分隔符(默认为空白字符,如空格和制表符)。
-k FIELD[,FIELD]:指定用于排序的字段(从1开始计数)。可以指定单个字段或多个字段的范围。
-o FILE:将排序结果输出到指定的文件,而不是标准输出。
-u: 去除重复的行,使输出中的每一行都是唯一的。
-b: 忽略每行前面的空白字符。
-f: 将小写字母视为大写字母进行排序(忽略大小写)。
-M: 将月份名(如 Jan, Feb, Mar 等)按照其在年中的顺序进行排序。

具体示例如下。

# 对文件内容进行升序排序
sort filename

# 按照数值大小对文件内容进行排序
sort -n filename

# 去除重复行并对文件内容进行排序
sort -u filename

split

split是一个用于将大文件分割成多个小文件的命令行工具。

用法:split [选项] [输入文件] [输出文件前缀]

-b <大小>:指定每个输出文件的大小,例如 -b 10M 表示每个文件最大为 10MB。
-l <行数>:指定每个输出文件的行数,例如 -l 1000 表示每个文件包含 1000 行。
-d:使用数字后缀而不是字母后缀来命名输出文件,例如 file001、file002 等。

具体示例如下。

# 将大文件分割成多个 10MB 的小文件
split -b 10M largefile.txt

# 将大文件分割成多个包含 1000 行的小文件
split -l 1000 largefile.txt

strings

strings是一个常用的命令行工具,用于从二进制文件中查找并输出可打印的字符串.

用法:strings [选项] 文件

-a:扫描整个文件,而不仅仅是目标文件的数据段。
-f:在输出的每一行前加上文件名。
-n <长度>:指定字符串的最小长度,默认值为 4。
-t <格式>:在输出的每一行前加上字符串的偏移量,格式可以是 d(十进制)、o(八进制)、x(十六进制)。
-e <编码>:指定字符编码,常见的有 s(单字节)、S(双字节)、l(四字节)、b(双字节,大端序)、B(四字节,大端序)。

具体示例如下。

# 查询stdc++中的glibc api
strings libstdc++.so.6 | grep GLIBC

# 查询stdc++中的glibc++ api
strings libstdc++.so.6 | grep CXXABI

# 查询test.txt中的字符串
strings -f test.txt

tac

tac命令用于将文件内容按行逆序显示。它的功能与cat命令相似,但是cat是将文件内容按行顺序显示,而tac是将文件内容按行逆序显示。

用法:tac [选项] [文件]

-r:将文件内容按行逆序显示。

具体示例如下。

# 逆序显示文件内容
tac example.txt

tail

tail用于显示文件末尾的指定行数。

格式: tail [选项] [文件]

-n <行数>:显示文件末尾的指定行数,例如 -n 10 表示显示文件末尾的 10 行。
-f:持续监控文件的更新,当文件有新内容追加时,会自动显示新内容。
-c <字节数>:显示文件末尾的指定字节数。
-q:不显示文件名。
-v:显示文件名。

具体示例如下。

# 显示文件末尾的20行
tail -n 20 example.txt

# 表示持续更新
tail -f -n 10 example.txt

tar

Linux下的tar是一种常用的文件压缩和解压工具,它能够将多个文件和目录打包成一个单独的tar文件,并通过gzip、bzip2等算法进行压缩或解压。tar本身并不具有压缩功能,而是通过管道将文件传递给gzip或bzip2等压缩程序进行压缩或解压。

用法:tar [选项] [文件]

-x:从归档文件中提取文件(解压)
-c: 创建归档文件(打包)
-f: 指定归档文件的名称
-v: 显示详细的操作过程
-t: 列出规档文件中的内容
-j: 使用bzip2压缩算法进行压缩或者解压

具体示例如下。

#解压文件到当前目录
tar -xvf rootfs.tar.bz2

#解压文件到指定目录
tar -xvf rootfs.tat.bz2 -C /tmp/

#压缩当前目录下所有文件,打包成
tar -vcf rootfs.tar.bz2 *

#压缩指定目录下文件
tar -vcf rootfs.tar.bz2 /tmp/

time

计算命令的执行时间

用法: time [命令]

-o <输出文件>: 将输出重定向到指定文件中
-a <追加文件>: 将输出追加到指定文件中
-f <格式>: 指定输出格式

具体示例如下。

# 获取find查找的执行时间
time find . -name *.txt

touch

touch命令用于修改文件或目录的时间属性,包括访问时间和修改时间。如果文件不存在,touch命令会创建新的空文件。

用法: touch [选项] 文件

-a: 只修改访问时间
-m: 只修改修改时间
-t: 只修改时间戳
-r: 递归修改指定目录及其子目录下的所有文件的时间戳

具体示例如下。

# 更新文件example.txt的时间戳
touch -t 202307190100.00 example.txt

uniq

uniq命令用于去除文件中相邻的重复行。它会将文件中的重复行合并为一行,并输出结果。

用法: uniq [选项] [文件]

-c: 在每一行前面显示该行重复出现的次数。
-d: 只显示重复的行。
-u: 只显示不重复的行。
-i: 忽略大小写。
"-s NUM": 跳过每行前NUM个字符再进行比较。
"-w NUM": 只比较每行的前NUM个字符。

具体示例如下。

# 去除文件中的重复行
uniq example.txt

# 显示文件中重复行的次数
uniq -c example.txt

# 只显示文件中的重复行
uniq -d example.txt

# 只显示文件中的不重复行
uniq -u example.txt

unzip

unzip命令将列出、测试或从zip用法存档中提取文件。

用法: unzip [选项] [文件]

-l: 列出zip文件的内容
-t: 测试zip文件的完整性
-x: 从zip文件中提取文件
-o: 指定输出目录

具体示例如下。

# 解压zip文件
unzip *.zip

vim

vim是Linux系统常用的文件管理工具。

用法: vim [选项] [文件]

-b: 以二进制模式打开文件
-R: 以只读模式打开文件

具体示例如下。

# 以二进制模式打开文件
vim -b <file>

i   进入编辑模式
dd  删除整行
D/d$ 删除光标到行尾的数据
p   复制行到光标处
.   重复上一个命令
u   取消上个命令
x   删除单个字符
yy  复制光标所在的行
g   移动到行首
1$  移动到当前行尾
Shift+g 移动到文件尾部
gg  移动到文件首部    
:set number/:set nu 显示行号
nG或者ngg   跳转到指定行
:wq/:q! 保存退出/直接退出
/   输入查找文件, 此时n是下一个

#光标移动
数字+光标
h 光标左移
l 光标右移 
k 光标上移 
j 光标下移 

0 零 光标移到行首
$ 光标移到行尾
H 光标移到屏幕上显示的第一行 
L 光标移到屏幕上显示的最后一行 
M 光标移到屏幕的中间一行
nG 光标移到第 n 行
w或 W 将光标右移至下一个单词的词首
e 或 E 移动到单词尾部
b 或B 移动到单纯首部
Ctrl+G 显示当前文件状态
:n 移动到指定行
:$ 移动到最后行

vimdiff

vimdiff 是 Linux 下一个常用的文件对比工具,它可以将两个文件进行对比,并显示差异。

用法: vimdiff [选项] [文件1] [文件2]

-e: 显示差异
-R: 只读模式
-b: 二进制比较模式

xz

xz 是 Linux 下一个常用的文件压缩工具,它可以将文件压缩成 .xz 格式,并支持多线程压缩。

用法: xz [选项] [文件]

-z: 创建 .xz 文件
-d: 解压 .xz 文件
-c: 创建 .xz 文件并压缩文件
-v: 显示压缩进度
-T: 使用多线程压缩
-h: 显示帮助信息
-k: 保留原始文件
-f: 强制覆盖已存在的文件
-m: 压缩级别,默认为 6

具体示例如下。

# 创建 .xz 文件
xz -z example.txt.xz

# 解压 .xz 文件
xz -d example.txt.xz

# 创建 .xz 文件并压缩文件
xz -c example.txt > example.txt.xz

zip

zip 是一个用于文件压缩的命令行工具,它可以将多个文件和目录打包成一个单独的 .zip 文件

用法: zip [选项] 压缩文件名 源文件或目录

-r: 递归地压缩目录及其子目录。
-q: 安静模式,不显示压缩过程中的详细信息。
-9: 最高压缩比,压缩速度较慢但压缩文件更小。
-j: 只存储文件,不存储目录结构。
-e: 加密压缩文件。
"-P password": 指定加密压缩文件的密码

具体示例如下。

# 压缩单个文件
zip archive.zip file.txt

# 压缩多个文件
zip archive.zip file1.txt file2.txt file3.txt

# 压缩目录及其子目录
zip -r archive.zip directory/

# 指定加密压缩文件的密码
zip -e -P password archive.zip file.txt

system_config

alias

alias 是一个用于创建命令别名的命令行工具。它允许用户为复杂或频繁使用的命令定义简短的别名,从而提高命令行操作的效率

用法:alias [别名]=[命令]

-p: 显示所有已定义的别名的定义。

具体示例如下。

#定义ll的别名
alias ll='ls -alF'
alias cdk='cd /home/progarm/support/kernal'

at

at 命令是一个用于在指定时间执行命令的工具。它允许用户在未来的某个时间点安排任务执行,而不需要用户在那个时间点手动执行命令。

用法:at [选项] [时间]

-f 文件名: 从指定的文件中读取要执行的命令。
-m: 在任务执行完毕后,给用户发送邮件通知。
-l: 列出当前用户的所有待执行任务。
-r 任务ID:删除指定的任务

具体示例如下。

# 从文件中读取命令并在指定时间执行
at -f commands.txt 14:30

# 列出当前用户的所有待执行任务
at -l

# 删除指定的任务
at -r 任务ID

bg

bg 命令是一个用于将作业放到后台运行的命令行工具。当你在终端中运行一个命令时,该命令默认会在前台运行,这意味着你需要等待该命令执行完毕才能继续在终端中输入其他命令。

用法:bg [作业ID]

具体示例如下。

# 将指定作业放到后台运行
jobs
bg %1

cal

cal 命令是一个用于显示当前月份的日历的命令行工具。它允许用户查看当前月份的日历,并查看该月份的日期和星期。

用法:cal [选项] [月] [年]

-y: 显示当前年份的日历
-m: 显示指定月份的日历

示例如下。

# 显示当前月份的日历
cal

# 显示指定月份的日历
cal -m  5

cd

用于将shell会话切换到另一个目录,支持绝对路径和相对路径。

用法: cd [directory]

-L : 允许符号链接(默认行为)
-P : 解析并跟随物理路径,不跟随符号链接

具体示例如下。

#切换到etc目录
cd /etc/

#切换到上一层目录
cd ../

#返回上一次目录
cd -

#进入个人主目录(在/home/[name]下)
cd

chgrp

chgrp 命令用于更改文件或目录的所属组。它允许用户将文件或目录的所属组更改为指定的组。

用法:chgrp [选项] 组名 文件或目录

-R: 递归地更改目录及其子目录下所有文件的所属组
-h: 只更改文件的所属组,而不更改目录的所属组

具体示例如下。

# 更改文件的所属组
chgrp newgroup file.txt

# 递归更改目录及其子目录下所有文件的所属组
chgrp -R newgroup directory/

chmod

chmod 更改程序的访问权限,包含写,读和执行三种权限,这个十分重要,很多时候编译或者访问目录失败都是权限问题,这里先要理解文件权限的说明,通过ls -l可查看目录下所有数据(包含文件和目录)的权限。

用法:chmod [选项] [模式] [文件]

-R: 递归地更改目录及其子目录下所有文件的权限
-c: 显示更改前和更改后的权限(仅权限更改后显示)
-v: 显示更改的详细信息

详细说明如下。

#权限说明
#  | d表示目录,-表示文件 | 所有者权限 | 所属组权限 | 其它用户权限 |
drwxrwxrwx 1 freedom freedom  4096 Nov  6 08:41 .git/
-rwxrwxrwx 1 freedom freedom 12381 Nov  6 14:43 0.embed_linux_environment_build.md*

# chown修改软件的所有权
chown root:root /usr/bin/sudo

# chmod修改软件的执行权
chmod u+s /usr/bin/sudo

# 修改文件分配可执行权限
chmod +x file.sh

# 修改文件权限
chmod 777 file.sh

这里第一列d表示目录,-表示文件

后续分成三个组,分别是对象的属主,对象的属组和系统其它用户,每个占位3bit, 对应r-w-x。

对于每个组中,r表示可读, w表示可写,x表示可执行, 下面列出常用的指令

sudo chmod 666 [file] 
sudo chmod 777 [file] 
sudo chmod 4755 [file] #定义用户和权限

chown

chown 修改软件的所有权。

用法:chown [选项] [用户名]:[组名] 文件或目录

-R: 递归地更改目录及其子目录下所有文件的所属组
-c: 显示更改前和更改后的权限(仅权限更改后显示)
-v: 显示更改的详细信息

具体示例如下。

# chown修改软件的所有权
chown root:root /usr/bin/sudo

# 更改权限
sudo chown freedom:freedom file.sh

chroot

chroot 是一个在 Linux 及类 Unix 系统中非常有用的命令,它的主要功能是改变当前进程及其子进程的根目录。

用法:chroot [选项] [目录] [命令]

-u: 指定用户

具体示例如下。

#不指定加载的qemu
LC_ALL=C LANGUAGE=C LANG=C sudo chroot nfs /bin/sh

#加载qemu
LC_ALL=C LANGUAGE=C LANG=C sudo chroot nfs /usr/bin/qemu-arm-static /bin/sh

clear

clear命令是用于清除当前终端界面内容的命令。

用法:clear

具体示例如下。

# 清除当前终端界面内容
clear

cron

cron是Linux系统中用于配置定时执行任务的工具,它会按照用户设定的时间规则周期性地执行指定的命令或脚本。

用法:cron [选项] [命令]

-e: 编辑cron任务
-l: 列出当前用户的cron任务
-r: 删除当前用户的cron任务

具体示例如下。

# 启动cron服务
sudo systemctl start cron

# 重启cron服务
sudo systemctl restart cron

# 停止cron服务
sudo systemctl stop cron

# 查看cron服务状态
sudo systemctl status cron

详细说明如下。

# 安装cron
sudo apt-get install cron

/etc/cron.hourly 定义每小时执行脚本目录
/etc/cron.daily 定义每天执行脚本目录
/etc/cron.weekly 定义每周执行脚本目录
/etc/cron.monthly 定义每月执行脚本目录

#/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root     # 如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/          # 使用者运行的路径,这里是根目录

# run-parts
# minute hour day month week user_name command
01 * * * * root run-parts /etc/cron.hourly  # 每小时执行目录/etc/cron.hourly/内的脚本
02 4 * * * root run-parts /etc/cron.daily   # 每天执行目录/etc/cron.daily/内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly  # 每星期执行目录/etc/cron.weekly/内的脚本
42 4 1 * * root run-parts /etc/cron.monthly # 每月去执行目录/etc/cron.monthly/内的脚本

cut

cut 分割字符串,获取指定位的值

用法:cut [选项] [文件]

-d: 指定分隔符
-f: 指定要提取的字段

具体示例如下。

# 以" "分割,获取第二个值
echo "A B C" | cut -d" " -f2

# 以"-"分割,获取第一个值
echo "A-B-C" | cut -d"-" -f1

date

管理和显示时间。

用法:date [选项] [格式]

-s: 设置时间
-r: 设置相对时间
-u: 显示UTC时间
-d: 显示指定日期

具体示例如下。

# 显示系统日期
date

# 显示UTC时间
date -u

# 显示指定日期
date -d "2022-12-25"

# 设置绝对时间
date -s "2022-12-25 10:30:00"

# 向前推移3天
date -s "-3 days"

# 向后推移6小时
date -s "+6 hours"

depmod

depmod是Linux系统中的一个命令,用于分析可载入模块的相依性。这些模块通常是动态加载到内核中的,用于扩展和添加新的功能,depmod命令最终会在/lib/modules/[kernel]/目录下生成modules.dep, 保存模块的依赖关系,使用modprobe [module-name]时则进行访问加载。

用法:depmod [选项] [模块名]

-a: 分析指定的模块
-A: 分析所有模块
-e: 显示错误信息
-n: 显示不进行任何操作
-v: 显示详细信息
-V: 显示版本信息

具体示例如下。

# 生成modules依赖关系
depmod

# 列出modules依赖关系
depmod -l

devmem2

devmem2或devmem主要用于读写寄存器值,依靠/dev/mem设备,访问内核数据。

用法:devmem2 [选项] [地址] [类型] [数据]

-b: 以字节为单位读写
-h: 以半字为单位读写
-w: 以字为单位读写

具体示例如下。

Usage:  devmem2 { address } [ type [ data ] ]
        address : memory address to act upon
        type    : access operation type : [b]yte, [h]alfword, [w]ord
        data    : data to be written

# 从0x00200000地址读取32字节数据
devmem2 0x00200000 -b 32

# 向0x00200000写入数据0x12345678
devmem2 0x00200000 32 0x12345678

dmesg

显示过去的系统执行日志,用于分析驱动加载情况。

dmesg用法:dmesg [选项]

-c: 读取并清除所有日志
-C: 清除内核中的环形队列数据
-k: 仅显示内核日志
-r: 显示原始的日志信息

具体示例如下。

# 显示所有日志
dmesg

# 显示和USB有关的日志
dmesg | grep usb

# 显示原始的日志信息
dmesg -r

# 清除当前日志
dmesg -C

dtc

将dts编译成dtb或者反汇编dtb生成dtc文件。

用法:dtc [选项] [输入文件] -o [输出文件]

-I: <input_format>:指定输入文件的格式,常见的格式有 dts(设备树源文件)和 dtb(设备树二进制文件)。
-O: <output_format>:指定输出文件的格式,同样可以是 dts 或 dtb。
-o: <output_file>:指定输出文件的名称。
-W: <warning_type>:控制警告信息的显示,例如 -Wno-unit_address_vs_reg 可以忽略地址与寄存器不匹配的警告。
-@: 检查设备树文件中的引用是否正确。

具体示例如下。

# 将dts编译成dtb
dtc [file].dts -I dts -O dtb -o [file].dtb

# 反编译dtb到dts
dtc [file].dtb -I dtb -O dts -o [file].dts

echo

Linux中,echo命令用于在终端上显示一段文字或变量的值。

echo用法:echo [选项] 字符串

-n: 不输出换行符
-e: 输出转义字符

具体示例如下。

# 特殊字符(-e输出转译字符)
#\b 退格键
#\f 换行单光标仍停留在原位置
#\n 换行光标移动到行首
#\r 光标移动到行首,但不换行
#\t 插入tab键
#\\ 打印\
#\033或\e 设置终端,字体颜色,背景颜色等
echo -e "123\r2"            #输出: 223
echo -e "\e[31mOK\e[0m"     #输出: 红色的OK, [31m为颜色说明
echo -e "\033[3;10HOK"      #输出: 在界面的第3行,20列输出指定值, [(row)-(col)H
echo -e "\e\\test" 

#打印环境变量信息
echo "$PATH"

#单引号屏蔽转义字符,另外\也可以屏蔽转译字符
echo '####'       #输出####
echo '$PATH'      #输出$PATH
echo \$PATH       #输出$PATH

#使用$(command)组合符合,支持命令嵌套
echo $(hostname)
echo $(echo 我是1级嵌套 $(echo 我是2级潜艇))

#输出值到当前的窗口
echo "hello word" > $(tty)

env

打印系统环境变量,等同于printenv

用法: env [选项] [变量名]

-i: 忽略当前环境变量
-u: 删除指定的环境变量

具体示例如下。

# 输出环境变量
env

# 输出带特定配置的环境变量
env | grep PATH

exit

exit命令主要用于从命令行界面CLI或脚本中退出当前会话或进程。

用法: exit [n]

n: 退出码,可选参数,指定退出时的状态码。通常情况下,0表示成功退出,非零值表示错误退出。

具体示例如下。

# 成功退出
exit 0

export

export 是一个在 Linux 和 Unix 系统中广泛使用的命令,它主要用于设置和导出环境变量,使得这些变量在当前 shell 会话及其子进程中都能被访问和继承。

用法:export [-fn] [name[=value] …]

-f: 该选项表示操作对象是shell函数。
-n: 从每个指定的名称NAME中移除export属性
-p: 打印出当前shell会话中的所有环境变量。

具体示例如下。

# 设置全局变量,内容为"Hello, World!"
export val="Hello, World!"
echo $val

finger

查询用户的个人信息,包含用户名,执行shell,执行窗口等

用法: finger [选项] [用户]

-l: 显示用户的登录信息
-m: 显示用户的邮件地址
-s: 显示用户的所有信息

具体示例如下。

# 查询用户信息
finger [user]

free

用于显示系统内存使用情况的命令行工具。

用法: free [选项]

-b: 为单位显示内存大小
-k: 以KB为单位显示内存大小
-m: 以MB为单位显示内存大小
-g: 以GB为单位显示内存大小
-h: 以人类可读的格式显示内存大小
-s: 间隔秒数持续显示
"-c <次数>": 与-s配合使用

具体示例如下。

# 查询内存占用情况
free -m

history

history 命令是一个用于查看和管理命令历史记录的命令行工具。

用法: history [选项]

-c: 清除当前 shell 会话的命令历史记录。
"-d offset": 删除指定偏移量的命令历史记录。
-a: 将当前 shell 会话的命令历史记录追加到历史文件中。
-r: 读取历史文件并将其内容合并到当前 shell 会话的命令历史记录中。
-w: 将当前 shell 会话的命令历史记录写入历史文件中。

具体示例如下。

# 查看命令历史记录
history

# 清除当前 shell 会话的命令历史记录
history -c

# 删除指定偏移量的命令历史记录
history -d 5

# 将当前 shell 会话的命令历史记录追加到历史文件中
history -a

# 读取历史文件并将其内容合并到当前 shell 会话的命令历史记录中
history -r

# 将当前 shell 会话的命令历史记录写入历史文件中
history -w

hostname

hostname 命令用于显示或设置系统的主机名。

用法: hostname [选项] [主机名]

-i: 显示主机的IP地址。
-f: 显示主机的完全限定域名(FQDN)。
-d: 显示主机的域名。
-s: 显示主机的短主机名。

具体示例如下。

# 显示当前主机名
hostname 

# 显示主机的IP地址
hostname -i

# 显示主机的完全限定域名(FQDN)
hostname -f

htop

htop 是一个命令行工具,用于实时显示 Linux 系统的进程信息。

用法: htop [选项]

-d: 设置更新时间,单位秒
-t: 以树形结构显示进程信息
-M: 去除鼠标显示
-C: 使用黑白色输出菜单

具体示例如下。

# 以多列显示进程信息
htop -M

# 以树形结构显示进程信息
htop -t

hwclock

通过硬件读写时钟信息。

用法: hwclock [选项] [文件]

-s: 将系统时钟设置为硬件时钟。
-w: 将硬件时钟设置为系统时钟。
-r: 读取硬件时钟。
-f: 指定硬件时钟文件。
-u: 使用UTC时间。

具体示例如下。

# 设置时间,并写入硬件rtc中
date -s "2023-05-20 14:20:00" && hwclock -w -f /dev/rtc0

# 读取时间
hwclock -f /dev/rtc0

# 从rtc读取时钟,并作为系统时钟
hwclock --hctosys -u
hwclock -s -u

# 将系统时钟写入rtc
hwclock -w -u
hwclock --systohc -u

id

id 命令用于显示当前用户或指定用户ID的信息。

用法: id [选项] [用户]

-g: 显示当前用户所属的组。
-u: 显示当前用户的用户ID。

示例如下。

# 显示当前用户所属的组
id -g

insmod

insmod用于直接安装模块到Linux内核中。

用法: insmod [选项] [模块文件]

-f: 强制安装模块,即使模块已经加载。
-v: 显示详细的安装信息。

具体示例如下。

# 加载module模块到系统中
insmod *.ko

iostat

显示设备的I/O相关的工作信息。

用法: iostat [选项] [设备]

-c: 显示CPU的统计信息。
-d: 显示磁盘的统计信息。
-n: 显示网络的统计信息。

具体示例如下。

# 显示当前的cpu状态和硬盘读写状态。
iostat

kill

用于强制关闭指定id的进程。

用法: kill [选项] [id]

-9: 强制终止进程,类似于kill -9 [id]
-15: 终止进程,类似于kill -15 [id]
-18: 暂停进程,类似于kill -18 [id]
-19: 继续进程,类似于kill -19 [id]

具体示例如下。

# 强制关闭指定id的进程
kill -9 [id]

# 强制关闭拥有指定名称的项目
sudo kill -9 $(pidof python3)

# 匹配名称进行关闭进程
kill -9 `ps -ef| grep ./udp_server | awk '{print $2}'`

killall

killall用于关闭指定名称的进程。

用法: kiallall [选项] [进程名称]

-9: 强制终止进程,类似于kill -9
-e: 只匹配完全相同的进程名称
-i: 在终止进程之前提示用户确认
-l: 列出所有已知的信号名称
-q: 不显示任何输出
-r: 使用正则表达式匹配进程名称
-s: 指定要发送的信号,默认为 TERM
-u: 只终止指定用户的进程
-v: 显示详细的输出

具体示例如下。

# 终止所有名为 python3 的进程
killall python3

# 在终止进程之前提示用户确认
killall -i python3

# 只终止指定用户的进程
killall -u username python3

last

last 命令用于显示登录记录。

lastlog

lastlog 命令用于显示登录记录。

lscpu

lscpu命令用于显示有关CPU的信息,包括CPU架构、核心数、线程数、缓存大小等。

用法: lscpu [选项]

-e: 显示扩展的CPU信息
-p: 以可解析的格式显示CPU信息

具体示例如下。

# 显示有关 CPU 架构信息的命令行工具
lscpu

lsmod

lsmod命令会显示当前已加载的内核模块的详细信息。

用法: lsmod [选项]

-a: 显示所有已加载的模块,包括未使用的模块。
-n: 显示模块的名称,而不是路径。
-o: 显示模块的所有者。
-s: 显示模块的大小。
-u: 显示模块的使用次数。

具体示例如下。

# 显示当前加载的mod信息
lsmod

lsusb

lsusb是一个用于显示连接到计算机的 USB 设备信息的命令行工具。它通常在 Linux 系统中使用,可以帮助用户快速查看当前连接的 USB 设备的详细信息,包括设备的厂商 ID、产品 ID、设备类别等

用法:lsusb [选项]

-v: 显示详细的设备信息,包括设备描述符、配置描述符、接口描述符等。
-t: 以树状结构显示设备信息,便于查看设备的层次关系。
-s: <总线号>:<设备号>:指定要显示的特定设备。
-d: <厂商ID>:<产品ID>:指定要显示的特定厂商和产品的设备。

具体示例如下。

# 显示所有连接的 USB 设备
lsusb

# 显示详细的 USB 设备信息
lsusb -v

# 指定总线设备号,显示USB详细信息
lsusb -v -s 001:001

man

man命令是一个帮助指令,用于访问Linux系统的手册页,可用于查找shell命令以及其它GNU实用工具。

用法:man [options] file

-d 打印调试信息,用于开发和调试
-f 等同于 whatis 命令,显示给定关键字的简短描述信息
-k 根据关键字搜索所有手册页的简短描述,返回匹配的结果

具体示例如下。

# 查询ls的帮助手册
man ls

mknod

用于创建新的节点或目录的 Linux 命令,其语法类似于 mkdir。该命令可以在指定的目录中创建新的节点或目录,并可以选择性地为新节点指定类型和主、次设备号。

用法:mknod [选项] 节点名称 [类型] [主设备号] [次设备号]

# 选项
"-m=0777": 指定节点的权限
"-Z=安全上下文": 指定节点的安全上下文
--version:  显示版本信息

# 类型
b: 块设备文件
c: 字符设备文件
p: 管道文件
s: 套接字文件

具体示例如下。

# 创建指定节点
mknod /dev/test c 5 1

modinfo

用于显示内核模块详细信息的命令行工具

用法: modinfo [选项] [模块名/模块文件]

-a: 仅显示模块作者信息
-d: 仅显示模块描述信息
-l: 仅显示模块使用的许可证信息
-p: 显示模块支持的参数及其说明
-n: 显示模块文件的完整路径

具体示例如下。

# 显示内核模块的作者信息
modinfo -a kernel_led.ko

modprobe

用于自动处理可载入模块的命令。它可以载入指定的个别模块,或是载入一组依赖的模块.

用法: modprobe [options] [-i] [-b] modulename

-a: 加载多个模块。
-r: 移除指定的模块,同时也会自动移除依赖该模块的其他模块。
-i: 忽略模块的依赖关系,强制加载或移除模块。
-n: 仅显示将要执行的操作,而不实际执行。
-v: 显示详细的操作信息。
-q: 安静模式,不显示不必要的信息。

具体示例如下。

# 自动加载内核模块,处理依赖关系
modprobe ap3216c

# 移除指定的内核模块,移除依赖该模块的其他模块
modprobe -r ap3216c

ntpq

ntpq是一个用于查询和控制NTP(Network Time Protocol)服务器的命令行工具。NTP是一种用于同步计算机时钟的协议,它允许计算机通过网络与其他 NTP 服务器进行时间同步。

格式: ntpq [选项] [命令]

-p: 显示NTP服务器的对等列表,包括服务器的 IP 地址、延迟、偏移量等信息。
-n: 以数字格式显示IP地址,而不是解析为主机名。
"-c command": 执行指定的ntpq命令,可用于非交互模式。

# 交互模式下命令
peers: 等于-p选项,显示NTP服务器的对等列表
version: 显示版本信息
quit: 退出交互模式

具体示例如下。

# 以数字格式显示IP地址
ntpq -pn

pidof

pidof主要用于获取运行进程的pid。

格式: pidof [选项] [命令]

-s 只显示第一个匹配的进程ID。
-o <pid> 排除指定进程ID。

具体示例如下。

# 获取init进程的pid,会列出所有的id
pidof init

pkill

pkill是一个用于杀死进程的命令。它结合了ps命令和kill命令的功能,可以方便地杀死一类进程或某个用户的所有进程。

格式: pkill [选项] [命令]

-f 使用正则表达式匹配进程名。
-u 指定用户名。
-t 只杀死指定的终端的进程
-9 发生SIGKILL信号,强制终止进程

具体示例如下。

# 关闭qemu的进程
pkill -9 qemu

poweroff

执行设备关机命令。

格式: poweroff [选项]

-f: 强制关机,不调用shutdown命令
-w: 仅记录关机日志,不执行关机操作
-d: 关机时不记录操作到/var/log/wtmp文件

具体示例如下。

# 设备关机
poweroff

printf

在命令行打印数据。

格式字符串 功能描述
%d或%i 十进制整数
%o 八进制整数
%x 十六进制整数
%u 无符号十进制整数
%f 浮点数
%s 字符串

具体示例如下。

#输出12
printf "%d\n" 12

#右对齐,格式化补空格,%-5d左对齐
printf "|%5d|\n" 12
printf "|%-5d|\n" 12

#打印小树,小数点后保存3位
printf "%.3f\n" 12.1234

#右对齐/左对齐,占用8位
printf "|%8.3f|\n" 12.1234
printf "|%-8.3f|\n" 12.1234

#打印\t
printf "%s\t\t%s\n" "hello" "world" #printf "%s\t\t%s\n" "hello" "world"

pstree

查看工作进程的树关系。

格式: pstree [选项] [进程ID/进程名]

-a: 显示每个进程的完整命令行参数,而非仅显示进程名
-c: 不合并显示相同的子进程组,每个子进程会单独显示
-h: 高亮显示当前进程及其父进程

具体示例如下。

# 查看进程树的关系
pstree

# 显示每个进程的完整命令行参数和 PID
pstree -ap

read

读取用户的输入,存储到特定的值中。

格式: read [选项] [变量名1 变量名2 …]

-p: 显示提示信息
-t: 设置读取超时时间
-n: 设置读取n个字节后结束,默认读取到\n结束
-r: 支持读取\,默认\会转变为转义字符
-s: 静默输入,不显示输入内容

具体示例如下。

# 读取用户输入,存储于value中
read -p "请输入数字:" value
echo $value

reboot

重启设备。

格式: reboot [选项]

-d: 重启时不将操作记录到/var/log/wtmp文件中,该文件用于记录用户登录和注销信息。
-f: 强制重启,不调用 shutdown 命令,直接重启系统,可能会导致数据丢失或文件系统损坏,谨慎使用。
-i: 在重启前,先关闭所有网络接口。
-n: 重启前不执行sync操作,sync会将内存中的数据同步到磁盘,跳过此操作可能造成数据丢失。

具体示例如下。

# 重启设备
sudo reboot

service

service主要用于管理系统服务的开启和关闭,service一般调用systemctl实现功能,systemctl功能更加全面。

格式: service [服务名] [操作]

start: 启动指定的服务。
stop: 停止指定的服务。
restart: 重启指定的服务。
status: 查看指定服务的当前状态。
reload: 重新加载指定服务的配置文件。
enable: 设置服务在系统启动时自动启动(部分系统支持)。
disable: 禁止服务在系统启动时自动启动(部分系统支持)。

服务的开启是将服务复制到/etc/systemd/system目录下的xx.wants/下,反之则关闭服务。

# 开启ssh服务
sudo service ssh start

# 关闭ssh服务
sudo service ssh stop

shutdown

shutdown主要用于关闭系统和电源。

格式: shutdown [OPTIONS…] [TIME] [WALL…]

# 选项
-P: 同时关闭电源
-c: 取消关机计划

# 延时实际
TIME:指定关机延时时间,单位s

具体示例如下。

# 延时1s关机
shutdown 1

source

source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录,使用source执行的脚本,不开启子进程。

格式: source filename [arguments]

具体示例如下。

# 不开启子进程的方式执行脚本
source file/ch01-03/test.sh
# 不开启子进程的方式执行脚本
. file/ch01-03/test.sh

# 开启子进程执行脚本
./file/ch01-03/test.sh
bash file/ch01-03/test.sh

stat

stat命令用于查看文件的属性信息。

格式: stat [OPTIONS] [FILE]…

-c: 显示文件的大小,单位为字节
-f: 显示文件类型
-i: 显示文件最后修改时间
-m: 显示文件权限

具体示例如下。

# 显示文件的大小,单位为字节
stat -c %s file.txt

sudo

sudo主要用于使用管理员权限执行命令,或者切换到root用户。

格式: sudo [OPTIONS] [COMMAND] [ARG]…

-h: 显示帮助信息
-V: 显示版本信息
-l: 列出所有可执行命令
-v: 验证用户凭证并更新时间戳
-k: 删除缓存的认证信息
-K: 完全移除用户的时间戳
-s: 运行由 SHELL 环境变量指定的 shell 或 passwd 中指定的 shell
-H: 将 HOME 环境变量设置为目标用户的主目录
"-u user": 以指定用户身份而非 root 身份运行命令
-i: 模拟目标用户的初始登录,包括环境变量
-E: 运行命令时保留用户的环境变量
-A: 使用 askpass 程序提示输入密码
-b: 运行后台命令
-p: 使用自定义密码提示

具体示例如下。

# 以root权限执行命令
sudo apt-get update

# 切换到root用户
sudo su

# 修改sudo的配置,可以在环境下支持sudo命令
visudo

systemctl

systemctl是用于管理系统服务的命令,是debian自带的管理方法。可通过命令”sudo apt install systemd”安装。服务在使能前,需要放置在”/etc/systemd/system”,才能被成功使能或者关闭。

格式: systemctl [选项] [命令] [单元名称]

start: 启动指定的服务。
stop: 停止指定的服务。
restart: 重启指定的服务。
reload: 重新加载指定服务的配置文件。
status: 查看指定服务的当前状态。
enable: 启用服务,使其在开机时自动启动。
disable: 禁用服务,使其在开机时不自动启动。
is-active: 查看指定服务是否正在运行。
is-enabled: 查看指定服务是否已启用。

具体示例如下。

#使能某项服务
systemctl enable [].service

#关闭某项服务
systemctl disable [].service

#查询某项服务的详细状态
systemctl status syslog

#查询某项服务的工作状态
systemctl is-active syslog

#开机和关闭服务
systemctl start/stop syslog

test

test和[]功能一致,用于判断语句输出是否满足条件,满足输出真,可通过”echo $?”查看输出,输出0表示满足要求。大多数情况下[[]]和[]/test是通用的,只有两种情况,一种是内部使用&&或   逻辑语句,另一个是使用正则匹配。

格式: test [OPTIONS] EXPRESSION

# 文件测试
-e: 测试文件是否存在
-f: 测试文件是否存在且为普通文件
-d: 测试文件是否存在且为目录
-r: 测试文件是否存在且可读
-w: 测试文件是否存在且可写
-x: 测试文件是否存在且可执行
-s: 测试文件是否存在且大小不为0
-L: 测试文件是否存在且为符号链接

# 字符串比较
-z: 测试字符串是否为空
-n: 测试字符串是否不为空
string1 = string2: 测试字符串1是否等于字符串2
string1 != string2: 测试字符串1是否不等于字符串2

# 数值比较
-eq: 测试两个数值是否相等
-ne: 测试两个数值是否不相等
-gt: 测试第一个数值是否大于第二个数值
-ge: 测试第一个数值是否大于等于第二个数值
-lt: 测试第一个数值是否小于第二个数值
-le: 测试第一个数值是否小于等于第二个数值

# 逻辑运算
! expression: 逻辑非,返回0表示真,返回1表示假
expression1 -a expression2: 逻辑与,返回0表示真,返回1表示假
expression1 -o expression2: 逻辑或,返回0表示真,返回1表示假

示例如下。

#比较值并查看
test a == a
echo $?

#判断当前用户是否为root, 输出Y/N
[ $USER == root ] && echo Y || echo N

#逻辑与,-a相当于&&
[ a1 == a -a b == b ] && echo Y || echo N

#逻辑或,-o相当于||
[ a1 == a -o b == b ] && echo Y || echo N

#1. 使用&&,||符合,需要使用[[]], 而不是[]
[[ a == a && b == b ]] && echo Y || echo N

#2.[[]]中支持正则匹配,[]不支持
name="12asffaa"
[[ $name =~ [0-9] ]] && echo Y || echo N
[[ $name =~ [A-Z] ]] && echo Y || echo N

#3.分组匹配
[[ a == a && ( b == b || c == d ) ]] && echo Y || echo N

top

top是一个Linux命令行工具,用于实时监视系统状态和进程活动。

格式: top [OPTIONS]

# 常用交互式命令
q或Ctrl+C: 退出top
h或?: 显示帮助信息
k: 中止进程(输入PID)
r: 重新设置进程PID
M: 按内存使用率排序
P: 按CPU使用率排序
T: 按进程使用时间排序
u: 显示特定用户的进程
f: 添加或者删除显示字段
o: 改变显示字段的顺序
W: 将当前设置保存到配置文件

# 常用选项
-d: 设置刷新间隔
-n: 设置刷新次数
-p: 监控指定用户的进程
-u: 显示指定用户的几次呢
-b: 批处理模式
-i: 不显示空闲进程

示例如下。

# 查询当前cpu的使用率,当前进程
top

tr

tr命令是Linux系统中的一个文本处理工具,主要用于转换或删除字符。它的全称是 “translate” 或 “transliterate”,可以对标准输入的数据进行字符替换、删除或压缩操作,并将结果输出到标准输出

格式: tr [选项] [字符集1] [字符集2]

-c或-C: 使用字符集1的补集
-d: 删除字符集1中的字符
-s: 压缩重复字符为单个字符
-t: 截断字符集1,使其与字符集2长度相同

具体示例如下。

# 合并多余的a
echo "aaa bbb" | tr -s "a"

# 合并空格
echo "a   b   c" | tr -s " "

tree

tree命令用于以树状图的形式显示目录结构。它可以递归地显示目录下的所有子目录和文件,并以缩进的方式展示层级关系。

格式: tree [选项] [目录]

-d: 仅显示目录
-f: 显示完整路径
-L level: 限制显示的层级数

具体示例如下。

# 显示当前目录的树状结构
tree

# 显示当前目录下的子目录树状结构
tree -d

# 显示当前目录下的子目录树状结构,最多显示2层
tree -d -L 2

tty

tty命令用于显示当前终端设备的文件名。在Linux系统中,每个终端窗口或会话都对应一个终端设备文件。

格式: tty [选项]

-s: 静默模式,不显示输出,只返回退出状态
--help: 显示帮助信息
--version: 显示版本信息

示例如下。

# 显示当前的窗口对象
tty

# 在当前窗口输出数据
echo "hello world" > $(tty)

type

Linux中的type命令用于显示指定命令的类型,判断给出的指令是内部指令还是外部指令.

格式: type [选项] [命令行]

-a: 显示所有匹配的路径
-t: 显示命令的类型
-p: 仅显示外部命令的路径

具体示例如下。

# 获取ls所在的目录
type ls

# 显示所有匹配的路径
ls -a ls

ulimit

限制shell启动进程所占用资源的命令

格式: ulimit [option] [size]

-a : 显示当前所有资源限制
-s : 设置线程分配的栈大小
-S : 使用“软”资源限制
-c : 所创建的核心转储文件(core files)的最大大小。

具体示例如下。

# 显示当前所有资源限制
ulimit -a

# 设置线程分配的栈大小
ulimit -s [stack_size]

unalias

unalias 是一个用于删除命令别名的命令。

用法:unalias [选项] [别名]

-a: 删除所有别名

具体实例如下。

# 删除单个别名
unalias myalias

# 删除所有别名
unalias -a

uname

uname命令用于显示系统信息,包括内核名称、主机名、内核版本、处理器架构等。它是获取Linux系统基本信息的重要工具。

格式: uname [OPTIONS]

-a: 显示所有信息
-s: 显示内核名称
-n: 显示主机名
-r: 显示内核发布版本
-v: 显示内核版本
-m: 显示处理器架构
-p: 显示处理器类型
-i: 显示硬件平台
-o: 显示操作系统名称
--help: 显示帮助信息
--version: 显示版本信息

示例如下。

# 查询详细内核版本信息
uname -a

# 显示机器的处理器架构
uname -m

# 查询内核版本信息
uname -r

unset

unset命令用于取消变量的定义,从当前shell环境中删除指定的变量。

格式:unset [变量名]

具体示例如下。

# 取消变量定义
# 创建变量
val=1

# 显示变量
echo $val

# 取消变量定义
unset val

# 显示变量
echo $val

uptime

uptime是一个用于显示系统已经运行了多长时间的命令。它还会显示当前登录的用户数和系统的平均负载。

格式:uptime [选项]

-p: 以简洁格式输出系统运行时长
-h: 显示帮助信息
-s: 显示系统启动时间
-V: 显示版本信息

具体示例如下。

# 显示系统已经运行了多长时间的命令
uptime

# 显示系统启动时间
uptime -s

w

w命令用于显示当前登录的用户列表,包括用户名、登录时间、登录终端、用户状态等信息。

wc

wc命令统计数据的行数,可以配置读取文件,读取信息来进行统计。

格式:wc [选项] [文件名]

-c: 显示字符数
-l: 显示行数
-m: 显示字节数
-L: 显示最长行数
-w: 显示单词数
--help: 显示帮助信息
--version: 显示版本信息

示例如下。

# 统计文件字符数
wc -c file.txt

# 统计文件的行数
cat file.txt | wc -l

whereis

whereis是一个用于查找可执行文件、源代码文件和帮助文件在文件系统中的位置的Linux命令。它只能用于程序名的搜索,并搜索二进制文件、man说明文件和源代码文件。

格式:whereis [选项] 命令名

-b: 仅显示二进制文件
-B <path>: 搜索指定二进制路径下的文件
-m: 仅显示手册和信息文件
-M <path>: 搜索指定手册信息路径下的文件
-s: 仅显示源代码文件
-S <path>: 搜索指定源代码路径下的文件
-f: 仅显示文件
-h: 显示帮助信息
-V: 显示版本信息
# 查询命令和相关手册文件所在路径
whereis chmod

# 只查询二进制文件
whereis -b libc.so -B /usr/lib

which

which是一个用于查找并显示指定命令的绝对路径的命令。它在环境变量$PATH中指定的目录中搜索相应的指定命令,并返回找到的第一个匹配项的完整路径。

格式:which [选项] 命令名

-a: 显示所有匹配的路径

具体示例如下。

# 查询显示命令的位置
which ls

# 显示所有匹配的路径
which -a iptables 

who

who用于查询当前设备的登录账户。

格式:who [选项]

-a: 显示所有登录过用户
-l: 显示正在的登录用户
-help: 显示帮助信息
--version: 显示版本信息

具体示例如下。

# 查询登录过的用户
who -a

# 查询登录用户数目
who -a | wc -l

# 显示正在的登录用户
who -l | awk '{print $2}'

whoami

whoami 是一个用于显示当前登录用户的用户名的命令。

格式:whoami

示例如下。

# 显示当前登录用户的用户名
whoami

xrandr

设置界面的分辨率

#方法
xrandr --output <显示器标识符> --mode <新分辨率>

#显示当前支持的界面和分辨率
xrandr

#设置分辨率
xrandr --output XWAYLAND0 --mode "1360x768"

disk_manage

dd

命令用于读取、转换并输出数据,参数说明如下。

这里有些特殊的设备支持dd读取。

  1. /dev/zero特殊输入文件,提供无限的空字符(0)
  2. /dev/null只写文件, 丢弃接收到的数据
  3. /dev/random: 带堵塞的获取随机数文件,硬件生成随机数不足时堵塞读取操作
  4. /dev/urandom: 不会堵塞,随机数不足时,它会返回伪随机数
# 读取boot0_offline_secure_sun50iw9p1.bin值,写入到emmc中(块大小512,跳过256KB地址)
dd if=boot0_offline_secure_sun50iw9p1.bin of=/dev/block/mmcblk0 bs=512 seek=512 conv=notrunc

# 对于SD卡起始的1M容量清零
dd if=/dev/zero of=/dev/sdb bs=1024 count=1024

#跳过1kb,将u-boot写入到SDCard中
dd if=u-boot-imx6ull-14x14-ddr512-emmc.imx of=/dev/sdb bs=1024 seek=1 conv=fsync

#dd从指定外设读取数据,并输出显示
sudo dd if=/dev/random bs=1 count=4 | hexdump -C
sudo dd if=/dev/urandom bs=1 count=4 | hexdump -C

df

在Linux中,df命令用于检查文件系统的磁盘空间占用情况。它可以显示硬盘被占用了多少空间,以及还剩下多少空间等信息。

# 显示已经挂载的磁盘分区
df -h

# 显示所有磁盘相关信息
df -a

du

用于检查文件系统的磁盘空间占用情况。

用法: du [选项] <目录>

-a:递归显示指定目录下所有文件和子目录的磁盘占用情况。
-b:以字节为单位显示磁盘占用情况。
-c:显示总磁盘占用情况。
-h:以人类可读的格式显示磁盘占用情况。

具体示例如下。

# 查询目录下数据的存储占用情况
du -a

dumpe2fs

导出 ext2/ext3/ext4 文件系统信息。

dump

ext2/3/4 文件系统备份工具。

e2fsck

检查 ext2/3/4 文件系统的错误。

fdisk

管理磁盘分区的命令行工具,主要用于创建、删除、修改和查看磁盘分区。

用法: fdisk [选项] <磁盘设备>

-l: 列出系统中所有磁盘的分区表信息
-s: 显示指定分区的大小
-u: 指定显示分区大小的单位(例如, sectors、 cylinders、 heads 等
-b: 指定扇区大小(通常为512字节)

具体示例如下。

# 列出所有磁盘的分区表信息(部分磁盘需要权限才能读取,需要sudo权限)
fdisk -l

# 交互式的分区命令
fdisk <disk>

fsck

用于检查并修复Linux文件系统。

mount

mount命令用于挂载文件系统,它可以将一个设备的文件系统挂载在指定目录。

用法: mount [选项] <设备> <挂载点>

"-t <文件系统类型>": 指定要挂载的文件系统类型,例如 ext4、vfat 等
"-o <选项>": 挂载时的选项
  - ro:以只读模式挂载文件系统。
  - rw:以读写模式挂载文件系统。
  - remount:重新挂载文件系统。
  - loop: 将普通文件虚拟成块设备进行挂载,用于挂载磁盘镜像文件
  - async: 以异步方式进行 I/O 操作,可能提高性能,但存在数据丢失风险
  - sync: 以同步方式进行 I/O 操作,可能降低性能,但可以保证数据 accuracy
  - noauto: 不自动挂载文件系统,需要手动挂载
  - user:允许普通用户挂载文件系统
  - offset=<偏移量>: 指定挂载的起始扇区偏移量,通常用于挂载镜像文件时指定起始位置
-l: 列出当前已挂载的文件系统
-v: 显示详细的挂载过程信息。
-f: 模拟挂载操作,并不实际挂载文件系统,用于测试

具体示例如下。

# 以vfat的格式,将U盘/dev/mmcblk1p1挂载到/mnt/disk/目录
mkdir /mnt/disk
mount -t vfat /dev/mmcblk1p1 /mnt/disk/

# 将u盘/dev/sdb挂载目录
mount -t vfat /dev/sdb /mnt/disk/

# 查看当前已经挂载的目录
mount | grep /mnt/disk

# 挂载mbr格式的img文件
sudo mount -o loop *.img mnt/

# 挂载mbr格式, 起始sector指定的img文件
# start=1024, 则实际偏移为1024*512=524288
# start=2048, 则实际偏移为2048*512=1048576
sudo mount -o loop,offset=1048576 *.img mnt/

# nfs mount
sudo mount -t nfs -o nolock,nfsvers=3 127.0.0.1:/home/freedom/Desktop/remote_manage/sdk/build/nfs_root/arm /mnt/

# 解锁只读权限
sudo mount -n -o remount,rw /mnt/disk

mkfs

创建文件系统。

mkswap

创建SWAP分区。

parted

分区工具,用于创建、修改、查看和删除磁盘分区。

partprobe

告诉内核更新分区表。

resize2fs

改变文件系统大小。

sync

刷新文件系统缓存。

swapon

启动SWAP分区。

swapoff

停止SWAP分区。

umount

卸载已挂载的文件目录命令,格式: umount [选项] [块设备/文件目录], 在卸载时保证没有任何进程使用该目录,否则会卸载失败。

# 移除指定块设备,被占用则失败
sudo umount /dev/sdb

# 移除指定目录上挂载的块设备,被占用则失败
sudo umount /media/run/

# 移除指定目录上挂载的块设备,被占用会等待占用解除后移除
sudo umount -l /media/run/

net_manage

dig

dig命令用于查询域名的DNS信息。

host

基于dns查询域名和ip的对应关系。

# 查询百度的ip地址
host www.baidu.com

ifdown

ifdown命令用于关闭网络设备。

用法: ifdown [选项] <网络设备>

ifconfig

ifconfig是Linux中用于显示或配置网络设备(网络接口卡)的命令, 配置和显示Linux内核中网络接口的网络参数,配置网卡的IP地址等网络配置。

用法:ifconfig [选项] [网络设备]

-a: 显示所有网络接口的信息,包括未激活的接口。
-s: 以简短格式显示网络接口的信息。
-v: 显示详细的网络接口信息。
-h: 显示帮助信息。

具体示例如下。

# 安装支持ifconfig
sudo apt-get install net-tools

# 显示当前所有的网络设备
ifconfig -a

# 启用或禁用网络接口
ifconfig eth0 up/down

# 配置MAC地址
ifconfig eth0 hw ether 00:11:22:aa:bb::cc

# phy强制模式,设置100Mbps, 全双工,自动协商
ethtool -s eth0 speed 100 duplex full autoneg on

# 常见配置网络命令, 启动网络 
ifconfig eth0 192.168.2.99 netmask 255.255.255.0
route add default gw 192.168.2.1
ifconfig eth0 up

ifconfig eth1 192.168.2.100 netmask 255.255.255.0
ifconfig eth1 up

ifup

ifup命令用于启动已关闭的网络设备。

lsof

lsof命令用于查看正在使用的网络端口。

mail

邮件发送命令。

mutt

mutt是一个基于文本的邮件阅读工具,它可以发送邮件,查看邮件,管理邮件,以及发送邮件。

netstat

netstat是一个用于显示网络连接、路由表、接口统计等网络相关信息的命令行工具。

#列出所有活动的网络连接
netstat -a

#列出活动的tcp/udp连接
netstat -at/-au

#查看当前监听得端口
netstat -tunlp 

nmap

nmap是一个用于扫描网络和主机的命令行工具,它可以帮助用户快速了解网络环境。

nslookup

查询internel名称服务器

# 查询百度的ip地址
nslookup www.baidu.com

ping

查询网络主机连接状态

# ping检测和百度的连接
ping www.baidu.com

# ping指定ip的主机
ping 192.168.2.34

# 指定源IP地址,ping指定主机(用于双phy系统架构)
ping -I 192.168.2.100 192.168.2.34

route

显示和设置 linux 系统的路由表。

用法: route [选项]

示例如下所示。

# 设置默认网关
route add default gw 192.168.2.1

tcpdump

tcpdump 是一个用于捕获和显示网络流量的命令行工具,它可以帮助用户查看网络流量,并检查网络中的错误和异常。

telnet

telnet 是一种用于通过网络远程登录到另一台计算机的命令行工具,它基于Telnet协议工作。Telnet协议是一种应用层协议,允许用户在本地终端上操作远程计算机,如同直接在远程计算机的控制台工作一样。不过,由于Telnet协议以明文形式传输数据,存在安全风险,如今逐渐被更安全的SSH协议替代。

格式: telnet [-4] [-6] [-8] [-E] [-L] [-a] [-d] [-e char] [-l user] [-n tracefile] [ -b addr ] [-r] [host-name [port]]

-4: 强制使用IPv4地址。
-6: 强制使用IPv6地址。
-8: 允许输入和输出8位字符。
-E: 禁用转义字符功能。
-L: 使用8位输出,且禁用本地字符集转换。
-a: 尝试自动登录。
-d: 开启调试模式,输出详细的调试信息。
"-e char": 设置退出Telnet会话的转义字符,默认是 Ctrl+]。
"-l user": 指定登录到远程主机时使用的用户名。
"-n tracefile": 将网络连接的跟踪信息记录到指定文件中。
"-b addr": 指定本地使用的源地址。
-r:使用类似 rlogin 的行编辑功能。

具体示例如下。

# 指定登录用户名连接远程主机
telnet -l username example.com

# 连接到指定端口的远程主机
telnet example.com 80

traceroute

traceroute 是一个网络诊断工具,用于跟踪数据包从源主机到目标主机所经过的路径。它通过发送一系列的ICMP回显请求(ping)或UDP数据包到目标主机,并记录每个路由器的IP地址和响应时间,从而帮助用户了解网络连接的情况。

用法: traceroute [选项] 目标主机

-I: 使用ICMP回显请求(ping)进行跟踪。
-U: 使用UDP数据包进行跟踪。
-T: 使用TCP SYN数据包进行跟踪。
-p: 指定目标端口号(默认为33434)。
-m: 设置最大跳数(默认30)。
-n: 不解析主机名,直接显示IP地址。

具体示例如下。

# 使用ICMP回显请求跟踪到目标主机的路径
traceroute -I www.baidu.com

# 使用UDP数据包跟踪到目标主机的路径
traceroute -U www.baidu.com

# 使用TCP SYN数据包跟踪到目标主机的路径
traceroute -T www.baidu.com

# 指定目标端口号
traceroute -p 80 www.baidu.com

# 设置最大跳数
traceroute -m 20 www.baidu.com

scp

用于通过ssh远程传输文件的命令,scp一般是在ssh安装后增加的功能。

格式: scp [选项] [源文件/目录] [目标地址]

-r: 递归复制整个目录及其子目录和文件。
-P: 指定远程主机的SSH端口号。
-i: 指定用于身份验证的私钥文件,常用于基于密钥的认证。
-C: 启用数据压缩,减少网络传输的数据量,提高传输速度。
-p: 保留源文件的修改时间、访问时间和权限模式
# 向指定ip的特定目录传输文件
scp local_file.txt user@remote_host:/path/to/remote/directory

# 从指定主机目录下载文件
scp user@remote_host:/path/to/remote/file.txt local_directory/

ss

ss是Linux系统中用于显示网络套接字统计信息的命令,它可以替代netstat命令,并且提供更详细、更快速的网络连接信息。ss能够显示多种类型的网络连接,包括TCP、UDP、UNIX域套接字等。

格式: ss [选项] [过滤条件]

# 常见选项
-n: 以数字格式显示地址和端口号,而不是解析为域名和服务名。
-t: 仅显示TCP套接字。
-u: 仅显示UDP套接字。
-l: 仅显示处于监听状态的套接字。
-p: 显示使用套接字的进程信息。
-a: 显示所有套接字,包括监听和非监听状态。
-e: 显示详细的套接字信息。
-o: 显示计时器信息。

# 常见过滤条件
"state <状态>": 按套接字状态过滤,常见状态有established(已建立连接)、listening(监听状态)、closing(已关闭)等。
"src <源地址>": 按源地址过滤
"dts <目的地址>": 按目的地址过滤

具体示例如下。

# 显示所有tcp连接
ss -tna

# 显示监听在22端口的tcp连接
ss -tna state listening src :22

# 显示所有udp连接
ss -una

# 显示所有监听在0.0.0.0的udp连接
ss -una src 0.0.0.0

ssh

远程连接访问ssh服务器,ssh使用的默认配置文件为/etc/ssh/ssh_config;其中密钥和加密算法要和服务器端所匹配,才能够正常连接。

格式: ssh [选项] [用户]@[主机地址] [命令]

-p: 端口号,指定SSH服务器监听的端口,默认端口是22。
-i: 私钥文件,指定用于身份验证的私钥文件,常用于基于密钥的认证。
-X: 启用X11转发,允许在本地显示远程服务器上的图形界面程序。
-v: 显示详细的连接过程信息,用于调试。
-C: 启用数据压缩,减少网络传输的数据量,提高传输速度。

具体示例如下。

# 远程连接
ssh user@192.168.1.100

# 指定端口远程连接
ssh user@192.168.1.100 -p 1000

wget

wget是一个用于从网络上下载文件的命令行工具。它支持HTTP、HTTPS 和 FTP 协议,并且可以在后台运行,非常适合在脚本中使用。

用法: wget [选项] [URL]

-O: 指定输出文件名。
-c: 断点续传。
-b: 后台下载。
-q: 安静模式,不显示下载进度。
-P: 指定下载目录。
-i: 从文件中读取 URL 列表。
-r: 递归下载。
-np: 不递归到父目录。
-l: 指定递归深度。
-A: 指定要下载的文件类型。
-R: 指定要排除的文件类型

具体示例如下。

# 下载单个文件
wget https://example.com/file.txt

# 指定输出文件名
wget -O newfile.txt https://example.com/file.txt

# 断点续传
wget -c https://example.com/bigfile.zip

# 后台下载
wget -b https://example.com/bigfile.zip

# 从文件中读取 URL 列表
wget -i url_list.txt

# 递归下载
wget -r -np -l 1 -A .html,.jpg https://example.com/

vim_command

命令名称 功能说明 备注
i 进入编辑模式  
:q! 直接退出 :x等同
:wq 保存退出  
:set number 显示行号  
光标动作 光标移动 数字+光标
h 光标左移
l 光标右移
k 光标上移
j 光标下移
0 光标移到行首
$ 光标移到行尾
H 光标移到屏幕上显示的第一行
L 光标移到屏幕上显示的最后一行
M 光标移到屏幕的中间一行
nG 光标移到第 n 行
w或 W 将光标右移至下一个单词的词首
e 或 E 移动到单词尾部
b 或B 移动到单纯首部
Ctrl+G 显示当前文件状态
:n 移动到指定行
:$ 移动到最后行
dd 删除整行  
D/d$ 删除光标到行尾的数据  
x/X 删除单个字符  
yy 复制光标所在的行  
p 复制行到光标处  
u/U 取消上一个命令  
命令名称 功能说明 备注
/ 在光标处向后搜索内容 n下一处 N上一处
? 在光标处向前搜索内容 n下一处 N上一处
:s 将前面替换为后面 :s/text1/text2
:m,ns 将m:n行之间前面替换为后面 :2,10s/text1/text2

next_chapter

返回目录

直接开始下一章节:Linux平台软件安装使用方法