Linux路径与常用命令 📅 2026/6/25 15:20:13 Linux路径与常用命令总结路径、文件目录操作、输出查看与时间同步Linux 的很多操作都是围绕“路径”和“文件”展开的。无论是部署服务、修改配置、查看日志还是后面写 Shell 脚本都离不开这些基础命令。这一篇主要整理 Linux 路径问题以及常用命令cd、pwd、mkdir、touch、ls、mv、cp、rm、echo、cat、alias、unalias、date、ntpdate。路径先搞清楚命令才不容易敲错。尤其是cp、mv、rm这类会改动文件的命令执行前要先确认当前位置和目标路径。一、先理解 Linux 路径Linux 里的路径主要分两种绝对路径和相对路径。1. 绝对路径绝对路径就是从根目录/开始写完整路径。比如/root/atguigu /tmp /etc/passwd它的特点是位置很明确不管我当前在哪个目录只要写的是绝对路径系统都能找到同一个位置。所以在脚本、配置文件、定时任务里面尽量使用绝对路径。因为脚本运行时不一定处在你以为的目录如果用相对路径可能会找错文件。2. 相对路径相对路径是以“当前所在目录”为起点。常见写法有这几个写法含义例子.当前目录./test.sh..上一级目录cd ..目录名/文件名当前目录下的子目录或文件logs/access.log~当前用户的家目录cd ~比如我当前在/root/atguigu执行cd../../tmp意思就是先回到/root/atguigu的上一级/root再回到/最后进入/tmp。这个地方刚开始容易绕最好的办法就是多配合pwd看结果。二、定位相关命令cd、pwd、ls1. cd切换目录cd的意思是change directory就是切换目录。常用写法cd/tmp# 使用绝对路径进入 /tmpcdatguigu# 使用相对路径进入当前目录下的 atguigucd# 回到当前用户家目录cd~# 也是回到当前用户家目录cd..# 回到上一级目录cd-# 回到上一次所在目录cd -适合在两个目录之间来回切换。比如刚才在/root/atguigu临时去了/tmp看文件看完之后执行cd-就能回到上一个目录不用重新打一遍路径。2. pwd查看当前目录pwd是print work directory用来显示当前所在目录的完整路径。pwd输出示例/root/atguiguLinux 命令行前面通常只显示当前目录名不一定显示完整路径。如果多个目录下都有同名目录只看提示符容易判断错位置这时候就要用pwd确认。3. ls查看目录内容ls用来看当前目录或者指定目录里有什么。常用选项命令作用ls查看当前目录内容ls /查看根目录内容ls -l以详细格式显示ls -a显示隐藏文件ls -lh文件大小用 KB、MB 这种方式显示ls -lt按修改时间排序ls -Sh按文件大小排序日常最常用的是ls-lah它能把隐藏文件、权限、大小、时间都列出来看目录状态比较方便。4. ls 演示ls不只是看文件名配合选项可以看权限、隐藏文件、大小和排序。# 查看根目录内容[rootatguigu ~]# ls /atguigu bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var# 查看详细信息[rootatguigu ~]# ls -l /总用量20drwxr-xr-x.5root root756月1318:09 atguigu lrwxrwxrwx.1root root76月1015:38 bin -usr/bin...# 查看所有文件包括隐藏文件[rootatguigu ~]# ls -a /...atguigu bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var# 详细信息 隐藏文件[rootatguigu ~]# ls -al /# 详细信息 文件大小易读显示[rootatguigu ~]# ls -lh /# 按修改时间排序[rootatguigu ~]# ll -t /# 按文件大小排序[rootatguigu ~]# ll -Sh /三、创建文件和目录mkdir、touch1. mkdir创建目录mkdir是make directory用来创建目录。mkdirtest如果要一次性创建多层目录需要加-pmkdir-pa/b/c不加-p的话如果中间目录不存在就会报错mkdir: 无法创建目录a/b/c:没有那个文件或目录这个报错的意思不是mkdir坏了而是系统发现a或a/b还不存在所以没法直接创建最里面的c。如果想看到创建过程可以用mkdir-pvx/y/z2. touch创建空文件touch常用来创建空文件。toucha.txttouchb.txt c.txt需要注意的是touch只能创建文件不能自动创建上级目录。比如touchtest/abc.txt如果test目录不存在就会报错touch: 无法创建test/abc.txt:没有那个文件或目录正确做法是先创建目录再创建文件mkdirtesttouchtest/abc.txt3. mkdir 和 touch 演示mkdir创建目录touch创建文件。touch不会自动创建上级目录。# 创建单层目录[rootatguigu /]# mkdir atguigu# 直接创建多层目录会失败因为 a/b 不存在[rootatguigu atguigu]# mkdir a/b/cmkdir: 无法创建目录a/b/c:没有那个文件或目录# 使用 -p 创建多层目录[rootatguigu atguigu]# mkdir -p a/b/c[rootatguigu atguigu]# cd a/b/c[rootatguigu c]# pwd/atguigu/a/b/c# 创建文件[rootatguigu atguigu]# touch a.txt[rootatguigu atguigu]# touch b.txt c.txt# 目录不存在时touch 无法创建里面的文件[rootatguigu atguigu]# touch test/abc.txttouch: 无法创建test/abc.txt:没有那个文件或目录# 正确顺序先建目录再建文件[rootatguigu atguigu]# mkdir test[rootatguigu atguigu]# touch test/abc.txt四、移动、复制、删除mv、cp、rm这三个命令很常用也最容易误操作。1. mv移动或重命名mv有两个主要用途移动文件、重命名文件。重命名mvabc.txt test.txt移动到其他目录mvtest.txt /tmp/多个文件移动到同一个目录mva.txt b.txt c.txt /tmp/可以简单理解为最后一个参数如果是目录前面的内容就会被移动进去。2. cp复制文件或目录复制文件cpa.txt /tmp/复制目录时不能直接cp 目录 目标路径需要加-rcp-ra /tmp/如果想尽量保留原来的权限、时间等属性可以用-acp-a/atguigu/ ./生产环境里备份配置文件时cp -a比普通cp更稳一点因为它会保留更多原始属性。3. rm删除文件或目录删除文件rma.txt强制删除文件不提示rm-fa.txt删除目录rm-rtest强制删除目录rm-rftest这里要特别注意rm -rf没有回收站删了就是删了。在服务器上执行前建议先用pwd和ls确认当前位置再执行删除命令。比如删除当前目录下所有.txt文件rm-f*.txt这条命令看起来简单但如果当前目录判断错了就可能删错地方。所以删除前先看一眼pwdls4. mv、cp、rm 演示这三个命令都会改动文件状态重点看清楚源路径和目标路径。# 移动文件到家目录[rootatguigu ~]# mv /atguigu/test/abc.txt ~# 重命名文件[rootatguigu ~]# mv abc.txt test.txt# 一次移动多个文件或目录到家目录[rootatguigu atguigu]# mv a a.txt b.txt c.txt test x ~# 复制文件[rootatguigu ~]# cp a.txt /atguigu/# 直接复制目录会被略过[rootatguigu ~]# cp a /atguigu/cp: 略过目录a# 复制目录要加 -r[rootatguigu ~]# cp -r a /atguigu/# 完整复制目录并尽量保留属性[rootatguigu ~]# cp -a /atguigu/ ./# 删除文件有提示[rootatguigu ~]# rm a.txtrm是否删除普通空文件a.txty# 删除目录需要 -r[rootatguigu ~]# rm -r a# 强制删除目录不提示[rootatguigu ~]# rm -rf x# 删除所有 txt 文件[rootatguigu ~]# rm -f *.txtrm -rf执行后不会进回收站。实际操作服务器时删除前先确认pwdls五、输出和查看文件echo、cat1. echo输出内容echo可以在终端输出文本也可以输出变量。echoHelloWorldecho$PATH常用选项命令作用echo -n输出后不换行echo -e让\n、\t这类转义符生效例子echo-eHello\nWorld输出Hello Worldecho还可以配合重定向写文件echoHelloWorlda.txtechoLinuxa.txt这里要分清楚符号作用覆盖写入原文件内容会被清空追加写入内容加到文件末尾写脚本时这个点很重要。比如日志一般用追加不能随便用覆盖。2. 在 echo 里执行命令如果直接写echo当前时间date输出的就是普通文字date不会执行date命令。要执行命令需要写成echo当前时间$(date)也可以用反引号echo当前时间date更推荐$(date)因为嵌套命令时可读性更好。3. echo 演示echo可以输出文本、变量也可以把内容写入文件。# 输出文本[rootatguigu ~]# echo HelloWorldHelloWorld# 输出环境变量[rootatguigu ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin# 不换行输出[rootatguigu ~]# echo -n HelloWorldHelloWorld[rootatguigu ~]## 使用 -e 识别转义字符[rootatguigu ~]# echo -e Hello\tWorldHello World[rootatguigu ~]# echo -e Hello\nWorldHello World# 输出连续数据[rootatguigu ~]# echo {a..z}a b c d e f g h i j k l m n o p q r s t uvw x y z[rootlocalhost ~]# echo {1..100..3}147101316192225283134374043464952555861646770737679828588919497100# 覆盖写入[rootatguigu ~]# echo HelloWorld a.txt[rootatguigu ~]# cat a.txtHelloWorld# 追加写入[rootatguigu ~]# echo HelloWorld a.txt[rootatguigu ~]# cat a.txt你好世界 HelloWorld在echo中执行命令需要使用$(命令)或反引号。# date 不会被执行只会当普通字符串[rootatguigu ~]# echo 当前时间date当前时间date# 使用 $(date) 执行 date 命令[rootatguigu ~]# echo 当前时间$(date)当前时间2025年 06月13日 星期五20:17:12 CST# 反引号也可以[rootlocalhost ~]# echo 当前时间date当前时间2026年 06月23日 星期二14:25:59 CST4. cat查看文件内容cat用来查看文件内容。cat/etc/passwd显示行号cat-n/etc/passwd合并多个文件输出cata.txt b.txt把多个文件合并到一个新文件cata.txt b.txtc.txt不过如果文件很大不建议直接用cat一把梭刷屏后面可以用less、tail这些命令慢慢看。5. cat 演示cat可以查看文件也可以把多个文件连接起来输出。# 查看文件内容[rootatguigu ~]# cat /etc/passwdroot:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin...# 显示行号[rootatguigu ~]# cat -n /etc/passwd1root:x:0:0:root:/root:/bin/bash2bin:x:1:1:bin:/bin:/sbin/nologin3daemon:x:2:2:daemon:/sbin:/sbin/nologin...# 合并显示两个文件[rootatguigu ~]# cat a.txt b.txt111111111112222222222233333333333aaaaaaaaaaa bbbbbbbbbbb ccccccccccc# 合并结果写入 c.txt[rootatguigu ~]# cat a.txt b.txt c.txt六、alias 和 unalias给命令起别名alias可以给命令设置别名。比如创建多层目录时经常用mkdir-pv可以设置别名aliasmkdirmkdir -pv查看当前所有别名alias查看某一个别名aliasmkdir取消别名unaliasmkdir需要注意直接在命令行里设置的别名是临时的重新登录后就没了。如果想长期生效可以写进当前用户的~/.bashrcvim~/.bashrc添加aliasmkdirmkdir -pv让配置立即生效source~/.bashrc1. alias 和 unalias 演示alias可以给复杂命令设置别名unalias用来取消别名。# 设置临时别名[rootatguigu ~]# alias mkdirmkdir -pv# 查看所有别名[rootatguigu ~]# aliasaliascpcp -ialiasllls -l --colorautoaliaslsls --colorautoaliasmkdirmkdir -pvaliasmvmv -ialiasrmrm -i# 查看某个别名[rootatguigu ~]# alias mkdiraliasmkdirmkdir -pv# 取消别名[rootatguigu ~]# unalias mkdir[rootatguigu ~]# alias mkdir-bash: alias: mkdir: 未找到临时别名重登后会失效。需要长期生效可以写入~/.bashrc然后执行source~/.bashrc七、时间相关命令date、ntpdate1. date查看和设置时间查看当前时间date按指定格式输出日期date%Fdate%Y-%m-%d按指定格式输出时间date%Tdate%H:%M:%S日期和时间一起输出时中间有空格要用引号包起来date%Y-%m-%d %H:%M:%Sdate%F %T如果不加引号系统会把后面的%H:%M:%S当成多出来的参数就会报错。查看昨天日期date-d-1 day%F设置系统时间date-s20250607 14:36:03服务器时间不要乱改很多服务都依赖时间比如日志排序、证书校验、定时任务、数据库同步等。2. ntpdate同步网络时间ntpdate用来和时间服务器同步时间。比如同步阿里云时间服务器ntpdate ntp1.aliyun.com查看当前时区timedatectl status设置上海时区timedatectl set-timezone Asia/Shanghai这部分对运维来说很重要。服务器时间不准排查故障时日志时间会对不上甚至有些服务会因为时间偏差过大而认证失败。3. date 和 ntpdate 演示date用来查看或设置系统时间ntpdate用来同步网络时间。# 查看当前时间[rootatguigu log]# date2025年 06月14日 星期六 08:31:12 CST# 只显示日期[rootatguigu log]# date %F2025-06-14# 只显示时间[rootatguigu log]# date %T08:33:30# 日期和时间中间有空格必须加引号[rootatguigu log]# date %Y-%m-%d %H:%M:%Sdate: 额外的操作数%H:%M:%STrydate --helpformoreinformation.[rootatguigu log]# date %Y-%m-%d %H:%M:%S2025-06-14 08:35:20# 查看昨天日期[rootatguigu log]# date -d -1 day %F2025-06-13# 设置系统时间[rootatguigu log]# date -s 20250607 14:36:032025年 06月 07日 星期六14:36:03 CST# 同步阿里云时间服务器[rootatguigu log]# ntpdate ntp1.aliyun.com17Jun14:49:17 ntpdate[2862]: steptimeserver116.62.13.223 offset106359059.822348sec# 查看时区[rootatguigu log]# timedatectl statusLocal time: 二2025-06-1715:00:39 CST Universal time: 二2025-06-17 07:00:39 UTC Time zone: Asia/Shanghai(CST, 0800)NTP enabled:yesNTP synchronized:yes# 设置上海时区[rootatguigu log]# timedatectl set-timezone Asia/Shanghai八、常见易错点汇总易错点正确理解touch test/abc.txt报错test目录不存在要先mkdir testmkdir a/b/c报错多层目录要使用mkdir -p a/b/ccp a /tmp/略过目录复制目录要加-r或-arm a无法删除目录删除目录要加-rdate %Y-%m-%d %H:%M:%S报错格式中有空格要加引号echo 当前时间date不执行命令要写成echo 当前时间$(date)和混用是覆盖是追加命令行设置alias后重登失效要写入~/.bashrc并source ~/.bashrc