Linux 常用命令
一、Linux 基本介绍
1.1 基本介绍
Linux是一个基于Linux内核的开源类Unix操作系统,是Linus Torvalds于1991年9月17日首次发布的操作系统内核。Linux通常打包为,例如Ubuntu,CentOS,Arch Linux等。
Linux最初是为基于Intel x86架构的个人计算机开发的,但此后被移植到的平台比任何其他操作系统都多。由于基于Linux的Android操作系统在智能手机上的主导地位,截至2022年5月,Linux(包括Android)在所有通用操作系统中拥有最大的安装基础。
Linux也可以在嵌入式系统上运行,这包括路由器、自动化控制、智能家居设备、视频游戏机、电视(三星和LG智能电视分别使用Tizen和WebOS)。
Linux是免费和开源软件协作最突出的例子之一。任何人都可以根据其各自的许可条款,例如GNU通用公共许可证(GPL),以商业或非商业方式使用、修改和分发源代码。
1.2 Linux 文件结构
1.2.1 核心
- Linux 一切皆文件
 - 只有一个顶级目录
/,不像WindowsOS分C盘、D盘等 
1.2.2 目录结构

| 目录 | 含义 | Windows对应目录或概念 | 
|---|---|---|
| /bin | 所有用户可用的基本命令存放的位置 | Windows没有固定的命令存放目录 | 
| /sbin | 需要管理员权限才能使用的命令 | |
| /boot | Linux系统启动的时候需要加载和使用的文件 | |
| /dev | 外设连接Linux后,对应的文件存放的位置 | 类似Windows中的U盘,光盘的符号文件 | 
| /etc | 存放系统或者安装的程序的配置文件、注册服务等 | 类似Windows中的注册表 | 
| /home | 家目录,Linux中每新建一个用户,会自动在home中为该用户分配一个文件夹 | 类似Windows中的”我的文档”,每个用户有自己的目录 | 
| /root | root账户的家目录,仅供root账户使用 | 类似Windows中的Administrator账户的”我的文档” | 
| /lib | Linux的命令和系统启动,需要使用一些公共的依赖,放在lib中 | 类似我们开发的代码执行需要引入的JDK的JAR | 
| /usr | 很多系统软件的默认安装路径 | 类似Windows中的C盘下的Program Files目录 | 
| /var | 系统和程序运行产生的日志文件和缓存文件放在这里 | 
二、Linux 常用命令
2.1 文件管理命令
命令格式:命令 [-选项] 参数
- 列出目录下的内容:ls 命令
    
$ ls [-la] [目标文件夹] # 查看当前目录下的文件列表 $ ls # 查看指定目录下的文件 $ ls / # 查看详细信息,元数据信息(用户、组、大小、创建时间、权限信息、文件类型) $ ls -l # 查看隐藏文件 $ ls -a # 参数并用 $ ls -la- 命令所在路径:/bin/ls
 - 执行权限:所有用户
 - 功能描述:显示目录文件
 - 语法:ls [-ald] [文件或目录]
        
- -a 显示所有文件,包括隐藏文件
 - -l 详细信息显示
 - -d 查看目录属性
 
 
 - 切换工作目录:cd 命令
    
# 绝对路径切换 # cd /tmp/yangzy/test1 切换到指定目录 $ cd 绝对路径 # 相对路径切换 # cd .. 回到上一级目录 $ cd 相对路径- 命令所在路径:shell内置
 - 执行权限:所有用户
 - 功能描述:切换目录
 - 语法:cd 目录
 
 - 显示当前路径:pwd 命令
    
$ pwd /home/jojo- /bin/pwd
 - 执行权限:所有用户
 - 功能描述:显示当前目录
 - 语法:pwd
 
 - 创建目录:mkdir 命令
    
# 在当前位置新建文件夹 $ mkdir 文件夹名 # 在制定目录位置,创建文件夹,并创建父文件夹 $ mkdir -p /a/b/文件夹名 # 在当前目录下新建文件 $ touch 文件名- 命令所在路径:/bin/mkdir
 - 执行权限:所有用户
 - 功能描述:创建目录
 - 语法:mkdir [-p] 目录名
        
- -p 递归创建
 
 
 - 删除空目录:rmdir 命令
    
$ rmdir 目录路径- 命令所在路径:/bin/rmdir
 - 执行权限:所有用户
 - 功能描述:删除空目录
 - 语法:rmdir 目录路径
 
 - 删除文件:rm 命令
    
$ rm [-rf] 目标文件或文件夹 # 删除文件 rm 文件名 # 删除文件夹,及递归删除文件夹下的文件 rm -r 文件夹名 # 强制删除不询问 rm -f 文件名- 命令所在路径:/bin/rm
 - 执行权限:所有用户
 - 功能描述:删除文件
 - 语法:rm -rf 目标文件或文件夹
        
- -r 递归删除
 - -f 强制删除
 
 
 - 拷贝文件:cp 命令
    
$ cp [-rp] 源文件或目录 目标文件或目录 # 拷贝文件 $ cp 源文件 新文件或目标目录 # 递归拷贝文件目录 $ cp -r 源文件夹 新文件夹 # 将目录/tmp/zhang/test1复制到目录/root下 $ cp -r /tmp/zhang/test1 /root # 将/tmp/zhang目录下的test1和test2目录复制到/root下,保持目录属性 $ cp -rp /tmp/zhang/test2 /tmp/zhang/test2 /root- 命令所在路径:/bin/cp
 - 执行权限:所有用户
 - 功能描述:复制文件或目录
 - 语法:cp [-rp] 源文件或目录 目标文件或目录
        
- -r 递归拷贝
 - -p 保留文件属性
 
 
 - 移动文件:mv 命令
    
# 移动源文件到目标文件夹中 $ mv 文件 文件夹 # 修改文件A的名字为文件B $ mv 文件A 文件B - 获取文件的md5指纹:md5sum 命令
    
$ md5sum example.txt 14f32a909cd9d665558e1b987317f112 example.txt 
2.2 文件内容(查看|处理)命令
- 创建文件:touch 命令
    
$ touch 文件名- 命令所在路径:/bin/touch
 - 执行权限:所有用户
 - 功能描述:创建空文件
 - 语法:touch 文件名
 
 - 显示文件内容:cat 命令
    
$ cat [-n] 文件名 # 显示行号 $ cat -n 文件名- 命令所在路径:/bin/cat
 - 执行权限:所有用户
 - 功能描述:显示文件内容
 - 语法:cat [-n] 文件名
        
- -n 显示行号
 
 
 - 分屏显示:more 命令
    
$ more 文件名 # (Space)或(f) 翻页 # (Enter) 换行 # (q)或(Q) 退出- 命令所在路径:/bin/more
 - 执行权限:所有用户
 - 功能描述:分页显示文件内容
 - 语法:more 文件名
 
 - 分屏显示:less 命令
    
$ less 文件名 # (箭头键) 上一行/下一行 # (PageUp/PageDown) 上一页/下一页 # (g) 第一页 # (G) 最后一页 # (Space)或(f) 下一页 # (/关键字) 搜索关键字 # (q) 回到Linux命令行- 命令所在路径:/usr/bin/less
 - 执行权限:所有用户
 - 功能描述:分页显示文件内容
 - 语法:less 文件名
 
 - 取首几行:head 命令
    
$ head [-n 行数] 文件名 # 访问example.txt文件的前20行 $ head -n 20 example.txt- 命令所在路径:/usr/bin/head
 - 执行权限:所有用户
 - 功能描述:显示文件首几行
 - 语法:head [-n 数字] 文件名
        
- -n 指定显示的行数
 
 
 - 取尾几行:tail 命令
    
$ tail [-n 行数 -f] 文件名 # 显示example.txt文件的末20行 $ tail -n 20 example.txt $ tail -n -20 example.txt # 显示文件信息从第20行至文件末尾 $ tail -n -20 example.txt # 实时滚动显示文件的最后10行信息(默认10行) $ tail -f example.txt- 命令所在路径:/usr/bin/tail
 - 执行权限:所有用户
 - 功能描述:显示文件末几行
 - 语法:head [-n 数字 -f] 文件名
        
- -n 指定显示的行数
 - -f 动态显示文件末尾内容
 
 
 
2.3 文件搜索命令
- 查找文件:find 命令
    
$ find 搜索路径 [搜索范围] # 示例 $ find / -name passwd # 示例,文件名关键词支持正则表达式 $ find / -name ifcfg-* # 示例,在根目录下查找大于100MB的文件,+n大于,-n小于,n等于 $ find / -size +204800 # 示例,在根目录下查找所有者为jojo的文件 $ find / -user jojo # 示例,在根目录下查找5min内被修改过属性的文件和目录 $ find / -cmin -5 - amin 访问时间 access - cmin 文件属性 change - mmin 文件内容 modify # 示例,在根目录下查找大于80MB小于100MB的文件 $ find / -size +163840 -a -size -204800 - -a 两个条件同时满足 - -o 两个条件满足一个即可 # 还有另外的一些,包括-type(f文件,d目录,l软链),按照类型查找;-inum,按照 inode 号来查找 - 查找文件:locate 命令
    
$ locate [option] [pattern]常用的
locate命令选项包括:- -i 忽略大小写
 - -c 仅显示匹配的文件数,而不显示文件名
 - -l NUM 最多显示NUM行结果
 - -r PATTERN 使用正则表达式进行匹配
 
请注意,
locate命令依赖于一个数据库,该数据库默认每天更新一次。如果您最近创建了新文件但locate没有找到,请尝试更新数据库,可以使用以下命令:sudo updatedb - 查找命令位置:which/whereis 命令
    
$ which ls /usr/bin/ls $ whereis ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gzwhich命令:which命令用于查找并显示在系统路径中可执行程序的位置which命令会在系统的 PATH 环境变量指定的路径中搜索指定的命令,并返回找到的第一个匹配项的完整路径- 如果命令在多个地方存在,
which只会返回找到的第一个匹配项 - 通常用于确定系统中执行的是哪个版本的命令
 
whereis命令:whereis命令用于查找命令的二进制文件、源代码文件和帮助文档的位置。whereis命令会搜索特定命令的二进制文件、源代码文件和帮助文档,然后返回这些文件的路径。- 通常用于查找命令的相关文件的位置。
 
 - 文本搜索:grep 命令
    
$ grep [-nr] [-iv] 指定字符串 文件 # 示例 $ grep mysql /root/install.log # 示例,除以#开头的所有行的信息,^表示以XX开头 $ grep -v ^# example.txt参数:
- -n 表示查找结果所在的行号
 - -r 递归查找目录下的所有文件
 - -i 不区分大小写
 - -v 排除指定字符串
 
 
2.4 文件链接命令
$ ln [-s] 原文件 待创建链接名
# 创建文件/etc/issue的软链接/tmp/issue.soft
$ ln -s /etc/issue /tmp/issue.soft
# 创建文件/etc/issue的硬链接/tmp/issue.hard
$ ln /etc/issue /tmp/issue.hard


- 文件名 该文件的名字
 - inode 该文件的元数据
 - datablock 该文件真正保存的数据
    
- inode中保存的是文件的元数据
 - ls命令查看的都是文件的元数据信息
 - 数据块中才是文件的真正数据
 
 
2.4.1 硬链接特征

- 硬链接和原始文件之间的关系类似于拷贝,但是硬链接不会创建一个新的文件,而是在文件系统中为原文件创建一个新的链接。当原文件发生更改时,硬链接也会同步更新,因为它们指向相同的物理数据块
 - 在Unix/Linux系统中,每个文件都有一个唯一的i节点号来标识文件。硬链接和原文件共享相同的i节点号,这使得系统能够识别它们之间的关系
 - 不能跨分区
 - 不能针对目录使用
 
2.4.2 软链接特征

- 类似Windows快捷方式
 - 软链接的权限标识通常为
lrwxrwxrwx,表示这是一个软链接文件,所有用户都有读、写和执行权限。实际上,软链接文件并不存储数据,而是指向另一个文件或目录 - 软链接通过一个路径指向原文件或目录。例如,
/tmp/issue.soft -> /etc/issue表示在/tmp目录下有一个名为issue.soft的软链接文件,它指向/etc/issue文件 - 软链接文件的大小通常很小,因为它只包含指向原文件或目录的路径信息,而不包含实际数据。软链接的大小取决于文件路径的长度