当前位置:首页>Linux>Linux那点事:我用了三年才摸透的那几条命令

Linux那点事:我用了三年才摸透的那几条命令

  • 2026-10-11 08:34:42
Linux那点事:我用了三年才摸透的那几条命令

Linux那点事:我用了三年才摸透的那几条命令

一个SRE的碎碎念,写给还在对着黑框框发愣的你

我刚接触Linux那会儿,对着终端不知道该干啥,脑子里全是问号。

后来干了几年SRE,天天跟Linux服务器打交道,才慢慢明白:这些"基础命令"用好了,真的能救命。今天把最常用的那一批,用人话给你讲一遍。


第一关:搞清楚你在哪——cd 和 pwd

Linux的命令行有一点跟Windows不一样:它不告诉你完整路径。

你在Windows的命令行里看到的是 C:\Users\你的名字\Documents>,路径一目了然。但Linux给你看的是 [root@server documents]#,只告诉你当前文件夹叫什么,不告诉你它在哪。

这就容易迷路。所以第一个技能:学会问自己"我在哪"。

pwd——我现在在哪?

[root@server ~]# pwd
/root

pwd 就是"打印当前路径",一敲就知道自己站在文件系统的哪个位置。养成习惯,做任何重要操作之前先敲一下。

cd——怎么走到我想去的地方?

cd 有好几种走法,对应不同场景:

# 1. 用完整路径直接跳过去(绝对路径)
# 不管你现在在哪,都能准确到达
cd /etc/nginx/

# 2. 从当前位置出发(相对路径)
# 现在在 /root,想去 /root/logs,不用写全
cd logs/

# 3. 回家(家目录)
cd# 或者 cd ~
# 不管你在哪个犄角旮旯,一下子回到家目录

# 4. 回上一级
cd ..

# 5. 返回上一次所在的目录
cd -
# 这个特别好用,在两个目录之间来回切换时,省事

上手练一练:

cd /etc          # 跳到etc目录
pwd# 确认:/etc
cd nginx         # 进nginx子目录
pwd# 确认:/etc/nginx
cd -             # 返回上一个目录(/etc)
pwd# 确认回来了
cd# 回家目录
pwd# 确认:/root

第二关:看清楚这里有什么——ls

进了一个目录,先看看里面有什么。ls 就是干这个的。

最常用的几种组合:

# 最简单,看当前目录有哪些东西
ls

# 加 -l,看详细信息(权限、大小、修改时间)
ls -l
# 简写:ll(大部分系统都支持这个别名)
ll

# 加 -h,文件大小变成人能看懂的格式(KB/MB/GB)
ll -h

# 加 -a,显示隐藏文件(以.开头的文件)
ll -a

# 组合使用(最常用的组合)
ll -ah

怎么看 ll 输出的内容:

[root@server ~]# ll /etc/nginx/
-rw-r--r--. 1 root root  643 6月 10 nginx.conf
drwxr-xr-x. 2 root root   40 6月 10 conf.d

从左往右:

  • 第一列:文件类型和权限(- 是普通文件,d 是目录)
  • 中间几列:所有者、大小
  • 最后:修改时间和名字

按需排序,快速找到想要的:

# 按修改时间排序,最新的在最上面
# ——排查问题时看"哪个文件最近动过"
ll -t /var/log/

# 按文件大小排序,最大的在最上面
# ——磁盘快满了,找大文件
ll -Sh /var/log/

# 加 -r 反转顺序(配合上面两个用)
ll -tr /var/log/   # 最老的在最上面
ll -Srh /var/log/  # 最小的在最上面

第三关:建目录和文件——mkdir 和 touch

mkdir:建目录

# 建一个目录
mkdir mydir

# 建多层目录(最常用的用法)
# 如果中间层不存在,-p 会自动创建
mkdir -p a/b/c

# 加 -v 看创建过程(适合新手确认有没有建成功)
mkdir -pv a/b/c
# 输出:
# mkdir: 已创建目录 "a"
# mkdir: 已创建目录 "a/b"
# mkdir: 已创建目录 "a/b/c"

记住 -p 的两个好处:

一是能建多层目录;二是目录已存在也不报错。写自动化脚本时这很重要,不然脚本跑第二次就报错了。

touch:建空文件

# 建一个空文件
touch hello.txt

# 一次建多个
touch a.txt b.txt c.txt

# 注意:touch 不能帮你建路径,路径里的目录得提前存在
# 下面这样会报错,因为 mydir 不存在
touch mydir/hello.txt   # 错误!

# 正确做法:先建目录,再建文件
mkdir -p mydir
touch mydir/hello.txt

第四关:移动和改名——mv

mv 做两件事:移动文件、给文件改名。

改名:

# 把 old.txt 改名为 new.txt
mv old.txt new.txt

移动文件:

# 把当前目录的 config.txt 移动到 /etc/myapp/
mv config.txt /etc/myapp/

# 一次移动多个文件到某个目录
mv a.txt b.txt c.txt /tmp/

移动目录:

# 和移动文件一样,直接写目录名
mv mydir/ /data/

一个实用技巧——带时间戳备份:

# 修改配置前,先备份一份
mv nginx.conf nginx.conf.bak_$(date +%Y%m%d)
# 变成:nginx.conf.bak_20250614
# 回滚的时候知道是哪天的备份

第五关:复制——cp

复制文件:

# 把 a.txt 复制到 /tmp/
cp a.txt /tmp/

# 复制过去同时改名
cp a.txt /tmp/b.txt

复制目录(必须加 -r):

# 普通复制,不加 -r 会报错
cp mydir /tmp/       # 报错:略过目录

# 加 -r,递归复制整个目录
cp -r mydir /tmp/

备份时用 -a(重要):

# -a 等于 -r 加上"保留所有属性"
# 权限、所有者、时间戳、软链接全都原样保留
cp -a /etc/nginx/ /backup/nginx_$(date +%Y%m%d)/

普通的 -r 复制后,文件的权限可能会变。如果你备份的是配置文件或者脚本,权限变了可能导致服务启动失败。所以**备份一律用 -a**,不留隐患。


第六关:删除——rm(这节要认真看)

rm 这个命令,我要单独说清楚,因为用错了没有后悔药。

删除文件:

# 删除文件,会提示确认
rm hello.txt
# 系统问你:是否删除?输入 y 确认,n 取消

# 强制删除,不提示(小心用)
rm -f hello.txt

# 删除所有 txt 文件(通配符)
rm -f *.txt

删除目录(必须加 -r):

# 删目录加 -r
rm -r mydir/

# 强制删除整个目录,不提示(危险操作,用之前三思)
rm -rf mydir/

通配符有坑,一定要先确认:

rm -rf /data /logs 如果中间多了个空格,变成 rm -rf /data 和 /logs,会把两个目录都删掉。

一个安全习惯:执行前先用 echo 预演一下,看看会删到哪些文件:

# 先不删,只看看 *.log 匹配了哪些文件
echo rm -f /var/log/*.log

# 确认没问题,再去掉 echo 真正执行
rm -f /var/log/*.log

第七关:查看文件内容——cat

cat 最直接,把文件内容全打出来。

# 看文件内容
cat /etc/hostname

# 显示行号(排查问题时很有用)
cat -n /etc/nginx/nginx.conf

# 把两个文件合并输出
cat a.txt b.txt

# 把合并结果写到新文件
cat a.txt b.txt > combined.txt

cat 适合看小文件。 文件很大时(比如几千行的日志),cat 会把终端刷满,根本没法看。这时候用 less 或者 head/tail——但那是后话了。


第八关:输出和写文件——echo

echo 最简单的用法是在终端打印内容:

echo Hello World
# 输出:Hello World

# 输出变量的值
echo$PATH
# 输出环境变量 PATH 的内容

写文件(重定向):

# > 写入(会清空原有内容)
echo"server_name localhost;" > /tmp/test.conf

# >> 追加(保留原有内容,写到末尾)
echo"listen 80;" >> /tmp/test.conf

在输出里执行命令(很好用):

# 用 $(命令) 的语法,在输出里嵌入命令结果
echo"现在时间是:$(date)"
# 输出:现在时间是:2025年06月14日 09:30:00

# 经典用法:输出带时间戳的信息
echo"备份完成 $(date '+%Y-%m-%d %H:%M:%S')" >> backup.log

快速生成序列(不常见但很好用):

echo {a..z}       # a b c d ... z
echo {1..100}     # 1 2 3 ... 100
echotest{1..5}   # test1 test2 test3 test4 test5

第九关:时间相关——date 和 ntpdate

date:查看和格式化时间

# 直接看当前时间
date
# 2025年 06月 14日 星期六 09:30:00 CST

# 只要日期
date +%F
# 2025-06-14

# 只要时间
date +%T
# 09:30:00

# 日期+时间(空格要加引号)
date "+%F %T"
# 2025-06-14 09:30:00

# 获取昨天/明天的日期
date -d "-1 day" +%F   # 昨天
date -d "+1 day" +%F   # 明天

date 在脚本里最常见的用法是给文件名加时间戳:

# 备份文件名带上日期,不会覆盖之前的备份
cp config.yaml config.yaml.$(date +%Y%m%d_%H%M%S)
# 变成:config.yaml.20250614_093000

ntpdate:校准服务器时间

服务器时间如果不准,会引发各种奇怪问题(Token失效、日志时间乱序、定时任务跑偏)。

# 从阿里云时间服务器同步时间
ntpdate ntp1.aliyun.com

# 查看当前时间状态
timedatectl status

timedatectl status 的输出里有几个关键字段:

NTP synchronized: yes     ← 时间同步开着
Time zone: Asia/Shanghai  ← 时区是否正确

如果时区不对:

timedatectl set-timezone Asia/Shanghai

第十关:别名——让你少打几个字

命令太长?设个别名。

# 设置别名(当前会话有效)
alias ll='ls -lh --color=auto'
alias cls='clear'

# 查看所有别名
alias

# 取消某个别名
unalias cls

让别名永久生效:

# 编辑 ~/.bashrc
vim ~/.bashrc
# 在文件最后加上你的别名,比如:
# alias ll='ls -lh --color=auto'

# 保存后,让配置立即生效
source ~/.bashrc

快速查阅:这些命令该用哪个?

我想做什么
用这个
知道我在哪个目录
pwd
进入某个目录
cd 路径
回家目录
cd
回上一级
cd ..
来回切换两个目录
cd -
看当前目录有什么
ll
看文件详情(大小/时间)
ll -h
找最近改过的文件
ll -t
找最大的文件
ll -Sh
建一个目录
mkdir 目录名
建多层目录
mkdir -p a/b/c
建空文件
touch 文件名
复制文件
cp 源 目标
复制目录
cp -r 源 目标
备份(保留权限)
cp -a 源 目标
移动/改名
mv 源 目标
删除文件
rm -f 文件名
删除目录
rm -rf 目录名
查看文件内容
cat 文件名
查看文件内容带行号
cat -n 文件名
输出文字到终端
echo 内容
写入文件(覆盖)
echo 内容 > 文件
写入文件(追加)
echo 内容 >> 文件
查看当前时间
date
格式化时间输出
date "+%F %T"
同步服务器时间
ntpdate ntp1.aliyun.com
查看时区状态
timedatectl status
设置别名
alias 别名='命令'
让别名永久生效
写入 ~/.bashrc 后 source

最后说几句

命令本身不难,难的是用顺了。

建议你今天就打开一台Linux(云服务器或者虚拟机都行),把这篇文章里的命令挨个敲一遍。不用全记住,手熟了自然就记住了。

记住一个原则:不熟悉的命令,在生产环境上先搞清楚它干什么,再动手。pwd 确认位置,ls 确认内容,然后再操作——这三步习惯养好了,能避免90%的低级失误。


觉得有用就转给需要的人,学Linux的路上少走弯路。

工作五年才搞懂:Linux 目录结构背后的设计哲学

有人把 50 家大厂的 DevOps 面试题全收集了,还附了视频讲解

最新文章

随机文章