Linux路径与常用命令
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、ls
1. 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不只是看文件名,配合选项可以看权限、隐藏文件、大小和排序。
# 查看根目录内容[root@atguigu ~]# ls /atguigu bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var# 查看详细信息[root@atguigu ~]# ls -l /总用量20drwxr-xr-x.5root root756月1318:09 atguigu lrwxrwxrwx.1root root76月1015:38 bin ->usr/bin...# 查看所有文件,包括隐藏文件[root@atguigu ~]# ls -a /...atguigu bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var# 详细信息 + 隐藏文件[root@atguigu ~]# ls -al /# 详细信息 + 文件大小易读显示[root@atguigu ~]# ls -lh /# 按修改时间排序[root@atguigu ~]# ll -t /# 按文件大小排序[root@atguigu ~]# ll -Sh /三、创建文件和目录:mkdir、touch
1. mkdir:创建目录
mkdir是make directory,用来创建目录。
mkdirtest如果要一次性创建多层目录,需要加-p:
mkdir-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不会自动创建上级目录。
# 创建单层目录[root@atguigu /]# mkdir atguigu# 直接创建多层目录会失败,因为 a/b 不存在[root@atguigu atguigu]# mkdir a/b/cmkdir: 无法创建目录"a/b/c":没有那个文件或目录# 使用 -p 创建多层目录[root@atguigu atguigu]# mkdir -p a/b/c[root@atguigu atguigu]# cd a/b/c[root@atguigu c]# pwd/atguigu/a/b/c# 创建文件[root@atguigu atguigu]# touch a.txt[root@atguigu atguigu]# touch b.txt c.txt# 目录不存在时,touch 无法创建里面的文件[root@atguigu atguigu]# touch test/abc.txttouch: 无法创建"test/abc.txt":没有那个文件或目录# 正确顺序:先建目录,再建文件[root@atguigu atguigu]# mkdir test[root@atguigu 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 目录 目标路径,需要加-r:
cp-ra /tmp/如果想尽量保留原来的权限、时间等属性,可以用-a:
cp-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 演示
这三个命令都会改动文件状态,重点看清楚源路径和目标路径。
# 移动文件到家目录[root@atguigu ~]# mv /atguigu/test/abc.txt ~# 重命名文件[root@atguigu ~]# mv abc.txt test.txt# 一次移动多个文件或目录到家目录[root@atguigu atguigu]# mv a a.txt b.txt c.txt test x ~# 复制文件[root@atguigu ~]# cp a.txt /atguigu/# 直接复制目录会被略过[root@atguigu ~]# cp a /atguigu/cp: 略过目录"a"# 复制目录要加 -r[root@atguigu ~]# cp -r a /atguigu/# 完整复制目录并尽量保留属性[root@atguigu ~]# cp -a /atguigu/ ./# 删除文件,有提示[root@atguigu ~]# rm a.txtrm:是否删除普通空文件"a.txt"?y# 删除目录需要 -r[root@atguigu ~]# rm -r a# 强制删除目录,不提示[root@atguigu ~]# rm -rf x# 删除所有 txt 文件[root@atguigu ~]# rm -f *.txtrm -rf执行后不会进回收站。实际操作服务器时,删除前先确认:
pwdls五、输出和查看文件:echo、cat
1. echo:输出内容
echo可以在终端输出文本,也可以输出变量。
echoHelloWorldecho$PATH常用选项:
| 命令 | 作用 |
|---|---|
echo -n | 输出后不换行 |
echo -e | 让\n、\t这类转义符生效 |
例子:
echo-e"Hello\nWorld"输出:
Hello Worldecho还可以配合重定向写文件:
echoHelloWorld>a.txtechoLinux>>a.txt这里要分清楚:
| 符号 | 作用 |
|---|---|
> | 覆盖写入,原文件内容会被清空 |
>> | 追加写入,内容加到文件末尾 |
写脚本时这个点很重要。比如日志一般用>>追加,不能随便用>覆盖。
2. 在 echo 里执行命令
如果直接写:
echo"当前时间:date"输出的就是普通文字date,不会执行date命令。
要执行命令,需要写成:
echo"当前时间:$(date)"也可以用反引号:
echo当前时间:`date`更推荐$(date),因为嵌套命令时可读性更好。
3. echo 演示
echo可以输出文本、变量,也可以把内容写入文件。
# 输出文本[root@atguigu ~]# echo HelloWorldHelloWorld# 输出环境变量[root@atguigu ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin# 不换行输出[root@atguigu ~]# echo -n HelloWorldHelloWorld[root@atguigu ~]## 使用 -e 识别转义字符[root@atguigu ~]# echo -e "Hello\tWorld"Hello World[root@atguigu ~]# echo -e "Hello\nWorld"Hello World# 输出连续数据[root@atguigu ~]# 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[root@localhost ~]# echo {1..100..3}147101316192225283134374043464952555861646770737679828588919497100# > 覆盖写入[root@atguigu ~]# echo HelloWorld > a.txt[root@atguigu ~]# cat a.txtHelloWorld# >> 追加写入[root@atguigu ~]# echo HelloWorld >> a.txt[root@atguigu ~]# cat a.txt你好世界 HelloWorld在echo中执行命令,需要使用$(命令)或反引号。
# date 不会被执行,只会当普通字符串[root@atguigu ~]# echo "当前时间:date"当前时间:date# 使用 $(date) 执行 date 命令[root@atguigu ~]# echo "当前时间:$(date)"当前时间:2025年 06月13日 星期五20:17:12 CST# 反引号也可以[root@localhost ~]# 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.txt>c.txt不过如果文件很大,不建议直接用cat一把梭刷屏,后面可以用less、tail这些命令慢慢看。
5. cat 演示
cat可以查看文件,也可以把多个文件连接起来输出。
# 查看文件内容[root@atguigu ~]# 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...# 显示行号[root@atguigu ~]# 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...# 合并显示两个文件[root@atguigu ~]# cat a.txt b.txt111111111112222222222233333333333aaaaaaaaaaa bbbbbbbbbbb ccccccccccc# 合并结果写入 c.txt[root@atguigu ~]# cat a.txt b.txt > c.txt六、alias 和 unalias:给命令起别名
alias可以给命令设置别名。
比如创建多层目录时经常用:
mkdir-pv可以设置别名:
aliasmkdir='mkdir -pv'查看当前所有别名:
alias查看某一个别名:
aliasmkdir取消别名:
unaliasmkdir需要注意,直接在命令行里设置的别名是临时的,重新登录后就没了。
如果想长期生效,可以写进当前用户的~/.bashrc:
vim~/.bashrc添加:
aliasmkdir='mkdir -pv'让配置立即生效:
source~/.bashrc1. alias 和 unalias 演示
alias可以给复杂命令设置别名,unalias用来取消别名。
# 设置临时别名[root@atguigu ~]# alias mkdir='mkdir -pv'# 查看所有别名[root@atguigu ~]# aliasaliascp='cp -i'aliasll='ls -l --color=auto'aliasls='ls --color=auto'aliasmkdir='mkdir -pv'aliasmv='mv -i'aliasrm='rm -i'# 查看某个别名[root@atguigu ~]# alias mkdiraliasmkdir='mkdir -pv'# 取消别名[root@atguigu ~]# unalias mkdir[root@atguigu ~]# alias mkdir-bash: alias: mkdir: 未找到临时别名重登后会失效。需要长期生效,可以写入~/.bashrc,然后执行:
source~/.bashrc七、时间相关命令:date、ntpdate
1. date:查看和设置时间
查看当前时间:
date按指定格式输出日期:
date+%Fdate+%Y-%m-%d按指定格式输出时间:
date+%Tdate+%H:%M:%S日期和时间一起输出时,中间有空格,要用引号包起来:
date"+%Y-%m-%d %H:%M:%S"date"+%F %T"如果不加引号,系统会把后面的%H:%M:%S当成多出来的参数,就会报错。
查看昨天日期:
date-d"-1 day"+%F设置系统时间:
date-s"20250607 14:36:03"服务器时间不要乱改,很多服务都依赖时间,比如日志排序、证书校验、定时任务、数据库同步等。
2. ntpdate:同步网络时间
ntpdate用来和时间服务器同步时间。
比如同步阿里云时间服务器:
ntpdate ntp1.aliyun.com查看当前时区:
timedatectl status设置上海时区:
timedatectl set-timezone Asia/Shanghai这部分对运维来说很重要。服务器时间不准,排查故障时日志时间会对不上,甚至有些服务会因为时间偏差过大而认证失败。
3. date 和 ntpdate 演示
date用来查看或设置系统时间,ntpdate用来同步网络时间。
# 查看当前时间[root@atguigu log]# date2025年 06月14日 星期六 08:31:12 CST# 只显示日期[root@atguigu log]# date +%F2025-06-14# 只显示时间[root@atguigu log]# date +%T08:33:30# 日期和时间中间有空格,必须加引号[root@atguigu log]# date +%Y-%m-%d %H:%M:%Sdate: 额外的操作数"%H:%M:%S"Try'date --help'formoreinformation.[root@atguigu log]# date "+%Y-%m-%d %H:%M:%S"2025-06-14 08:35:20# 查看昨天日期[root@atguigu log]# date -d "-1 day" +%F2025-06-13# 设置系统时间[root@atguigu log]# date -s "20250607 14:36:03"2025年 06月 07日 星期六14:36:03 CST# 同步阿里云时间服务器[root@atguigu log]# ntpdate ntp1.aliyun.com17Jun14:49:17 ntpdate[2862]: steptimeserver116.62.13.223 offset106359059.822348sec# 查看时区[root@atguigu 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# 设置上海时区[root@atguigu log]# timedatectl set-timezone Asia/Shanghai八、常见易错点汇总
| 易错点 | 正确理解 |
|---|---|
touch test/abc.txt报错 | test目录不存在,要先mkdir test |
mkdir a/b/c报错 | 多层目录要使用mkdir -p a/b/c |
cp a /tmp/略过目录 | 复制目录要加-r或-a |
rm a无法删除目录 | 删除目录要加-r |
date +%Y-%m-%d %H:%M:%S报错 | 格式中有空格,要加引号 |
echo "当前时间:date"不执行命令 | 要写成echo "当前时间:$(date)" |
>和>>混用 | >是覆盖,>>是追加 |
命令行设置alias后重登失效 | 要写入~/.bashrc并source ~/.bashrc |
