【Linux】文件常见操作

Linux 文件常见操作

0. 前言

这不离公司给咱发Linux的日子越来越近了嘛,Sharry我先自己弄了台虚拟机用于基础命令的学习,可是一进系统就尴尬了:我是谁,我在哪,我要用哪些命令操作Linux的文件?

是时候要把这些已经还给老师的命令拿回来了!开干!

学习基础
巧妇难为无米之炊,首先咱需要一台 Linux。个人日常学习就用虚拟机或堡垒机,经济宽裕的同学可以用云服务器。

学习目标
遨游Linux文件系统,再也不怕在Shell中迷路!

参考教程

1 文件操作

在类UNIX系统中,通常只有1个文件树。根据设置,存储设备会挂载到文件系统树的不同位置。

由于缺少GUI图形化操作界面的支持,我们需要用命令来查看当前工作目录、移动到目标目录、操作文件等。

1.1 目录导航:pwd,cd,ls

  • pwd :查看当前工作目录
  • cd :切换目录
  • ls : 列出目录内容

掌握pwd、cd、ls这三个命令是我们畅游 Linux 文件 系统的基础,我们可以通过这三个命令随时了解自己现在在哪个目录,随时切换到想去的目录,随时了解当前目录里都有哪些目录和文件。

(1)pwd 查看当前路径

查看当工作目录,显示的是当前目录的绝对路径

例如,当我们登录个人用户后:

[sharry@localhost ~]$ pwd
/home/sharry

(2)cd 切换路径

切换到指定目录,可通过相对路径与绝对路径切换

  • 绝对路径:从根目录算起,直到目标文件或文件夹的路径,例如我们pwd命令得到的就是当前目录的绝对路径。
  • 相对路径:相对路径指以当前目录为中心,以 单个 “ . ” 代表工作目录, 以 “ … ” 代表工作目录的父目录。

这么说可能会有点抽象,下面直接结合 cd 命令来举例:

绝对路径

# 登陆后,pwd 获取当前用户的绝对路径
[sharry@localhost ~]$ pwd
/home/sharry
# 通过绝对路径, 切换到 指定目录, 这里 /usr/bin 是绝大多数Linux系统都有的
[sharry@localhost ~]$ cd /usr/bin
[sharry@localhost bin]$ pwd
/usr/bin
[sharry@localhost bin]$
# 再通过绝对路径切换回初始的目录
[sharry@localhost bin]$ cd /home/sharry
[sharry@localhost ~]$ pwd
/home/sharry

相对路径

[sharry@localhost ~]$ pwd
/home/sharry
# 通过相对路径 返回父级目录/home
[sharry@localhost ~]$ cd ..
[sharry@localhost home]$ pwd
/home

# 通过相对路径 返回根目录/
[sharry@localhost home]$ cd ..
[sharry@localhost /]$ pwd
/

# 通过相对路径 返回用户主目录
[sharry@localhost /]$ cd ./home/sharry
[sharry@localhost ~]$ pwd
/home/sharry

# 以下展示 在当前目录去往当前目录的子目录时,"./" 可省略
[sharry@localhost ~]$ cd ..
[sharry@localhost home]$ cd sharry
[sharry@localhost ~]$ pwd
/home/sharry

(3)ls 列出目录内容

列出目录内容

入门例子:

[sharry@localhost ~]$ ls
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos

ls 命令还能带一些选项,以实现特定的列出功能。实际上,许多命令都有如下结构:

# 命令 -选项 参数
command -options arguments

# 或 命令 参数 -选项
command arguments -options

例如:以长格式列出指定目录的子目录及文件

# 列出 用户主目录、 /usr 目录 包含的目录,并以长格式输出
[sharry@localhost ~]$ ls ~ /usr -l
/home/sharry:
total 0
drwxr-xr-x. 2 sharry sharry 6 Apr 17 18:33 Desktop
drwxr-xr-x. 2 sharry sharry 6 Apr 17 18:33 Documents
drwxr-xr-x. 2 sharry sharry 6 Apr 17 18:33 Downloads
# 篇幅有限,其余文件省略 
...    

/usr:
total 268
dr-xr-xr-x.   2 root root 49152 Apr 17 18:16 bin
drwxr-xr-x.   2 root root     6 Apr 10  2018 etc
drwxr-xr-x.   2 root root     6 Apr 10  2018 games
# 篇幅有限,其余文件省略 
...    

从上述例子,我们不难发现,ls 命令可带多个参数,一次性列出多个目标目录的子目录或文件," -l " 是个选项,表示以长格式输出。

ls 的常见选项 以及 长选项还有很多,再举个例子:

# 长输出 当前列表,按时间排序,并且列举包含隐藏文件的所有文件
[sharry@localhost ~]$ ls -lta
total 32
drwx------. 15 sharry sharry 4096 Apr 18 19:56 .
-rw-------.  1 sharry sharry  134 Apr 18 19:56 .Xauthority
drwx------. 14 sharry sharry  279 Apr 17 18:36 .cache
drwxr-xr-x. 14 sharry sharry  261 Apr 17 18:33 .config
drwxr-xr-x.  2 sharry sharry    6 Apr 17 18:33 Documents
drwxr-xr-x.  2 sharry sharry    6 Apr 17 18:33 Downloads
drwxr-xr-x.  2 sharry sharry    6 Apr 17 18:33 Music
-rw-------.  1 sharry sharry   16 Apr 17 18:33 .esd_auth
drwxr-xr-x.  3 root   root     20 Apr 17 18:26 ..
drwxr-xr-x.  4 sharry sharry   39 Apr 17 18:08 .mozilla
-rw-r--r--.  1 sharry sharry  231 Mar 31  2020 .bashrc
# 篇幅有限,其余文件省略 
...    

# 列举包含隐藏文件的所有文件,且以修改时间正序排序
[sharry@localhost ~]$ ls -ta --reverse
.bashrc        .mozilla  .local     Videos     Pictures   Documents  .ICEauthority  .
# 篇幅有限,其余文件省略 
...    

其中,以"." 开头的文件是隐藏文件, " – " 后面拼接的选项表示长选项,其效果与单个"-" 拼接的选项缩写一致:

[sharry@localhost ~]$ ls --all
.     .bash_logout   .cache   Desktop    .esd_auth      .mozilla 

[sharry@localhost ~]$ ls -a
.    .bash_logout   .cache   Desktop    .esd_auth      .mozilla
# 篇幅有限,其余文件省略 
...    

在实际使用中,更多选项的用法,具体请参考Linux 命令手册

(4)探索与小结

  • 探索:通过以上介绍的命令组合使用,探索Linux的文件树结构:

    [sharry@localhost ~]$ cd ..
    [sharry@localhost home]$ cd ..
    [sharry@localhost /]$ ls
    bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    [sharry@localhost /]$ cd home
    [sharry@localhost home]$ ls
    sharry
    [sharry@localhost home]$ cd sharry
    [sharry@localhost ~]$ ls
    Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
    [sharry@localhost ~]$
    

    我们发现,Linux 系统的根目录为 “/”,我们的用户主目录在 根目录的home目录下,以用户名命名。当进入用户主目录后,我们不难发现,在终端提示符左侧,我们的目录会变成“~”,这也是以非 root 用户登录的默认目录

  • 小结:
    通过上述命令的学习,我们已经可以随时切换工作目录并列出该目录下的子目录及文件。

1.2 查看文件: file, less

(1)file 查看文件基础信息

file 后面加上文件名,可查看文件的基础信息,例如 /etc 目录下存在一个passwd文件,我们切换到/etc 目录,执行file filename 命令 查看该文件的基础信息:

[sharry@localhost etc]$ file passwd
passwd: ASCII text

(2)less 阅读文本

less [filename] 可以阅读该命令的文本,例如,我们可以用该命令阅读上面小节提到的 passwd 文件:

[sharry@localhost etc]$ less passwd

关于 less,可按 h 查看帮助以获得详细的命令,常用的是 按q 退出,/charecters 查找指定字符串。至于详细的命令,请读者大佬自行查阅。

1.3 文件操作: mkdir,cp, mv,rm,ln

(1)mkdir 创建目录

mkdir命令可带多个参数,直接举例,在当前工作目录下分两次创建,总共创建3个目录:

[sharry@localhost ~]$ mkdir playground
[sharry@localhost ~]$ ls
Desktop  Documents  Downloads  Music  Pictures  playground ...
[sharry@localhost ~]$ mkdir playground1 playground2
[sharry@localhost ~]$ ls
Downloads  Pictures playground1  playground playground2 
...

(2)cp 复制文件和目录

我们沿用上面小节的例子,将 Picture 目录下的文件复制到 playground2目录 中,然后将 整个 playground2 目录复制到 playground 中:

[sharry@localhost ~]$ cp Pictures/Linux-title.png playground2
[sharry@localhost ~]$ cd playground2
[sharry@localhost playground2]$ ls
Linux-title.png
[sharry@localhost ~]$ cp playground2 playground1 -a
[sharry@localhost ~]$ cd playground1
[sharry@localhost playground1]$ ls
playground2
[sharry@localhost playground1]$

注意,当复制目录时,需要添加-a 或 -r 选项。 具体选项的含义篇幅有限,请参考操作手册。

(3)mv 移动和重命名文件

直接举例:

# 移动文件
[sharry@localhost playground1]$ mv playground2 ../playground
[sharry@localhost playground1]$ ls
[sharry@localhost playground1]$ cd ../playground
[sharry@localhost playground]$ ls
playground2

# 重命名文件
[sharry@localhost playground]$ mv playground2 play
[sharry@localhost playground]$ ls
play

(4)rm 删除文件和目录

我们尝试将上面例子创建部分目录删掉:

[sharry@localhost ~]$ cd playground
[sharry@localhost playground]$ ls
play
[sharry@localhost playground]$ rm -i play
rm: cannot remove ‘play’: Is a directory
[sharry@localhost playground]$ rm -r play
[sharry@localhost playground]$ ls

注意,rm 命令还是需要慎用,因为 大部分 Linux 不提供 文件恢复功能,一般情况下,rm删掉的文件就是真正意义上的删除了。

还在好奇 rm -rf /* 吗?通过选项查询以及上文学习过的知识,这个命令不难理解:就是将 / 根目录下的所有文件递归强制删除!实在好奇,可以自己再建一台虚拟机试试哦。注意,千万不要在公司或单位任何服务器尝试这个命令。否则,要么跑路,要么被同事打。

(5)ln 创建链接

硬链接与软连接

软链接(symbolic link),也称为符号链接,是一个指向另一个文件或目录的文件,类似于 Windows 下的快捷方式。软链接文件包含的是一个指向另一个文件或目录的路径名,而非实际的文件数据。软链接的创建和删除不会影响源文件,因为软链接只是一个指向文件或目录的路径名,相当于源文件的别名。

硬链接(hard link)是一个指向已经存在的文件的链接,这个链接与源文件在磁盘上的 inode 号是相同的,因此,硬链接和源文件是同一个文件。一个文件可以有多个硬链接,每个硬链接都是一个相等的入口,各个硬链接之间没有区别,它们都是源文件的别名。硬链接的创建和删除会影响源文件,因为硬链接和源文件实际上是同一个文件,所以源文件的引用计数会随着硬链接的创建和删除而变化。在创建硬链接时,操作系统将新文件名与文件系统目录条目相对应,并将源文件的 i-node 数增加 1。

因为硬链接是源文件的一个别名,所以硬链接只能在同一个文件系统中使用,而软链接可以跨文件系统使用。此外,如果源文件被删除,硬链接依然可以访问原文件的数据,而软链接则失效。

举例

[sharry@localhost ~]$ cd Pictures/
[sharry@localhost Pictures]$ ls
Linux-title.png
# 创建硬链接
[sharry@localhost Pictures]$ ln Linux-title.png hard
[sharry@localhost Pictures]$ ls -li
total 256
3074328 -rw-rw-r--. 2 sharry sharry 130371 Apr 20 22:53 hard
3074328 -rw-rw-r--. 2 sharry sharry 130371 Apr 20 22:53 Linux-title.png
# 创建软链接
[sharry@localhost Pictures]$ ln -s Linux-title.png sym
[sharry@localhost Pictures]$ ls -li
total 256
3074328 -rw-rw-r--. 2 sharry sharry 130371 Apr 20 22:53 hard
3074328 -rw-rw-r--. 2 sharry sharry 130371 Apr 20 22:53 Linux-title.png
2256600 lrwxrwxrwx. 1 sharry sharry     15 May  4 20:30 sym -> Linux-title.png
# 测试软硬链接的区别
[sharry@localhost Pictures]$ rm Linux-title.png
[sharry@localhost Pictures]$ ls
hard  sym
[sharry@localhost Pictures]$ less hard
"hard" may be a binary file.  See it anyway?
[sharry@localhost Pictures]$ less sym
sym: No such file or directory
[sharry@localhost Pictures]$

2. 总结与补充

通过本文的学习,相信大家与Sharry一样,重拾了遨游 Linux 文件系统的方法。当然,由于 Linux 命令通常带有多个选项和参数,高级用法还需要自行去命令手册查阅并实践。

通过探索,您已经了解了Linux系统的基础文件树结构了吗?如果还是一知半解,或者逐个文件夹去查询过于麻烦,本文的最后,附一张来自度娘的图供大佬们参考:

Linux目录结构

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值