【Linux】文件和目录管理指令

Linux一切皆文件

Linux的所有内容都是以文件的形式存储和管理的,包括一般文件、目录文件、外接设备(如键盘、硬盘、打印机等)、套接字等。其利弊都比较明显,好处是开发者只需要一套API和开发工具就可以调用Linux系统中的资源;坏处是使用任何外接硬件设备都必须要和某一目录挂载。

Linux文件系统层次结构和路径

 Linux 操作系统中,所有的文件和目录都被组织成以一个根节点“/”开始的倒置的树状结构。

指明一个文件存放的位置,可以分别用绝对路径相对路径,前者是恒定不变的,后者是相对于当前目录而言的。

Linux文件和目录管理指令

1. 切换目录(cd)

cd命令是典型的Shell内置命令,因此没有执行文件路径。

[root@localhost ~]# cd [相对路径/绝对路径]
[root@localhost ~]# cd [特殊符号]

一些特殊符号的功能如下。 

[root@localhost ~]# cd ~ 
# 回到当前登录用户的主目录
[root@localhost ~]# cd ~user 
# 回到指令user用户的主目录
[root@localhost ~]# cd - 
# 回到上次所在目录
[root@localhost ~]# cd .
# 回到当前目录,.表示当前目录
[root@localhost ~]# cd ..
# 回到上一级目录

2. 打印当前工作目录(pwd)

pwd命令即print working directory,功能是显示用户当前所处的工作目录。

[root@localhost ~]# whoami
root
# whoami用于确定当前登录的用户
[root@localhost ~]# pwd
/root
# pwd用于显示root用户当前所在目录,即主目录/root

3. 查看目录下文件(ls)

ls命令即list,功能是显示当前目录下的内容。

[root@localhost ~]# ls [选项][目录名称]
选项功能
-a显示全部的文件,包括隐藏文件(开头为 . 的文件)也一起罗列出来,这是最常用的选项之一。
-A显示全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录。
-d仅列出目录本身,而不是列出目录内的文件数据。
-fls 默认会以文件名排序,使用 -f 选项会直接列出结果,而不进行排序。
-F在文件或目录名后加上文件类型的指示符号,例如,* 代表可运行文件,/ 代表目录,= 代表 socket 文件,| 代表 FIFO 文件。
-h以人们易读的方式显示文件或目录大小,如 1KB、234MB、2GB 等。
-i显示 inode 节点信息。
-l使用长格式列出文件和目录信息。
-n以 UID 和 GID 分别代替文件用户名和群组名显示出来。
-r将排序结果反向输出,比如,若原本文件名由小到大,反向则为由大到小。
-R连同子目录内容一起列出来,等于将该目录下的所有文件都显示出来。
-S以文件容量大小排序,而不是以文件名排序。
-t以时间排序,而不是以文件名排序。
--color=never
--color=always
--color=auto
never 表示不依据文件特性给予颜色显示。
always 表示显示颜色,ls 默认采用这种方式。
auto 表示让系统自行依据配置来判断是否给予颜色。
--full-time以完整时间模式 (包含年、月、日、时、分)输出
--time={atime,ctime}输出 access 时间或改变权限属性时间(ctime),而不是内容变更时间。

实例:

[root@www ~]# ls -al ~
total 156
drwxr-x---  4 root root  4096 Sep 24 00:07 .
drwxr-xr-x 23 root root  4096 Sep 22 12:09 ..
-rw-------  1 root root  1474 Sep  4 18:27 anaconda-ks.cfg
-rw-------  1 root root   955 Sep 24 00:08 .bash_history
-rw-r--r--  1 root root    24 Jan  6  2007 .bash_logout
-rw-r--r--  1 root root   191 Jan  6  2007 .bash_profile
-rw-r--r--  1 root root   176 Jan  6  2007 .bashrc
drwx------  3 root root  4096 Sep  5 10:37 .gconf
-rw-r--r--  1 root root 42304 Sep  4 18:26 install.log
-rw-r--r--  1 root root  5661 Sep  4 18:25 install.log.syslog
# a表示显示包括隐藏文件在内的所有文件(如目录文件(.)、(..)、(.gconf)等)
# l表示使用长格式列出文件和目录信息

[root@localhost ~]# ls -l /root
# 表示查看/root目录的详细信息

4. 创建目录(mkdir)

mkdir命令即make directories,功能是创建新目录。

[root@localhost ~]# mkdir [-mp] 目录名
# -m 选项表示手动配置目录权限
# -p 选项表示递归创建目录

实例:

[demo@localhost EA]$ mkdir NMN
[demo@localhost EA]$ ls
NMN
[demo@localhost EA]$ mkdir RDGCN/data
mkdir: cannot create directory ‘RDGCN/data’: No such file or directory
[demo@localhost EA]$ mkdir -p RDGCN/data # 递归创建目录
[demo@localhost EA]$ ls -R # 显示该目录下,包括子目录在内的所有内容
.:
NMN  RDGCN

./NMN:

./RDGCN:
data

./RDGCN/data:
[demo@localhost EA]$ mkdir -m 711 test # 自定义目录权限
[demo@localhost EA]$ ls -l
total 0
drwxr-xr-x. 2 cmer bdaa 10 Jul 28 03:22 NMN
drwxr-xr-x. 3 cmer bdaa 26 Jul 28 03:22 RDGCN
drwx--x--x. 2 cmer bdaa 10 Jul 28 03:24 test

5. 删除目录(rmdir)

rmdir命令即rmdir directories,功能是删除空目录,和mkdir相反。值得注意的是:只能删除空目录!

[root@localhost ~]# rmdir [-p] 目录名
# -p 选项表示递归创建目录

实例:

[demo@localhost EA]$ rmdir test
[demo@localhost EA]$ rmdir -p RDGCN/data 
# 此方法先删除最低一级的目录(RDGCN/data),再逐级删除上级目录,删除时也要保证各级目录是空目录。
# 否则无法删除。

 可见,rmdir的作用非常有限,尽量用rm既可以删除目录,也可以删除文件。

6. 创建文件及修改文件时间戳(touch)

touch命令有两个功能:

1. 创建文件:当指定文件不存在时,会在当前路径创建一个空文件;

2. 修改文件时间戳

Linux系统中每个文件有3个时间参数:

1. 访问时间(Access Time, atime);

2. 数据修改时间(Modify Time, mtime);

3. 状态修改时间(Change Time, ctime)。

[root@localhost ~]# touch [选项] 文件名
# -a 只修改文件的访问时间;
# -c 只修改文件的时间参数
# -d 后面可以跟要修改的日期,而不用当前的日期,即把文件的 atime 和 mtime 时间改为指定的时间
# -m 只修改文件的数据修改时间
# -t 命令后面可以跟要修订的时间,而不用目前的时间,时间书写格式为 YYMMDDhhmm

根据选项内容可见,touch可以只修改文件的访问时间或者数据修改时间,但是不能只修改文件的状态修改时间。因为对于文件而言,前者两个操作都会让文件的状态修改时间改变。

[root@localhost ~]# touch bols
# 创建bols的空文件

[root@localhost ~]# ll --time=atime bols
# 查看文件的访问时间
-rw-r--r-- 1 root root 0 Sep 25 21:23 bols
# 文件上次的访问时间为 9 月 25 号 21:23
[root@localhost ~]# touch bols
[root@localhost ~]# ll --time=atime bols
-rw-r--r-- 1 root root 0 May 15 16:36 bols
# 而如果文件已经存在,则也不会报错,只是会修改文件的访问时间

[root@localhost ~]# touch -d "2017-05-04 15:44" bols
[root@localhost ~]# ll bols; ll --time=atime bols; ll --time=ctime bols
-rw-r--r-- 1 root root 0 May 4 2017 bols
-rw-r--r-- 1 root root 0 May 4 2017 bols
-rw-r--r-- 1 root root 0 Sep 25 21:40 bols
# ctime不会变为设定时间,但更新为当前服务器的时间

7. 建立硬链接和软链接(ln)

8. 复制文件和目录(cp)

cp命令即copy,功能是复制文件和目录,同时借助某些选项,还可以实现复制整个目录,以及比对两文件的新旧而予以升级等。

[root@localhost ~]# cp [选项] 源文件 目标文件
-a:相当于 -d、-p、-r 选项的集合;
-d:如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接;
-i:询问,如果目标文件已经存在,则会询问是否覆盖;
-l:把目标文件建立为源文件的硬链接文件,而不是复制源文件;
-s:把目标文件建立为源文件的软链接文件,而不是复制源文件;
-p:复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间);
-r:递归复制,用于复制目录;
-u:若目标文件比源文件有差异,则使用该选项可以更新目标文件,此选项可用于对文件的升级和备用。

复制文件实例:

[root@localhost ~]# touch ML
# 建立名字为ML的文件
[root@localhost ~]# cp ML /tmp/
# 把ML文件不改名复制到/tmp/目录下
[root@localhost ~]# cp ML /tmp/Machine Learning
# 改名复制,文件名为Machine Learning

通过-r选项复制目录实例:

[root@localhost ~]# mkdir movie
# 建立名为movie的目录
[root@localhost ~]# cp -r /root/movie/ /tmp/
# 把目录/root/movie/ 复制到/tmp/下

9. 删除文件和目录(rm)

rm命令即remove,功能是永久性地删除文件系统中指定的文件或目录。

[root@localhost ~]# rm [选项] 文件或目录
-f: 强制删除(force),和-i相反,系统将不再询问
-i: 和-f相反,系统会给出提示信息,使用 -i 可以有效防止不小心删除有用的文件或目录
-r: 递归删除,主要用于删除目录,可删除指定目录及包含的所有内容,包括所有的子目录和文件

实例:

[root@localhost ~]$ mkdir -p demo/code/data
# 递归创建目录
[root@localhost ~]$ touch test
# 创建文件
[root@localhost ~]$ rm -i test
rm: remove regular empty file ‘test’? y
# rm删除文件
[root@localhost ~]$ rm demo/
rm: cannot remove ‘demo/’: Is a directory
# -r选项用于递归删除目录
[root@localhost ~]$ rm -rf demo/
# 强制地、递归地删除目录

使用-rf选项可以强制删除目录或文件,在实际中常用,但是之后无法恢复。

10. 移动和重命名文件和目录(mv)

mv即move,功能是在不同的目录之间移动文件或目录,也可以对文件和目录进行重命名。

[root@localhost ~]# mv [选项] 源文件 目标文件
-f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
-i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项);
-n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户;
-v:显示文件或目录的移动过程;
-u:若目标文件已经存在,但两者相比,源文件更新,则会对目标文件进行升级;

移动文件实例:

[root@localhost ~]$ mkdir -p NMN/code/data
# 递归创建目录
[root@localhost ~]$ touch demo
# 创建文件
[root@localhost ~]$ mv demo NMN/code/data
# 移动文件到指定目录(类似剪切)
[root@localhost ~]$ ls NMN/code/data
demo
[root@localhost ~]$ touch demo
# 再次创建文件
[root@localhost ~]$ mv -f demo NMN/code/data
# 强制移动,覆盖原有的demo文件

当源文件和目标文件在同一目录中,即是改名:

[root@localhost ~]$ touch demo
[root@localhost ~]$ mv demo test
[root@localhost ~]$ ls
NMN  test 

参考链接:[1]

Linux环境变量

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值