文件管理(基础)

一、Linux系统的单根目录结构:

                  一切皆文件的设计思想

文件的时间

ls -l 文件名 仅查看的是文件的修改时间
Linux文件有三种时间,用stat查看
例如:[root@localhost ~]# stat anaconda-ks.cfg

访问时间:atime,查看内容,用cat检测
修改时间:mtime,修改内容
改变时间:ctime,修改内容,修改权限等属性,凡是有改动都会变

文件的扩展名     

Linux文件是没有扩展名!!!

Linux文件是没有扩展名!!!

//方法一:
ls(英文全拼:list files)命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)
语法:
ls [-alrAFR] [name...]
参数:
-a 显示所有文件及目录(.开头的隐藏文件也会列出)
-l 除文件名称外,亦将文件型态,权限,拥有者,文件大小等资讯详细列出
-r 将文件以相反次序显示(原定依英文字母次序)
-t 将文件依建立时间之先后次序列出
-A 同-a,但不列出"."(目前目录)以及".."(父目录)
-F 在列出的文件名称后加一符号;例如可执行当则加"*",目录则加"/"
-R 若目录下只有文件,则以下之文件亦皆依序列出

示例:
列出根目录()下的所有目录
[root@localhost ~]# ls /
bin dev home lib64 mnt proc run srv test01 usr
boot etc lib media opt root sbin sys tmp var
列出目前工作目录下所有名称是s开头的文件,越新的越排后面:
[root@localhost ~]# ls -ltr s*
将/bin目录以下的所有目录及文件详细的资料列出
[root@localhost ~]# ls -lR /bin
列出目前工作目录下所有文件及目录;目录于名称后加'/',可执行档于名称后加'*'
[root@localhost ~]# ls -AF

二 系统目录结构与作用

[root@aliyun ~]# ls -l /  # /是所有linux操作系统的顶点目录,不像windows,每个分区都有一个顶点目录
total 64
​
# 1、命令相关目录
lrwxrwxrwx.  1 root root     7 Jul 11  2019 bin -> usr/bin # 普通用户使用的命令如ls、date
lrwxrwxrwx.  1 root root     8 Jul 11  2019 sbin -> usr/sbin # 管理员使用的命令
​
​
#2、启动目录
dr-xr-xr-x.  5 root root  4096 Feb 11 19:06 boot # 存放的启动相关的文件,例如kernel,grub(引导装载程序)
    
    
#3、系统文件目录
drwxr-xr-x. 13 root root  4096 Jul 11  2019 usr # 系统文件,相当于C:Windows
lrwxrwxrwx.  1 root root     7 Jul 11  2019 lib -> usr/lib # 库文件Glibc
lrwxrwxrwx.  1 root root     9 Jul 11  2019 lib64 -> usr/lib64 # 库文件Glibc
​
#4、用户家目录
drwxr-xr-x.  5 root root  4096 Feb 24 16:42 home # 普通用户家目录
dr-xr-x---. 11 root root  4096 Jul  8 17:03 root # root用户的HOME
​
#5、配置文件目录
drwxr-xr-x. 79 root root  4096 Jul  8 17:04 etc # 配置文件,很重要,系统级服务配置文件都在这里
"""
/etc/sysconfig/network-script/ifcfg-*,网络配置文件
/etc/hostname,系统主机名配置文件
/etc/resolv.conf,dns客户端配置文件
/etc/hosts,本地域名解析配置文件
/etc/fstab    系统挂载目录 开机自启动挂载列表
/etc/passwd  系统用户文件
"""
​
#6、设备目录文件
drwxr-xr-x  19 root root  2960 Feb 15 17:22 dev # 设备文件,/dev/sda /dev/sr0
"""
/dev/cdrom 和/dev/sr0,系统光盘镜像设备
/dev/null,黑洞设备,只进不出。类似于垃圾回收站
/dev/random,生成随机数的设备
/dev/zero,能源源不断地产生数据,类似于取款机,随时随地取钱
/dev/pts/0,虚拟的Bash Shell终端,提供给远程用户使用 0代表第一个终端 1代表第2个终端
以此类推
/dev/stderr,错误输出    
/dev/stdin,标准输入
/dev/stdout,标准输出
"""
​
#7、虚拟文件系统:类似于小汽车的仪表板,能够看到汽车是否有故障,或者是否缺油了。
dr-xr-xr-x  89 root root     0 Feb 15 17:22 proc # 虚拟的文件系统,反映出来的是内核,进程信息或实时状态 
"""
反映系统当前进程的实时状态
/proc/meminfo:内存信息
/proc/cpuinfo:cpu信息
"""
    
​
#8、可变的目录与临时目录
drwxr-xr-x. 19 root root  4096 Jul 11  2019 var  #存放的是一些变化文件,比如数据库,日志,邮件.... 
"""
/tmp,系统临时目录(类似于公共厕所),系统会定时删除该目录下长时间没有访问的文件。
/var,存放一些变化文件,如下
                    mysql:          /var/lib/mysql
                    vsftpd:         /var/ftp
                    mail:           /var/spool/mail
                    cron:           /var/spool/cron
                    log:            /var/log 系统日志文件存放目录
                                    /var/log/messages系统日志
                                    /var/log/secure系统登录日志
                    /var/tmp        临时文件(主要是程序产生的临时文件)
​
""" 
​
​
# 9、设备(主要指存储设备)挂载目录
drwxr-xr-x.  2 root root  4096 Apr 11  2018 media # 移动设备默认的挂载点
drwxr-xr-x.  2 root root  4096 Apr 11  2018 mnt # 手工挂载设备的挂载点
drwxr-xr-x.  2 root root  4096 Apr 11  2018 opt # 早期第三方厂商的软件存放的目录.
drwxrwxrwt. 10 root root  4096 Jul  9 15:16 tmp # 临时存放文件,类似于回收站,超过十天自动删除
    
#10、其他的一些重要目录
drwx------.  2 root root 16384 Jul 11  2019 lost+found # 孤儿文件
这个目录是使用标准的ext2/ext3档案系统格式才会产生的一个目录,目的在于当档案系统发生错误时, 将一些遗失的片段放置到这个目录下。
这个目录通常会在分割槽的最顶层存在,例如你加装一颗硬盘于/disk中,那在这个系统下就会自动产生一个这样的目录『/disk/lost+found lost+found这个目录一般情况下是空的,当系统非法关机后,如果你丢失了一些文件,在这里能找回来用来存放fsck过程中部分修复的文件的 lost+found:几乎每个被格式化过的Linux分区都会有,意外后找回的文件一般在这里面。 这个目录是储存发生意外后丢失的文件的。只有root用户才能打开 ​ drwxrwxr-x 6 root root 4096 Feb 23 19:24 application drwxr-xr-x 25 root root 660 Jul 8 17:00 run # 存放程序运行后所产生的pid文件 drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv # 物理设备产生的一些文件 dr-xr-xr-x 13 root root 0 Feb 16 01:22 sys # 硬件设备的驱动程序信息 ​ ​

三 绝对路径与相对路径

# 1、绝对路径示例
touch /home/alice/file1
touch ~alice/file2
​
# 2、相对路径示例
touch ../file3
touch file4
touch abc/file5

四 文件管理

处理目录的常用命令

ls(英文全拼:list files)   列出目录及文件名
cd(英文全拼:change directory) 切换目录
pwd(英文全拼:print work directory) 显示目前的目录
mkdir(英文全拼:make directory) 创建一个新的目录
rmdir(英文全拼:remove directory) 删除一个空的目录
cp(英文全拼:copy file) 复制文件或目录
rm (英文全拼:remove) 移除文件或目录
mv (英文全拼:move file) 移动文件或目录,或修改文件与目录的名称

* 你可以使用man[命令] 来查看各个命令的使用文档,如:man cp

4.1 文件管理之:基本命令

# 1、查看当前所在的目录   pwd
    [root@localhost ~]# pwd
    /root
# 2、切换目录   cd
    cd [dirName] dirName:要切换的目录
    cd 相对路径 [root@localhost ~]# cd test01
    cd 绝对路径 [root@localhost ~]# cd /root/test01
    cd - # 返回上次目录
    cd # 直接回家,等同于cd ~
    cd .   # 保持当前目录不变
    cd .. # 切换到当前目录的上一级目录

# 3、查看目录树:需要先安装tree命令,执行yum install tree -y
    语法:
    参数说明:
      -a 显示所有文件和目录
      -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合
      -C 在文件和目录清单上加上色彩,便于区分各种类型
      -d 显示目录名称而非内容
      -D 列出文件或目录的更改时间
      -f 在每个文件或目录之前,显示完整的相对路径名称
      -F 在执行文件目录,Socket,符号连接,管道名称名称,各自加上"*" "/" "=" "@" "|" 号
      -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码
      -i 不以阶梯状列出文件或目录名称
      -L level 限制目录显示层级
      -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录
      -n 不在文件和目录上加色彩
      -N 直接列出文件和目录名称,包括控制字符
      -p 列出权限标示
      -P <范本样式>只显示符合范本样式的文件或目录名称
      -q 用"?"号取代控制字符,列出文件和目录名称
      -s 列出文件或目录大小
      -t 用文件和目录的更改时间排序
      -u 列出文件或目录的拥有者的名称,没有对应的名称时,则显示用户识别码
      -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存与另一个文件系统上
,则将该子目录予以排除在寻找范围外

# 4、浏览
    ls # 默认浏览当前目录
    ls -l 目录 #浏览目录下的子目录子文件的详细信息
    ls -al 目录 #浏览的结果包含隐藏文件
    ls -dl 目录 #查看目录

在Linux中我们可以使用 ll 或者 ls -l 命令来显示一个文件的属性以及文件所属的用户和组,如:
    [root@localhost ~]# ls -l
    total 4
    -rw-------. 1 root root 1504 Dec 2 09:39 anaconda-ks.cfg
    drwxr-xr-x. 2 root root 172 Dec 5 07:27 test01
# 各部分分析如下:
drwxr-xr-x. 后面的 . 代表是否在selinux开启的情况下(enforcing 或者 permissive 都属于开启)创建文件
1 硬链接个数
root 属主
root 属组
172 文件大小,单位字节
Dec 5 07:27 文件修改时间
test01 文件名字

实例中,bin文件的第一个属性用 d 表示。 d 在Linux中代表该文件时一个目录文件
在Linux中第一个字符代表这个文件是目录、文件或链接文件等等
* 当为 d 则是目录
* 当为 - 则是文件
* 若是 l 则表示为链接文档(link file)
* 若是 b 则表示为装置文件里面的可供存储的接口设备(可随机存取装置)
* 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
* 若是 s 套接字文件,进程间通信(socket)
* 若是 p 管道文件

接下来的字符中,以三个为一组,且均为rwx的三个参数的组合。其中,r 代表可读(read)、w代表可写(write)、x代表可执行(execute)
要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。
文件管理(基础)

 每个文件的属性由左边第一部分的10个字符来确定

 文件管理(基础)

 从左至右用0-9这些数字来表示

第 0 位确定文件类型

第 1-3 位确定属主(该文件的所有者)拥有该文件的权限

第 4-6 位确定属组(所有者的同组用户)拥有该文件的权限

第 7-9 位确定其他用户拥有该文件的权限

其中,第1、4、7位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;

第2,5,8位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;

第3,6,9位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限

4.2文件管理之:创建、复制、移动、删除

创建

1、创建文件  touch
[root@localhost test01]# touch file1.txt //无则创建文件,有则修改时间
[root@localhost test01]# touch /root/test01/ file2.txt
[root@localhost test02]# touch file{1..20} //创建多个文件,后缀依次为file1 file2 file3 ... file20
[root@localhost test02]# touch Ego{n,N}.txt //等价touch Egon.txt EgoN.txt
[root@localhost test02]# touch -t 2011111111 2018.rmvb


2、创建目录 mkdir [-mp] 目录名称
-m 配置文件的权限哦!直接配置,不需要默认权限(umask)的脸色
-p 帮助你直接将所需要的目录(包含上一级目录)递归创建起来
实例:创建数个目录
[root@localhost test02]# mkdir dir1 //创建名为dir1的新目录
[root@localhost test02]# mkdir dir2/dir3/dir4
mkdir: cannot create directory ‘dir2/dir3/dir4’: No such file or directory //没办法直接创建此目录
[root@localhost test02]# mkdir -p dir2/dir3/dir4 //加了这个 -p 的选项,可以自行帮你创建多层目录
实例:创建权限为rwx--x--x的目录  
各权限的分数对照表如下:
r:4
w:2
x:1
-:0
[root@localhost test02]# mkdir -m 711 test2
[root@localhost test02]# ls -l
drwx--x--x. 2 root root  6 Dec  8 11:31 test2
上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性
如果我们使用 -m ,如上例我们给予-m 711 来给予新的目录 drwx--x--x 的权限

cp复制

语法:cp [options] source dest
或 cp [options] soure...directory
参数说明:
-a 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合
-d 复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式
-f 覆盖已经存在的目标文件而不给出提示
-i 与-f选项相反,在覆盖目标未结案之前给出提示,要求用户曲儿是否覆盖,回答“y”时目标文件将被覆盖
-p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中
-r 若给出的源文件是一个目录文件,此时将复制给目录下的所有子目录和文件
-l 不复制文件,只生产链接文件
-v 显示执行过程
-s 复制成为符号连结档,亦即捷径文件


用 root 身份,将 root 目录下的 .bashrc 复制到 /tmp 下,并命名为 bashrc
[root@www ~]# cp ~/.bashrc /tmp/bashrc
[root@www ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n  <==n不覆盖,y为覆盖

rmdir(删除空的目录)

语法:
rmdir [-p] 目录名称
选项与参数:
-p 连同上一级[空的]目录也一起删除
[root@localhost test01]# rmdir 2
[root@localhost test02]# ls -l <== 看看有多少目录存在
total 0
test1/test2/test3/test4 一次删除
不过要注意的是,这个 rmdir 仅能删除空的目录,你可以使用 rm 命令来删除非空目录

rm(移除文件或目录)

语法:
   rm [-fir] 文件或目录
选项与参数:
-f 就是force的意思,忽略不存在的文件,不会出现警告信息
-i 互动模式,在删除前会询问使用者是否动作
-r 递归删除!最常用在目录的删除了!这也是非常危险的选项!!!
rm: remove regular empty file ‘file1’? y

* 如果加上 -i 的选项就会主动询问,避免你删除到错误的档名

mv(移除文件与目录,或修改名称)

语法:
directory

选项与参数
-f force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i 若目标文件(destination)已经存在时,就会询问覆盖
-u 若目标文件已经存在,且source比较新,才会升级(update)

1、移动
[root@localhost test2]# mv file2 /root/test01 #将file2移动到/root/test01里面

2、修改名称
将目录名称更名为test2
[root@localhost ~]# mv test02 test2

4.3 文件管理之:查看文件内容

Linux系统中使用以下命令来查看文件的内容:

* cat  由第一行开始显示文件内容

选项与参数:
* -A 相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已
* -b 列出行号,仅针对非空白行做行号显示,空白行不标行号
* -E 将结尾的断行字节 $ 显示出来
* -n 列印出行号,连同空白行也会有行号,与 -b 的选项不同
* -T 将[tab] 按键以 ^| 显示出来
* -v 列出一些看不出的特殊字符

示例:
[root@localhost test01]# cat b.txt

* tac  从最后一行开始显示,可以看出tac是cat的倒着写

[root@localhost test01]# tac b.txt

* nl 显示的时候,顺道输出行号

语法:
nl [-bnw] 文件
选项与参数:
-b 指定行号指定的方式,主要有两种:
-ba 表示不论是否为空行,也同样列出行号(类似 cat -n)
-bt 如果有空行,空的那一行不要列出行号(默认值)

-n 列出行号表示的方法,主要有三种:
-nln 行号在荧幕的最左方显示
-nrn 行号在自己栏位的最右方显示,且不加0
-nrz 行号在自己栏位的最右方显示,且加0

-w 行号栏位的占用的位数

[root@localhost test01]# nl b.txt

* more  一页一页的显示文件内容

[root@www ~]# more /etc/man_db.config 
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中间省略)....
--More--(28%)  <== 重点在这一行喔!你的光标也会在这里等待你的命令

在more这个程序的运行过程中,你有这几个按键可以按:
* 空白键(space) 代表向下翻页
* Enter 代表向下翻[一行]
* /字串 代表在这个显示的内容中,向下搜寻[字串]这个关键字
:f 立刻显示出档名以及目前显示的行数
q 代表立刻离开more,不再显示该文件内容
b 或 [ctrl]-b 代表往回翻页,不过这动作只对文件有用,对管线无用

* less 与 more 类似,但是比more更好的是,它可以往前翻页

一页一页翻动,以下实例输出/etc/man.config文件的内容:
[root@www ~]# less /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中间省略)....
:   <== 这里可以等待你输入命令!
less运行时可以输入的命令有:

空白键    :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup]  :向上翻动一页;
/字串     :向下搜寻『字串』的功能;
?字串     :向上搜寻『字串』的功能;
n         :重复前一个搜寻 (与 / 或 ? 有关!)
N         :反向的重复前一个搜寻 (与 / 或 ? 有关!)
q         :离开 less 这个程序

* head  只看头几行

语法:hade [-n number] 文件
示例:[root@localhost test01]# head -3 b.txt

* tail   只看尾巴几行

语法: tail [-n number] 文件
选项与参数:
* -n 后面接数字,代表显示几行的意思
* -f 表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
示例:[root@localhost test01]
# tail -3 b.txt

[root@www ~]# tail /etc/man.config
# 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
[root@www ~]# tail -n 20 /etc/man.config
 

你可以使用man[命令] 来查看各个命令的使用文档,如:man cp