文件管理(基础)
一、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
drwxr-xr-x. 2 root root 6 Dec 8 11:22 dir1
drwxr-xr-x. 3 root root 18 Dec 8 11:27 dir
-rw-r--r--. 1 root root 0 Dec 8 11:17 file1
-rw-r--r--. 1 root root 0 Dec 8 11:17 file2
-rw-r--r--. 1 root root 0 Dec 8 11:17 file3
drwx--x--x. 2 root root 6 Dec 8 11:31 test2
[root@localhost test02]# rmdir dir1 <== 可以直接删除,没问题
[root@localhost test02]# rmdir test1 <== 因为尚有内容,所以无法删除
rmdir: failed to remove ‘test1’: Directory not empty
[root@localhost test02]# rmdir -p test1/test2/test3/test4
利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除
不过要注意的是,这个 rmdir 仅能删除空的目录,你可以使用 rm 命令来删除非空目录
rm(移除文件或目录)
语法: rm [-fir] 文件或目录
选项与参数:
-f 就是force的意思,忽略不存在的文件,不会出现警告信息
-i 互动模式,在删除前会询问使用者是否动作
-r 递归删除!最常用在目录的删除了!这也是非常危险的选项!!!
[root@localhost test02]# rm -i file1
rm: remove regular empty file ‘file1’? y
* 如果加上 -i 的选项就会主动询问,避免你删除到错误的档名
mv(移除文件与目录,或修改名称)
语法:
[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [options] source1 source2 source3 .... 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