【Linux】Linux基础命令
一些常用的Linux命令,还有一些驱动开发会用到的命令。
部分图片和经验来源于网络,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。
专栏目录:记录自己的嵌入式学习之路-CSDN博客
目录
1 su及sudo
2 文件及目录的基础操作
2.1 列出文件
2.2 创建目录
2.3 删除文件或目录
2.4 重命名文件
3 修改文件的权限
3.1 数字表示法:
3.2 符号表示法:
3.3 递归设置子目录:
4 修改文件所有者
4.1 命令
4.2 参数
5 文件信息输出
5.1 文件类型显示
5.2 文件详细信息显示
6 查看设备的硬盘及其详情
6.1 df命令(就是disk free的缩写)
6.2 lsblk命令(就是list block的缩写)
6.3 fdisk命令
7 软件查询及安装
7.1 已安装软件查询
7.2 软件所有版本查询
7.3 软件详情查询
7.4 软件安装
7.5 软件卸载
7.6 清理不再使用的依赖包
7.7 忽略特定软件包更新
7.8 使包不会被autoremove清理
8 echo
8.1 作用
8.2 基础
8.3 输出字符串到终端
8.4 输出字符串到文件
8.5 输出shell命令结果
8.6 echo前面加@
8.7 引用变量
8.8 开启转义(可以使用颜色)
9 Linux的软连接和硬链接
9.1 硬链接(Hard Link)
9.2 软链接(Symbolic Link)
10 查看系统的设备、设备树
10.1 查看当前设备
10.2 查看当前设备树
11 查看当前运行的所有程序及其PID
1 su及sudo
请参考这位大佬的文章:
su、sudo、sudo su、sudo -i sudo -l的用法和区别-CSDN博客文章浏览阅读4.9w次,点赞42次,收藏164次。sudo -l 查看sudo的权限;su是申请切换root用户,需要申请root用户密码。有些Linux发行版,例如ubuntu,默认没有设置root用户的密码,所以需要我们先使用sudo passwd root设置root用户密码。而sudo su是当前用户暂时申请root权限,所以输入的不是root用户密码,而是当前用户的密码。sudo是用户申请管理员权限执行一个操作,而此处的操作就是变成管理员。在sudo于1980年前后被写出之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺_sudo -lhttps://blog.csdn.net/mutou990/article/details/107724302
2 文件及目录的基础操作
2.1 列出文件
ls [options]
常用命令:
ls -l:列出当前目录非隐藏文件的详细信息;
ls -a:列出当前目录所有文件,包括隐藏文件。
2.2 创建目录
mkdir [options] [dir]
其中,options:
-m:设置创建的目录的文件模式(权限)。
-p:创建必要的父目录,如果这些目录不存在的话。
-v:在每次创建新目录时显示消息。
2.3 删除文件或目录
rm [options] <name>
其中,options:
-i:删除前逐一询问确认。
-f:即使原文件属性设为只读,也直接删除,无需逐一确认。
-r:递归删除,用于删除目录及其子目录和文件。
示例:
rm -rf *:删除当前工作目录下的所有文件和目录。
注意:
要使用rm加上通配符删除隐藏文件的话,文件名前的.一定要留下,例如:
要删除.123.cmd和.abc.cmd,光使用rm *.cmd是无效的,需要使用rm .*.cmd才行。
2.4 重命名文件
mv -i <old_name> <new_name>
加-i是为了避免有别的文件就叫new_name,若有,加了-i就会提示是否覆盖。
3 修改文件的权限
3.1 数字表示法:
chmod 755 <file_path>
其中,755表示所有者有读、写、执行权限(7=4+2+1),组用户和其他用户有读、执行权限(5=4+1)。因此,只需要记住4是读、2是写、1是执行,就可以畅通无阻地设置权限了,只需要将单个的不同数字加起来就是需要设置的最终单数字了。例如,需要设置所有者读写执行(4+2+1=7),同组用户读执行(4+1=5),其他用户只读(4),那么最终设置的权限就是754。
至于上述方法的由来也很简单,就是实际上权限由一个9位的二进制数组成,而每个独立权限(所有者/同组/其他)占3位,对于单独一个来说,所有的枚举就是读100(4)、写010(2)、执行001(1),所以单独一个权限就是这三个数的组合相加的和,而完整的一个权限就是三个和的拼接。
3.2 符号表示法:
chmod u+rwx,g+rx,o+rx <file_path>
3.3 递归设置子目录:
chmod -R 755 <file_path>
若需要同时设置子目录的权限,就要使用-R参数进行递归设置。
4 修改文件所有者
4.1 命令
chown [OPTION]... [OWNER] [: [GROUP]] FILE...
4.2 参数
5 文件信息输出
5.1 文件类型显示
file <filename>
5.2 文件详细信息显示
stat <filename>
6 查看设备的硬盘及其详情
6.1 df命令(就是disk free的缩写)
显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
最常用的命令:sudo df -Th
6.2 lsblk命令(就是list block的缩写)
较为直观地将硬盘的大小、从属关系、挂载情况等都列出来了。
其中,如下图从RM(可移动设备)列就能发现sdb为U盘,从MOUNTPOINT就能看出其没有挂载在任何路径上。
用法:
lsblk [选项] [<设备> ...]
作用:
列出块设备的信息。
选项:
-a, --all 打印所有设备
-b, --bytes 以字节为单位而非易读的格式来打印 SIZE
-d, --nodeps 不打印从属设备(slave)或占位设备(holder)
-D, --discard 打印时丢弃能力
-z, --zoned print zone model
-e, --exclude <列表> 根据主设备号排除设备(默认:内存盘)
-f, --fs 输出文件系统信息
-i, --ascii 只使用 ascii 字符
-I, --include <列表> 只显示有指定主设备号的设备
-J, --json 使用 JSON 输出格式
-l, --list 使用列表格式的输出
-T, --tree use tree format output
-m, --perms 输出权限信息
-n, --noheadings 不打印标题
-o, --output <列表> 输出列
-O, --output-all 输出所有列
-p, --paths 打印完整设备路径
-P, --pairs 使用 key=“value” 输出格式
-r, --raw 使用原生输出格式
-s, --inverse 反向依赖
-S, --scsi 输出有关 SCSI 设备的信息
-t, --topology 输出拓扑信息
-x, --sort <列> 按<列>对输出排序
-h, --help display this help
-V, --version display version
输出数据的列含义:
NAME 设备名
KNAME 内部内核设备名称
MAJ:MIN 主:次 设备号
FSTYPE 文件系统类型
MOUNTPOINT 设备挂载位置
LABEL 文件系统标签
UUID 文件系统 UUID
PARTTYPE 分区类型 UUID
PARTLABEL 分区 LABEL
PARTUUID 分区 UUID
PARTFLAGS 分区标志
RA 该设备的预读(read-ahead)
RO 只读设备
RM 可移动设备
HOTPLUG 可移动或热插拔设备(usb, pcmcia, ...)
MODEL 设备标识符
SERIAL 磁盘序列号
SIZE 磁盘容量
STATE 设备的状态
OWNER 用户名
GROUP 组名
MODE 设备节点权限
ALIGNMENT 对齐偏移量
MIN-IO 最小 I/O 大小
OPT-IO 最优 I/O 大小
PHY-SEC 物理扇区大小
LOG-SEC 逻辑扇区大小
ROTA 转动设备
SCHED I/O 调度器名称
RQ-SIZE 请求队列大小
TYPE 设备类型
DISC-ALN 忽略对齐偏移量
DISC-GRAN 忽略粒度
DISC-MAX 忽略最大字节数
DISC-ZERO 忽略零数据
WSAME 写相同的最大字节数
WWN 惟一存储标识符
RAND 添加随机性
PKNAME 内部上级内核设备名称
HCTL SCSI 的 Host:Channel:Target:Lun
TRAN 设备传输类型
SUBSYSTEMS 对成链的子系统去重
REV 设备修订版本
VENDOR 设备制造商
ZONED zone model
6.3 fdisk命令
sudo fdisk -l
相对来说,这个命令没有lsblk这么直观。
7 软件查询及安装
7.1 已安装软件查询
apt list –installed <package_name>
7.2 软件所有版本查询
apt list -a <package_name>
7.3 软件详情查询
apt show <package_name>
可查询软件的版本、依赖、开源协议等。
7.4 软件安装
sudo apt install <package_name>
sudo apt install <package_name>=<version_number>
其中,后者为安装指定版本软件。
7.5 软件卸载
sudo apt remove <package_name>
7.6 清理不再使用的依赖包
sudo apt autoremove
7.7 忽略特定软件包更新
sudo apt-mark hold <package_name>:将软件包标记为保留,更新时不更新该软件包。
sudo apt-mark unhold <package_name>:解除软件包的保留标记,更新时同时更新该软件包。
sudo apt-mark showhold:查看被保留的软件包。
7.8 使包不会被autoremove清理
sudo apt-mark manual <package_name>:将软件包标记为手动安装;
8 echo
8.1 作用
输出字符串,可输出到终端或输出到文件中。
8.2 基础
echo [options] [input string]
其中,options:
-n:不打印换行符,包括默认的尾部换行符。
-e:开启转义,支持转义字符;
-E:关闭转义(默认状态)。
8.3 输出字符串到终端
echo <需要输出的文本>
echo “<需要输出的文本>”
8.4 输出字符串到文件
(1) 覆盖写入
echo <需要输出的文本> > file
echo “<需要输出的文本>” > file
(2) 追加写入
echo <需要输出的文本> >> file
echo “<需要输出的文本>” >> file
8.5 输出shell命令结果
(1) 格式较乱的输出
echo `<shell命令>`
echo $(shell命令)
(2) 原格式输出
echo “`<shell命令>`”
echo “$(shell命令)”
8.6 echo前面加@
表示不显示当前命令的执行过程到终端中,如果命令为echo hello,则终端事实上会输出echo hello以及hello。但如果前面加上@,则只会输出hello,echo的执行过程不会被输出。
8.7 引用变量
在echo输出的文本中可以使用$(<变量名>)引用变量,自己在命令或Makefile中定义的变量以及系统变量都能引用。
8.8 开启转义(可以使用颜色)
echo默认是关闭转义的,要打开就要加-e。
echo -e <要输出的内容>
其中,在输出的内容中加入颜色相关的代码就可以实现对文字颜色和背景颜色的改变。
颜色相关转义字符的格式:
\033[字背景颜色;文字颜色m
其中,字背景颜色;在不需要修改的时候可以省略。
除颜色外还能做出闪烁、下划线等显示效果。具体的颜色代码及其他功能代码见这两位大佬的文章:
【Linux】echo命令用法详解-CSDN博客https://blog.csdn.net/NoBack7/article/details/128621182?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522d99920863f1aec04b414c2610ea09ecd%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=d99920863f1aec04b414c2610ea09ecd&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-128621182-null-null.142^v100^pc_search_result_base3&utm_term=echo&spm=1018.2226.3001.4187#1_echo_10echo 命令显示带颜色的字-腾讯云开发者社区-腾讯云
https://cloud.tencent.com/developer/article/1635321
9 Linux的软连接和硬链接
9.1 硬链接(Hard Link)
(1) 命令:
ln [源文件(被链接那个)] [目标文件或目录]
(2) 特性
- 硬链接直接指向文件内容的物理位置,即文件的inode(索引节点)。
- 创建硬链接时,实际上是在文件系统中创建一个新的目录项,它指向原始文件的inode,而不是文件的路径或名称。
- 硬链接不能链接到一个目录上。
- 硬链接和原始文件共享同一个inode,因此它们具有相同的文件大小、权限、所有权等属性。
- 硬链接不能跨越文件系统,即不能为不同文件系统中的文件创建硬链接。
- 删除硬链接不会影响原始文件,只有当所有硬链接都被删除后,文件内容才会被删除。
(3) 辨识:
要判断一个文件一共有多少个硬链接(包含其自身),可以用list -l命令查看文件详情,第2项的数字即为硬链接的总个数。需要注意的是,回收站的硬链接也会被算进去!
(4) 硬链接文件查找
要是想知道一个文件的所有硬链接都在哪里(文件本身也是一个硬链接),可以先读出来文件的inode,再用inode去找,因为同一文件所有硬链接的inode都是一致的。具体方法如下:
ls -il // 获取文件的inode值
find / -inum <文件inode值> // 根据inode值,在根目录下寻找所有的
9.2 软链接(Symbolic Link)
(1) 命令:
ln -s [源文件或目录(被链接那个)] [目标文件或目录]
(2) 特性
- 软链接类似于Windows中的快捷方式,它包含了对目标文件或目录的路径引用。
- 创建软链接时,实际上是创建一个新的特殊文件,其中包含了对目标文件或目录的路径。
- 软链接可以跨越文件系统,可以为不同文件系统中的文件创建软链接。
- 软链接是一个独立的文件,有自己的inode,并且有自己的权限和所有权。
- 如果目标文件被移动或删除,软链接会变成“死链接”(Dangling Link),此时软链接仍然存在,但它不再指向一个有效的目标。
(3) 辨识:
- 要判断一个文件是否为软链接,可以用list -l命令查看文件详情,若文件详情第一位为l即为软链接,其次后面还能看到其指向的文件:
10 查看系统的设备、设备树
10.1 查看当前设备
查看所有字符设备:cat /proc/devices | grep 'chr'
10.2 查看当前设备树
ls /sys/firmware/devicetree/base
或者
ls /proc/device-tree
11 查看当前运行的所有程序及其PID
使用命令:ps