一.常见命令(含解释及补充)

image-20250305143032391

1.ls:列出文件目录

选项 作用 示例
-a 列出所有文件(包括隐藏文件) ls -a
-l 列出文件及属性,注意大部分操作系统以ll来代替ls -l ls -l
-la 列出所有文件及属性(包括隐藏文件) ls -la
-h 以易读单位显示文件大小(如 KB、MB,需与 -l 连用) ls -lh
-t 按最后修改时间排序(最新文件在前) ls -lt
-r 反向排序(配合 -t-S 使用) ls -ltr
-S 按文件大小排序(从大到小) ls -lS
-R 递归列出子目录内容(显示目录树结构) ls -R
--color 彩色输出(默认启用,不同文件类型颜色不同) ls --color=auto
-i 显示文件的 inode 编号 ls -i
-d 仅显示目录本身(不列出目录内容) ls -d */
/ 显示根目录下文件 ls /

image-20250305143432325

对于目录中各参数解释

  • 第一列:文件类型及权限

第1个字母:d表示为目录,-表示为普通文件

2-4个字母:rwx表示read,write,执行,表示文件所有者权限

5-7个字母:表示该组内其他用户权限

8-10个字母:表示除该组其他用户权限

  • 第二列:硬链接数

对文件:通常是1(除非手动创建硬链接)

对目录:至少为2(默认包含.和..的链接)

  • 第三列:所有者

  • 第四列:所属组

  • 第五列:文件大小

默认单位:字节,可用ls -lh以易读单位(KB,MB)表示

  • 第六列:最后修改时间
  • 第七列:文件/目录名称

2.cd:进入目录

命令 作用 示例
cd [目录路径] 切换到指定目录 cd /var/log
cdcd ~ 返回当前用户的家目录 cd
cd - 返回上一次所在的目录(常用! cd -
cd .. 返回上级目录 cd ..
cd ../../ 返回上两级目录 cd ../../
cd / 切换到根目录 cd /

image-20250305145116698

3.pwd:当前路径

image-20250305145308507

4.cat:查看文件内容

命令/选项 作用 示例
cat [文件] 显示文件内容(适合小文件) cat file.txt
cat > file 创建新文件并输入内容(按 Ctrl+D 保存) cat > newfile.txt
cat file1 file2 > merged 合并多个文件 cat a.txt b.txt > combined.txt
cat -n 显示行号 cat -n log.txt
cat -s 压缩连续空行为单行 cat -s data.txt
cat -e 显示行尾符 $(用于调试换行符) cat -e script.sh

类似命令

1.tac(反向显示文件内容)

  • 作用:从最后一行到第一行反向输出文件内容

    tac log.txt  # 逆序查看日志(最新内容在前)

2. moreless(分页查看文件)

  • more

    • 逐页显示文件内容(仅支持向下翻页,按q退出)。

      more large_file.log
  • less(推荐)

    • 支持上下翻页、搜索、跳转等高级功能。

      less large_file.log
    • 常用操作:

      • /keyword:向前搜索关键词
      • ?keyword:向后搜索关键词
      • G:跳转到文件末尾
      • gg:跳转到文件开头

3. headtail(查看文件首尾内容)

  • head:显示文件开头部分(默认前10行)。

    head -n 20 access.log  # 显示前20行
  • tail:显示文件末尾部分(默认后10行)。

    tail -n 15 error.log    # 显示后15行
    tail -f /var/log/syslog # 实时追踪文件更新(监控日志)

4. nl(显示行号)

  • 显示文件内容并添加行号(比cat -n更灵活,支持格式控制)。

    nl -b a data.txt  # 显示所有行号(包括空行)

image-20250305150357004

tips:对目录中名字唯一的文件,如flag,输入f后按Tab键自动补齐

5.mv:移动或重命名文件

基础用法:mv [选项] 源文件/目录 目标路径

选项 作用 示例
-i 覆盖前提示确认 mv -i file.txt existing.txt
-v 显示操作详情 mv -v *.txt backup/
-f 强制覆盖,不提示 mv -f file.txt /tmp/
-n 禁止覆盖已存在文件 mv -n file.txt existing.txt
-u 仅当源文件较新时覆盖 mv -u new.txt old.txt

image-20250305151239801

6.cp:复制文件/目录

基础用法:cp [选项] 源文件/目录 目标路径

选项 作用 示例
-i 覆盖前提示确认 cp -i file.txt existing.txt
-v 显示操作详情 cp -v *.txt backup/
-f 强制覆盖,不提示 cp -f file.txt /tmp/
-n 禁止覆盖已存在文件 cp -n file.txt existing.txt
-u 仅当源文件较新时覆盖 cp -u new.txt old.txt
-a 归档模式(保留权限、时间戳等) cp -a dir1/ dir_backup/
-p 保留文件属性(权限、时间戳) cp -p file.txt backup/
-l 创建硬链接(替代复制) cp -l large_file.iso backup/
-s 创建符号链接(快捷方式) cp -s file.txt shortcut.txt

image-20250305151437803

7.su:切换用户身份

基本用法

切换到root用户:su(需要密码,密码在输入时不显示)

切换到普通用户:su username

image-20250305154200795

8.vim:文本编辑器

基础用法

vim 文件名:进入文本编辑器

vim有三种核心模式,输入命令方式不同

  1. 命令模式(默认)
    • 特征:左下角无提示,可直接输入命令
    • 进入方式:按 Esc 键退出其他模式
    • 支持命令:wqddyy
  2. 插入模式(编辑文本)
    • 特征:左下角显示 -- INSERT --
    • 进入方式:按 iao 等键
    • 不支持命令:只能输入文本内容
  3. 可视模式(选择文本)
    • 特征:左下角显示 -- VISUAL --
    • 进入方式:按 v(字符选择)或 V(行选择)
    • 支持命令:配合 y(复制)、d(删除)使用

在命令模式中输入:进入命令输入状态(光标跳转左下角),输入命令后按回车执行

常见命令

一、模式切换

命令 作用 备注
i 进入插入模式(光标前) 最常用
a 进入插入模式(光标后) Append
o 在当前行下方插入新行 进入插入模式
EscCtrl+[ 返回命令模式 所有操作的基础
v 进入可视模式(字符选择) 配合 y(复制)、d(删除)
V 可视模式(行选择) Shift + V

二、导航与编辑

光标移动
命令 作用 等效方向键
h 左移
j 下移
k 上移
l 右移
gg 跳转到文件开头
G 跳转到文件末尾 Shift + G
0 跳转到行首
$ 跳转到行尾 Shift + 4
Ctrl+f 向下翻页 Page Down
Ctrl+b 向上翻页 Page Up
文本编辑
命令 作用
dd 删除当前行
dw 删除一个单词(从光标位置起)
x 删除光标所在字符
u 撤销操作
Ctrl+r 重做(恢复撤销)
yy 复制当前行
p 粘贴到光标后
P 粘贴到光标前

三、搜索与替换

命令 作用
/关键词 向前搜索(按 n 跳下一个,N 上一个)
?关键词 向后搜索
:%s/旧内容/新内容/g 全局替换(加 c 可确认每次替换)
:s/旧内容/新内容/g 替换当前行内容

四、文件操作

命令 作用
:w 保存文件
:wqZZ 保存并退出
:q! 强制退出不保存
:e 文件名 打开新文件
:sp 文件名 横向分屏打开文件
:vsp 文件名 纵向分屏打开文件
Ctrl+w +方向键 切换分屏窗口

以下关于网络的命令暂时不做补充,先了解,之后用上了再来学习

9.ps:查看进程状态

10.kill:终止进程

11.curl:网络请求工具

12.ssh:远程连接服务器

13.ping:测试网络连通性

14.netstat:查看网络连接

15.ipconfig:查看/配置网络接口

16.apt:软件包管理工具

二.linux常见命令(AI分类)

一、文件与目录操作

命令 作用 常用选项/示例
ls 列出目录内容 ls -l(详细列表)、ls -a(显示隐藏文件)、ls -h(人类可读大小)
cp 复制文件/目录 cp -r dir1 dir2(递归复制目录)
mv 移动或重命名文件 mv old.txt new.txt(重命名)、mv file ../(移动文件)
rm 删除文件/目录 rm -rf dir(强制递归删除,慎用!
mkdir 创建目录 mkdir -p dir1/dir2(自动创建父目录)
touch 创建空文件或更新文件时间戳 touch file.txt
find 搜索文件/目录 find /home -name "*.log"(按名称搜索)、find . -type d(查找目录)
tar 压缩/解压文件 tar -czvf archive.tar.gz dir(压缩)、tar -xzvf archive.tar.gz(解压)

二、文本处理与查看

命令 作用 常用选项/示例
cat 查看/合并文件 cat file.txtcat file1 file2 > merged
less 分页查看文件(支持搜索) less large.log,按 /keyword 搜索
grep 文本搜索工具 grep "error" log.txtgrep -r "pattern" /dir(递归搜索)
sed 流编辑器(文本替换/处理) sed 's/old/new/g' file.txt(全局替换)
awk 文本分析工具 awk '{print $1}' data.txt(提取第一列)
head 查看文件开头部分 head -n 20 file.log(显示前20行)
tail 查看文件末尾部分 tail -f log.txt(实时跟踪日志更新)

三、系统信息与监控

命令 作用 常用选项/示例
top 实时进程监控(类似任务管理器) P(CPU排序)、M(内存排序)
htop 增强版 top(需安装) htop(支持鼠标操作)
df 查看磁盘空间 df -h(人类可读格式)
du 查看目录/文件大小 du -sh dir(汇总目录大小)
free 查看内存使用 free -h(显示内存和Swap)
ps 查看进程状态 ps aux(显示所有进程)、`ps -ef
kill 终止进程 kill -9 PID(强制终止)

四、网络相关

命令 作用 常用选项/示例
curl 网络请求工具 curl -O http://example.com/file(下载文件)
wget 下载文件 wget -c http://example.com/file.zip(断点续传)
ssh 远程连接服务器 ssh user@192.168.1.100
scp 安全复制文件(基于SSH) scp file.txt user@host:/path(上传)、scp user@host:/file ./(下载)
ping 测试网络连通性 ping google.com
netstat 查看网络连接 netstat -tulnp(列出所有监听端口)
ifconfig/ip 查看/配置网络接口 ip addr show(显示IP地址)

五、权限与用户管理

命令 作用 常用选项/示例
chmod 修改文件权限 chmod 755 script.shchmod +x file(添加执行权限)
chown 修改文件所有者 chown user:group file.txt
sudo 以管理员权限执行命令 sudo apt update
passwd 修改用户密码 passwd username
useradd/userdel 添加/删除用户 useradd -m newuser(创建用户并生成家目录)

六、包管理(Debian/Ubuntu为例)

命令 作用 常用选项/示例
apt 软件包管理工具 apt update(更新源)、apt install package(安装软件)、apt remove package(卸载)
dpkg 手动安装 .deb dpkg -i package.deb

三.linux内置变量

在 Linux 中,环境变量(Environment Variables)是操作系统和应用程序用来存储配置信息或运行时参数的动态值。它们可以被当前 Shell 及其子进程访问,常用于控制程序行为、定义路径或传递数据。用$变量名表示,注意变量名大小写后表示不同的变量名

1.BASH

用途:显示bash的完整路径名。通常是:/bin/bash或/usr/local/bin/bash

用例:echo $BASH

2.BASH_VERSION

用途:bash的版本

用例:echo $BASH_VERSION

3.HOME

用途:设定用户的家目录位置。通常,root的家目录在/root,一般用户家目录在/home/账号。替换~的结果,就是HOME变量值

用例:echo $HOME

image-20250305154310341

4.HOSTNAME

用途:显示主机名

用例:echo $HOSTNAME

5.IFS

用途:定义字段分割字符。默认值为:空格符、换行符、制表符(tab符)

用例:echo 1${IFS}2

image-20250305154713082

注意:不能写成echo 1$IFS2,这样会让shell将$ISF2作为一个变量名

6.PATH

用途:定义可执行文件的搜索路径

用例:echo $PATH

7.USER/LOGNAME

用途:当前登录用户的用户名

用例:echo $USER

8.SHELL

用途:当前用户默认的shell程序路径

用例:echo $SHELL

9.PWD

用途:当前工作目录的路径

用例:echo $PWD

10.RANDOM

用途:随机函数,调用此变量值时随机出现整数,范围为0-32767。不过却不是真正的随机,因为每次得到的随机数一样。因此,在使用该变量前,需要随便设定一个数给RANDOM作为随机数种子,这样才不会每次产生随机数顺序一样

用例:

RANDOM=$$
echo $RANDOM

image-20250305160157665

11.PPID

用途:父进程的进程编号

用例:echo $PPID

12.REPLY

用途:select和read没有设定读取变量时,默认的变量名称称为REPLY

用例:echo $REPLY

13.SHLVL

用途:子shell的层级数

14.$1~$n

用途:位置参数,传入程序或函数的参数,第一个参数为$1,第二个参数为$2,以此类推。注意,如果位置参数n超过9以上,要用${n}来表示。$0表示执行程序的名称

用例(将下列代码存为test.sh后执行chmod +x myscript.sh添加权限后,用./运行,下面同理)

#!/bin/bash
echo $*
./test.sh one two three

image-20250305164424654

15.$*与 “$*“

用途:代表所有的位置参数,但是 $* 与 “$*“ 的表现是不一样的

$*提供分隔后的参数,和$@的表现是一样的

#!/bin/bash
for arg in $*
do
echo $arg
done
./test.sh a b c
./test.sh 'a b' c

image-20250305165732686

“$*”把所有参数看作一个字符串

#!/bin/bash
for arg in "$*"
do
echo $arg
done
./test.sh a b c
./test.sh 'a b' c

image-20250305165957146

16.$@ 与 “$@”

用途:代表所有位置参数,$@$*的表现是一样的,”$@” 能够提供看上去比较合理的结果

#!/bin/bash
for arg in "$@"
do
echo $arg
done
./test.sh a b c
./test.sh 'a b' c

image-20250305173423229

17.$#

用途:位置参数的个数

18.$?

用途:上一条命令执行结束后的传回值,通常0表示执行成功,非0代表执行有误

19.$$

用途:目前bash shell的进程编号

20.$_

用途

a.script执行时,bash的绝对路径

b.上一个命令执行时,最后的一个位置参数,比如上一个命令为test.sh 123 abc,则$_的值为abc

c.检查邮件时,值为邮件文件名

#! /bin/bash
echo $#
echo $?
echo $$
echo $_
./test.sh one two three

image-20250305170551178

如果只是以下命令

#!/bin/bash

echo $_ # ./test.sh

du >/dev/null # 这么做命令行上将没有输出.
echo $_ # du

ls -al >/dev/null # 这么做命令行上将没有输出.
echo $_ # -al (这是最后的参数)

echo $_ #
./test.sh

image-20250305171043018

21.$!

用途:运行在后台的最后一个作业的 PID

22.$EUID与$UID

用途

$EUID 表示 “有效” 用户 ID。

$UID 表示 用户ID号,是当前用户的用户标识号, 记录在 /etc/passwd 文件中。这是当前用户的真实 id, 即使只是通过使用 su 命令来临时改变为另一个用户标识, 这个 id 也不会被改变。$UID 是一个只读变量,不能在命令行或者脚本中修改它。

四.做题积累的一点知识点

  • ${PATH:~A}表示取PATH变量值的最后一个字母

  • /的绕过方法:进程第一次打开shell时${SHLVL}=1,然后在此shell中再打开一个shell时$SHLVL=2。只需要${PWD::${SHLVL}},结果就是/

  • 数字的常见绕过方法

1.`$=$