🐧linux下常见的命令
linux下常见的目录
概览
不同于 windows,在一切资源为文件的 linux 系统中,是以树结构来管理文件系统,根节点被称为根目录,用“/”表示
常见目录及功能
/sys 目录详解
偏向硬件和底层,专门用于提供与内核和硬件设备的交互,提供了内核对象及其属性的可视化界面,通常用于监控和管理硬件设备。
例如查看 cpu 的核心线程数量(13600kf:6 大核,4 小核,20 线程)可以访问:
1  | cd /sys/devices/system/cpu  | 
可以看到以下信息:
/proc 目录详解
面向进程/运行时统计信息
/bin 目录详解
usr:并不是 user 的缩写,而是 Unix System Resources ,代表 Unix 系统资源
| 目录 | 含义 | 包含 | 
|---|---|---|
| /bin(binary) | 存放核心 OS 程序和脚本文件,一般是系统预装的程序 | cat,bash,ls,pwd 等 | 
| /user/bin | 存放用户程序的二进制文件,不是系统自带的程序,用户自己安装的发行版程序 | gcc,g++,git 等 | 
| /user/local/bin | 存放用户自己的可执行程序,不会被系统升级而覆盖同名文件,例如 gcc 之后的文件。 | |
| /sbin | 存放 root 用户或者使用 sudo 权限的用户才能访问的程序或者命令 | ifconfig,shutdown,mount 等 | 
存放于 bin 目录下的程序或者脚本是可以直接执行的,执行的顺序取决于环境变量中各个文件夹的前后顺序!
根据环境变量可知.如果这几个 bin 目录中有同一个可执行文件,他们的执行顺序会是:**/usr/local/bin > /sbin > /bin**
/etc 目录详解
存储系统配置文件和全局配置文件
系统配置文件:passwd 文件储存用户密码,group 文件存储用户自定义组信息,hosts 定义本地主机名字和 IP 地址的映射,ssh 存储与 ssh 服务相关配置文件等
全局配置文件:.bashrc 文件存储全系统的 bash 配置等
/run 目录详解
run 目录在 Linux 系统中通常位于根目录下 (/run)。这个目录主要用于存储系统和进程的运行时数据,例如 PID 文件、套接字文件、锁文件等。
一些 run 目录的特点:
- 临时文件系统 (tmpfs): 
/run通常挂载为tmpfs,这意味着它在系统启动时创建,并在系统关闭或重启后清空。 - 早期启动: 由于 
/run是在系统早期启动时创建的,所以它可以用于存储需要在其他文件系统挂载之前可用的临时文件。 - 权限和所有权: 只有 root 用户和特定服务或进程可以在 
/run目录中创建文件。 
常见的子目录和文件:
/run/lock/:锁文件目录,进程用来避免多个实例同时运行。/run/user/:每个用户有自己的运行时目录,用于用户进程的临时文件。/run/systemd/:Systemd 使用的一些运行时数据。
/home 目录详解
在 Linux 系统中,/home 目录是用户的主目录,存放每个用户的个人数据和配置文件。每个用户通常在 /home 目录下有一个独立的子目录,这个子目录以该用户的用户名命名。
一些特点和用途:
- 用户数据存储:用户的个人文件、文档、下载、图片、音乐等通常存储在他们的主目录下(例如 
/home/username)。 - 配置文件:用户配置文件(如桌面环境、应用程序的设置)通常保存在主目录中的隐藏文件夹或文件中。这些文件夹和文件的名称以 
.开头,例如.bashrc、.config等。 - 权限:每个用户通常只对自己的 
/home/username目录有完全的读写权限,而对其他用户的主目录没有权限,除非是系统管理员(root)用户。 - 分区:有些系统管理员在安装操作系统时会将 
/home分为一个单独的分区,这样在系统重装时可以保留用户的数据。 
你可以通过 cd ~ 或 cd /home/username 来切换到当前用户的主目录。
/root 目录详解
在 Linux 系统中,/root 文件夹是专门为 root 用户(超级用户)设置的主目录。与普通用户的主目录通常位于 /home/username 不同,root 用户的主目录位于系统的根目录下,即 /root。
关键点:
权限限制:只有 root 用户或具有足够权限的用户才能访问和修改
/root目录中的文件。普通用户默认无法访问这个目录。用途:root 用户可以在
/root目录中存储自己的配置文件、脚本和数据,类似于普通用户在他们的主目录中保存个人文件的方式。**不要混淆
/**:/root目录不同于根目录/,根目录是整个文件系统的起点,而/root是 root 用户的个人主目录。
参考资料
linux下目录的操作
cd-切换目录
1  | $ man cd  | 
常用方式:
1  | $ cd # 切换到用户家目录  | 
cd -:切换到上次的工作目录,通过 env 中的 OLDPWD 变量记录着工作目录的切换
mkdir-创建目录
1  | $ man mkdir  | 
常用方式:
1  | $ mkdir dir  | 
rmdir-删除空目录
rmdir 不同于 rm -r 只能用来删除空目录
1  | $ man rmdir  | 
常用方式:
1  | $ rmdir dir  | 
通配符
通配符:主要用于文件名匹配,功能简单,常用于操作系统的命令行(如 ls、cp)。常见的通配符包括:
*:匹配任意长度的字符(包括零个字符)。?:匹配单个字符。[abc]:匹配括号内的任意一个单字符。[!abc]:不匹配括号内的任意一个字符
示例:
*.txt匹配所有.txt结尾的文件。file?.txt匹配file1.txt、file2.txt等。
常用方式:
1  | #这是当前的目录结构  | 
ls-查看目录项
1  | $ man ls  | 
常用方式:
1  | $ ls # 查看当前的工作目录  | 
目录项详解
1  | $ ls -l  | 
第 1 列的第一个字母用来表示文件的类型:
-: 普通文件
d(directory): 目录
c(character): 字符设备文件(鼠标,键盘,显示器…)
b(block): 块设备文件(磁盘)
l(symbolic link): 符号链接
s(socket): 本地套接字
p(named pipe): 有名管道第 1 列后面九个字符(分为 3 组)表示权限。依次代表拥有者、拥有组和其他用户的读(r)、写(w)、执行(x)权限。可读则显示 r,可写则显示 w,可执行则显示 x, 没有相关权限则显示-。
第 2 列表示硬链接数。
第 3 列表示拥有者。
第 4 列表示拥有组。
第 5 列表示文件所占空间的大小。
第 6 列表示最近修改时间。
第 7 列为文件名
cp-复制文件或目录
1  | $ man cp  | 
常用方式:
1  | $ cp text1 text2 # 将text1复制到text2中;如果text2存在,则覆盖。  | 
mv-移动文件
mv(move)命令可以用来移动文件和目录,我们也可以用 mv 命令来为文件和目录重命名。
1  | $ man mv  | 
move 为什么没有-r 选项,而 cp 却有?
移动操作(mv)本质上只是改变文件或目录的位置指针,而不涉及复制或删除文件内容。
复制操作(cp)需要复制目录中的所有内容,因此需要 -r 选项来递归复制。
常用方式:
1  | $ mv text1 text2 #将text2重命名为text1;如果text2存在则覆盖  | 
rm-删除文件或目录
rm(remove)命令可以删除文件或目录
1  | $ man rm  | 
常用方式:
1  | $ rm text1 text2 text3 #删除text1,text2,text3  | 
rm 删除的文件是无发找回的,请慎重使用
linux下的文件操作
touch-创建文件
linux 有很多创建文件的方法,最常见的有以下三种:
1  | $ echo "hello world!" > text #创建文件text,并且文件中包含内容“hello world”  | 
查找文件
which-查找可执行程序的路径
1  | $ man which  | 
常用方式:
1  | $ which bash # 查看bash的路径  | 
which 查找的程序路径是和环境变量中 PATH [bin 目录的顺序](# /bin 目录详解)有关的,是 path 中的第一个路径
find-可以在一个目录中递归的查询符合指定要求的文件
1  | $ man find  | 
常用方式:
1  | $ find /usr/include/ ~/Code/filelearning/ -name "stdio.h"  | 
1  | $ find /dev/ -type b  | 
1  | $ find . -size 66M #找大小向上取整为66M的文件  | 
1  | $ find /usr/include -name "stdio.h" # 在/usr/include目录下查找stdio.h文件  | 
权限查找中的数字含义:$ find . -perm 777
1  | $ ls -l  | 
- 第 1 列后面九个字符(分为 3 组)表示权限。依次代表所属用户、同组用户和其他用户的读(r)、写(w)、执行(x)权限。可读则显示 r,可写则显示 w,可执行则显示 x, 没有相关权限则显示-。
 
可以用二进制来简易表示这些用户的所拥有的权限,1 代表有该权限,0 代表无该权限:
rwx rw- r– <==可写为==>111 110 100,
而三个二进制的数组成一个 8 进制的数,于是又可以改写为:
rwx rw- r– <==可写为==>111 110 100<==可写为==>746
所以 777<==可写为==>rwxrwxrwx,即所有用户都有读写执行该文件的权限,
$ find /dev -perm 777:查找可以被所有用户读写执行的文件
查看文件
cat-查看文件所有内容
1  | $ man cat  | 
常见用法
1  | $ cat /etc/passwd  | 
head-查看文件的前几行
1  | $ man head  | 
常见用法:
1  | $ head text1 #默认查看text1的前10行  | 
tail-查看文件的后几行
1  | $ man tail  | 
常见用法:
1  | ##常规用法和head差不多,便不赘述  | 
less/more-分屏浏览文件
1  | $ man more  | 
less 是 more 的升级版本,性能更好,不需要一次性加载所有的文件内容到内存中,有 less 选 less
常见用法:
1  | $ less text1  | 
进入浏览界面后快捷键:
| 快捷键 | 含义 | 
|---|---|
| f(forward) | 往后翻一页 | 
| b(backforword) | 往前翻一页 | 
| :n(next) | 查看下一个文件 | 
| :p(previous) | 查看上一个文件 | 
| q(quiet) | 退出查看模式 | 
重定向
直白点讲就是把文件中的内容代替键盘输入到输入缓冲区中,把本该输出到屏幕上的输出缓冲区的内容写到文件中去。
通常我们借助重定向符号来完成这一功能,以下是缓冲区和其对应的符号
“>”,”2>”和“>>”,“>>”的区别:单符号”>”,”2>”表示覆盖文件中的内容,双符号“>>”,”2>>表示追加到文件中”去。
常见用法:
1  | $ ./isPrimes < input.txt #将input.txt中的数字代替键盘输入的数字  | 
1  | //这是判断素数的函数  | 
结果如下:
1  | yong@yongubuntu:~/桌面/code$ cat input.txt  | 
其他常用方法:
1  | $ who > users  | 
grep-搜索文件内容
grep(globally search for a regular expression)命令可以用于搜索文件内容,它的功能
非常强大!grep 命令会按正则表达式去搜索文件,如果文件中某一行匹配指定的正则
表达式,grep 命令则会显示这一行。
1  | $ man grep  | 
常见用法:
1  | $ grep -nE "God" Bible.txt #显示Bible.txt中包含God的行,并显示行号  | 
grep通常会搭配正则表达式使用,这里有关于正则表达式的讲解
linux下命令的组合
1.先后顺序执行
格式如下:
1  | cmd1;cmd2;cmd3  | 
示例:
1  | sudo mkdir dir;cd dir;touch file;  | 
2.前一个命令的输出是下一个命令的输入
格式如下:
1  | cmd1 | cmd2(管道)  | 
示例:
1  | $ history | tail -n 5 #显示最近5条命令  | 
3.前一个命令的输出是下一个命令的参数
xargs
xargs:extended arguments,可以将标准输入里面的每一行转换成为命令的参数,通常搭配管道使用
使用方法
格式如下:
1  | cmd1 | xargs cmd2  | 
示例1:
1  | $ ls -lh | xargs grep -nEc "9月" #统计当前目录下所有文件中包含“9月”的行数  | 
示例2:
快速找到一个大型项目中的所有.cpp文件,并且找到main函数所在的行
1  | $ find . -name "*.cpp" | xargs grep -nE "\<main\("  | 
- 本文作者: 迪丽惹Bug
 - 本文链接: https://lyroom.github.io/2024/09/13/linux文件子系统/
 - 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!