文件管理
在Linux中,文件管理,指的是增删改查文件、目录或者给文件目录涉及权限等等。
在windows系统,由C盘,D盘等,但是在Linux系统只有一个盘符/代表根目录。
一、系统根目录
1.1进入根目录、预览
# 默认登录系统后,进入的当前用户的家目录
# 管理员用户root 拥有自己的家目录 :/root
# 在Linux中用~表示[root@localhost ~]#
# 预览根目录
cd / # 通过cd 命令进入根目录 ls # 查看当前根目录 / 有哪些目录或者是文件组成
1.2 目录说明
根目录 (/)
根目录是整个文件系统的顶级目录,所有其他目录和文件都是从这里开始的
在Linux系统,根目录使用(/)表示
/bin
/bin目录中包含了一些基本的可以执行的文件(命令),这些文件或者命令是系统启动或者
运行的时候所必须得。比如包括的常用命令有:ls,cd,rm,cp等
/bin 只是连接,源文件在:/usr/bin目录# 预览指定源文件的位置
[root@localhost bin]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
/sbin
存放的是超级管理员使用的命令,默认超级管理员是root
/sbin也是一个连接,源文件在:/usr/sbin# 预览一下指定目录列表
[root@localhost sbin]# ls
/home
普通用户的家目录。
/home 普通用户是 aaa ,家目录就是/home/aaa
/root 超级管理员家目录# 创建一个普通用户
[root@localhost sbin]# useradd aaa# 预览家目录
[root@localhost /]# ls home
/usr
/usr是系统文件目录,相当于windows中 c:/windows目录
/usr
-/local 安装软件的目录 c:/Program Files
-/bin 系统命令和普通用户名命令
-/sbin 超级管理员命令
-/lib 库文件目录、第三方提供的插件功能等
-/lib64 库文件目录,针对64位的,第三方提供的插件功能等
/boot
/boot目录存放的是系统启动的时候,内核引导程序> ls /boot
config-3.10.0-1160.el7.x86_64
efi
grub
grub2
initramfs-0-rescue-42bafeb07e434696bb9bf5e27e21822e.img
initramfs-3.10.0-1160.el7.x86_64.img
initramfs-3.10.0-1160.el7.x86_64kdump.img
symvers-3.10.0-1160.el7.x86_64.gz
System.map-3.10.0-1160.el7.x86_64
vmlinuz-0-rescue-42bafeb07e434696bb9bf5e27e21822e
vmlinuz-3.10.0-1160.el7.x86_64
/#etc
/etc 是存放系统配置文件的目录,后续安装的服务以及配置文件都放在这里网卡配置文件
/etc/sysconfig/network-scripts/ifcfg-ens33DNS配置文件
/etc/resolv.conf主机名配置文件
/etc/hostname系统环境变量配置文件 、别名文件等
/etc/profile /etc/bashrc .bashrc .bash_profile内核参数的配置文件
/etc/sysctl.conf开启启动程序命令文件
/etc/fstab
# 预览网卡配置文件
> cat /etc/sysconfig/network-scripts/ifcfg-ens33
/proc
当前系统硬设备的信息目录
/proc/cpuinfo 当前cpu信息
/proc/meminfo 当前内存信息
/proc/loadavg 当前系统平均负载信息
/proc/interrupts 当前系统中断信息目录
/proc/mounts 当前系统设备挂载信息
# 预览cpu信息
[root@localhost /]# cat /proc/cpuinfo
/dev
存放的是设备文件目录:硬盘、硬盘分区、光驱等/dev/null
黑洞目录 只进不出,类似于垃圾回收站 ,永久销毁
把没有用的设备或者没有用的数据信息,拖入这个目录/dev/zero
可以原因不断地产生数据/dev/random
随机生成一个设备文件,随机生成数值
/var
存放各种日志信息的目录/var/log/messages
系统日志文件目录/var/log/lastlog
用户登录日志/var/log/dmesg
计算机硬件信息加载情况日志
/tmp
系统临时目录
/run
临时文件系统,存储系统启动以来的所有信息
当系统重启的时候,这个目录下的文件应该被删除或者清楚/mnt
临时挂载的别的文件系统
比如我们挂载了光驱,把内容放到这个目录下,这样就可以看到光盘中的内容/opt
系统额外安装的软件所在的目录,默认是空的/srv
存放一些服务启动后,需要提取的数据/sys
虚拟文件系统目录,比如:虚拟配置、虚拟文件、虚拟内存/media
多媒体目录,存放各种媒体资源:img、mp4、mp3
二. 工作目录命令
2.1cd命令
cd 命令就是用于切换工作目录
注意:切换目录时候,用户必须具有进入目录的权限
# 切换到指定的目录
> cd / #进入根目录
> cd /var/log #进入/var/log目录 完全的路径 任意位置都可以
> cd log #进入当前位置下的log目录
. 记录当前目标所在的位置
.. 记录当前目标上一级归属位置cd .. 可以进入上一级目录
# 返回root目录(当前用户必须是root)
> cd ~ > cd /root
# 返回上一次所在的目录
> cd -
2.2pwd命令和清屏
pwd命令没有任何选项和参数,现在当前所在的完整的路径
> pwd
清屏
> clear
2.3ls命令
显示目录详情以及子目录信息,格式
> ls [参数]...[目录]
参数 | 说明 |
-a | 列出目录下所有的目录和文件,包括.开头的隐藏目录 |
-A | 列出除.(当前目录)和..(上级)之外的所有的文件和目录 |
-b | 把文件名不可输出的字符,用斜杠/加字符编号显示出来,比如:英文系统中有中文/u9a0这个格式 |
-l | 列出文件的详细信息 |
-c | 输出文件或者目录列表,会按照最后修改时间进行排序 |
-C | 分成多列显示文件或者目录 |
-F | 加上文件的类型显示列表,这个文件的类型就是符号(*表示可执行的普通文件)(/表示目录)(@表示连接)(|表示管道文件)(=表示套接字) |
-d | 将目录像文件一样显示,而不是显示内部所有的列表,通常是一个点 |
命令预览演示
[root@localhost usr]# ls #查看目录的文件和文件夹[root@localhost usr]# ls -a
. .. bin etc games include lib lib64 libexec local sbin share src tmp
[root@localhost usr]# ls -A
bin etc games include lib lib64 libexec local sbin share src tmp
[root@localhost u
> ls -a -l # 列出目录下所有的目录和文件,包括.开头的隐藏目录列出文件的详细信息> ls -al #多个参数 可以省略中间的- 直接保留第一个- 写到一起就可以
> ls /tmp/ #列出指定目录的 文件或者目录列表
> ls -l
> ll #ll是ls -l更简洁的缩写
三、目录和文件的操作
3.1 mkdir命令
创建目录的命令,格式
> mkdir [参数] 名称
参数 | 说明 |
-v | 创建目录的时候,显示详情 |
-p | 代表递归操作,可以创建多级目录 |
演示
# 切换到opt目录
> cd /opt# 创建mp3目录(默认会转成在/opt/mp3)
> mkdir mp3# 创建一个mp4目录 预览详情
> mkdir -v mp4# 递归创建层级目录
> mkdir -p aaa/bbb/ccc# 递归创建目录的是再显示详情
> mkdir -p -v course/sof
mkdir: 已创建目录 "course"
mkdir: 已创建目录 "course/sof"
> mkdir -pv course/sof #命令组合可以简写# 递归创建批量目录
# {} 表示一个区间段的名字,内容只能是数值、小写字母和大写字母
> mkdir -pv huluwa/huluwa{1..7}
mkdir: 已创建目录 "huluwa"
mkdir: 已创建目录 "huluwa/huluwa1"
mkdir: 已创建目录 "huluwa/huluwa2"
mkdir: 已创建目录 "huluwa/huluwa3"
mkdir: 已创建目录 "huluwa/huluwa4"
mkdir: 已创建目录 "huluwa/huluwa5"
mkdir: 已创建目录 "huluwa/huluwa6"
mkdir: 已创建目录 "huluwa/huluwa7"> mkdir -pv baoshi/{a..f}
mkdir: 已创建目录 "baoshi"
mkdir: 已创建目录 "baoshi/a"
mkdir: 已创建目录 "baoshi/b"
mkdir: 已创建目录 "baoshi/c"
mkdir: 已创建目录 "baoshi/d"
mkdir: 已创建目录 "baoshi/e"
mkdir: 已创建目录 "baoshi/f"
3.2 tree 命令(需要安装)
将目录按照树形结构显示
centos7 这个版本默认没有安装这个命令,需要在线安装再使用
安装tree
> yum -y install tree# 预览当前目录的树形结构
[root@localhost opt]# tree
.
├── aaa
│ └── bbb
│ └── ccc
├── baoshi
│ ├── a
│ ├── b
│ ├── c
│ ├── d
│ ├── e
│ └── f
├── course
│ └── sof
├── huluwa
│ ├── huluwa1
│ ├── huluwa2
│ ├── huluwa3
│ ├── huluwa4
│ ├── huluwa5
│ ├── huluwa6
│ └── huluwa7
├── mp3
└── mp4
# 指定要预览哪个目录
> tree /usr
3.3 touch命令
创建文件的命令,在linux中,文件无关后缀名,就是一个普通文件,
这个文件能不能运行,需要权限设置,linux系统重文件,80%没有后缀名,20%后缀名自己定义,其实是为了方便我们看的
演示
# 创建一个demo空文件
> touch demo# 创建 xx.txt 空文件 只是看上去叫xx.txt 其实是整个名字叫"xx.txt" 没有后缀名
> touch xx.txt# 批量创建文件
> touch lanmao taoqi sanqian
> ls
demo lanmao sanqian taoqi xx.txt# 批量创建文件,文件名是某个区段
> touch tianwang{1..4}
> ls
demo lanmao sanqian taoqi tianwang1 tianwang2 tianwang3 tianwang4 xx.txt
3.4 mv命令
移动文件或者文件夹命令,移动的时候,允许更改名称==剪切和重命名
mv来源move
参数 | 说明 |
-i | 若目标文件已经存在,则提示是否覆盖(需要输入y/n) |
-u | 只在目标文件不存在,或者是源文件较新才会执行移动操作 |
-b | 若目标文件已经存在,则会为其创建备份文件 |
-f | 强制覆盖目标文件 |
演示
# 将 111.txt 剪切到上级目录中叫bbb目录里面去
mv 111.txt ../b# 将111.txt在当前目录直接重命名为222
> mv 111.txt 222
# 在当前目录将222文件剪切到上级目录中的a目录 并且重命名为333.txt
> mv 222 ../a/333.txt# 即使不添加-i参数 也会提醒是否覆盖
> mv -i c/333.txt a/333.txt
mv:是否覆盖"a/333.txt"? n
# 只有a/333.txt 比b/222.txt新才会替换,否则什么都不做
> mv -u a/333.txt b/222.txt
# 如果目标文件已存在,则为期创建备份文件再覆盖
> mv -b a/333.txt c/333.txt#强制覆盖目标文件
> mv -f c/333.txt b/222.txt
3.5 cp命令
用户复制文件或者文件夹,cp来源于copy单词
> cp [参数] 源 目标
#复制的时候可以更改名称,如果只是指定了位置,没有指定名称,原来文件叫什么就是什么可以*星号,表示目录下的所有文件
参数 | 说明 |
-i | 如果目前文件已存在,提示是否覆盖,默认的 |
-r | 递归复制目录,包括目录下的所有内容 |
-p | 复制文件时,保持源文件的所有者,权限信息和时间等信息 |
-d | 复制文件的时候,如果源文件是连接,会连同连接的指向一起复制 |
-a | 相当于-p -d -r 三个参数 |
-v | 显示详情 |
演示
# 复制文件到c目录 没有指定名称
> cp a/bb/cc/dd/ee/aaa.txt c
#复制并且重命名
> cp b/222.txt c/333.txt# 同名文件时候是否覆盖
> cp -i b/222.txt c/333.txt
cp:是否覆盖"c/333.txt"? y# 复制 a目录及目录到b目录中去 需要加递归-r
> cp -r a b# 显示复制的详细信息
cp -v a/xx.tx b#直接的复制 至少我们可以看到444.txt文件和333.txt时间不一样
cp 333.txt 444.txt
#复制的时候时间都和333.txt是一样的
cp -p 333.txt 555.txt
# 为333.txt创建一个快捷方式叫a.link
# 所以a.link其实就是指向333.txt
> ln -s 333.txt a.link#直接复制 a.link 为b.link 只是复制了连接
>cp a.link b.link
#复制了a.link 为 c.link 同时把a指向一起复制了
> cp -d a.link c.link
# 预览效果
> cp a.link b.link
[root@localhost c]# ll
-rw-r--r--. 1 root root 0 12月 27 14:44 333.txt
lrwxrwxrwx. 1 root root 7 12月 27 14:57 a.link -> 333.txt
-rw-r--r--. 1 root root 0 12月 27 15:00 b.link
> cp -d a.link c.link
[root@localhost c]# ll
-rw-r--r--. 1 root root 0 12月 27 14:44 333.txt
lrwxrwxrwx. 1 root root 7 12月 27 14:57 a.link -> 333.txt
-rw-r--r--. 1 root root 0 12月 27 15:00 b.link
lrwxrwxrwx. 1 root root 7 12月 27 15:01 c.link -> 333.txt
# 将c目录里面的所有文件复制到d目录中去
> cp -r c/* d# 路径写全的写法
> cp -r /sof14/c/* /sof14/d
3.6 rm命令
删除文件或者目录的命令,她是remove的简拼
注意:
1.删除的文件,不能是正在被操作的文件
2.删除的目录,默认必须是空的
参数 | 说明 |
-r | 递归 |
-f | 强制删除【删除的时候没有提示】 |
-v | 显示详情 |
演示
# 直接删除目录 删除不掉
> rm a
rm: 无法删除"a": 是一个目录# 直接删除文件 会提醒我们是否删除
> rm b/xx.tx
rm:是否删除普通文件 "b/xx.tx"?y/yes# 也可以输入 yes 删除
> rm a/xx.tx
rm:是否删除普通文件 "a/xx.tx"?yes# -r 递归删除,删除目录需要加-r
> rm -r e
rm:是否删除目录 "e"?y# 如果目录中有内容,挨个进入目录询问是否删除
# -r 递归
> rm -r a
rm:是否进入目录"a"? y
rm:是否进入目录"a/bb"? y
rm:是否进入目录"a/bb/cc"? y
rm:是否进入目录"a/bb/cc/dd"? y
rm:是否进入目录"a/bb/cc/dd/ee"? y
rm:是否删除普通空文件 "a/bb/cc/dd/ee/aaa.txt"?y
rm:是否删除目录 "a/bb/cc/dd/ee"?y
rm:是否删除目录 "a/bb/cc/dd"?y
rm:是否删除目录 "a/bb/cc"?y
rm:是否删除目录 "a/bb"?y
rm:是否删除目录 "a"?y# 强制递归删除b目录,哪怕目录中有内容也不做任何提示
> rm -rf b# 强制递归删除 并且显示详细信息
> rm -rfv c
已删除"c/x.txt"
已删除"c/x1"
已删除"c/x2"
已删除"c/x3"
已删除"c/x4"
已删除"c/x5"
已删除目录:"c"# 删除d目录中所有文件名是x开头的文件
> rm -rf d/x*
3.7 --help
目前我们学习的这些命令的参数都是常用的
如果逆向知道某个命令 具体有哪些参数 就可以使用--help# 查看mv命令有哪些参数 > mv --help
如果有些参数 不常用,上课过程中,没有学过,大家可以借助于这个命令
实在看不懂如何使用 ,也可以百度
3.8 cat命令
cat是Linux中使用最多的命令,它本身是一个程序,用于查看文件的内容,也可以将多个文件中的内容串联到一个文件中去
参数 | 说明 |
-n | 显示行号,空行也会显示 |
-s | 多个空行合成一个空行 |
-b | 显示所有内容的行号 |
-e | 显示行的结尾,行的结尾会使用'$'表示 |
演示
# 直接查看文件的内容
> cat /etc/sysconfig/network-scripts/ifcfg-ens33# 查看文件的时候 同时显示行号
> cat -n /etc/sysconfig/network-scripts/ifcfg-ens33# 查看文件的时候 会把多个空行显示成一个空行
> cat -s ens33# 显示行的结尾符
# 可以排查出内容 一行的结尾是否有空格
> cat -e ens33# 同时查看两个文件的内容
# 同时查看 ens33 和aaa这个文件
> cat ens33 aaa
# 我们可以使用> 或者 >>符号 来出俩cat命令读取出来的内容
# 通常是指定一个位置的文件,会将结果写入文件,
> 覆盖写入
>> 追加写入# 查看ens33的内容并显示行号,而后将内容包括行号一起写入bbb文件
> cat -n ens33 > bbb
3.9 wget命令
wget命令Linux系统中,用于从web上下载文件的命令工具,支持:HTTP/HTTPS/FTP等协议下载,wget也提供了很多的选项,例如下载多个文件、后台下载、使用代理等。
注意:系统没有这个命令工具的,需要安装
# 安装wget命令
> yum -y install wget
# 下载资源
> wget <网址># 下载360安全卫士程序[这个程序是exe,Linux系统不能装]
> wget https://dl.360safe.com/360/inst.exe# 阿里云镜像网站,免费提供很多下载的资源
http://mirrors.aliyun.com
# 从阿里云镜像网站 下砸CentOS资源
> wget http://mirrors.aliyun.com/repo/Centos-7.repo
参数 | 说明 |
-o | 设置保存文件的路径和别名 |
-P | 设置保存到的目录 |
演示
# 下载360安全卫士 ,重命名为360anquan.exe 并且保存到d目录
> wget -o d/360anquan.exe https://dl.360safe.com/360/inst.exe# 下载360安全卫士,下载到opt目录
> wget -P /opt https://dl.360safe.com/360/inst.exe
--2023-12-27 17:56:54-- https://dl.360safe.com/360/inst.exe
正在解析主机 dl.360safe.com (dl.360safe.com)... 117.21.187.59, 117.21.187.39, 117.21.187.43, ...
正在连接 dl.360safe.com (dl.360safe.com)|117.21.187.59|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:4112616 (3.9M) [application/octet-stream]
正在保存至: “/opt/inst.exe”100%[===================================================>] 4,112,616 8.62MB/s 用时 0.5s
2023-12-27 17:56:54 (8.62 MB/s) - 已保存 “/opt/inst.exe” [4112616/4112616])
3.10 curl指令
curl命令,是一个客户端工具,全程:Client URL
主要用来请求web服务器,它也可以用来下载文件
演示
# 请求百度首页
> curl http://www.baidu.com# 请求 。。。地址 将请求的结果 保存到 aaa.json文件中去
> curl http://124.222.209.62/api/spu > aaa.json
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 198k 0 198k 0 0 797k 0 --:--:-- --:--:-- --:--:-- 798k# 使用curl下载资源
# 下载360安全卫士 并且命名为 aaa.exe
> curl -o aaa.exe https://dl.360safe.com/360/inst.exe
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 4016k 100 4016k 0 0 4963k 0 --:--:-- --:--:-- --:--:-- 4958k
四、其他指令
4.1 which 命令
查看指定文件的路径和别名,可以查询命令的存放位置等等
演示
# 查看 ls 指令信息
> which ls
alias ls='ls --color=auto' # ls是ls --color=auto的别名
/usr/bin/ls #ls这个命令的具体位置
[root@localhost sof14]# ls --color=auto# 使用一下全名
> ls
aaa aaa.exe aaa.json bbb ccc.txt Centos-7.repo d ens33 index.html inst.exe inst.exe.1 y.txt z.txt
> ls --color=auto
aaa aaa.exe aaa.json bbb ccc.txt Centos-7.repo d ens33 index.html inst.exe inst.exe.1 y.txt z.txt
4.2 whereis
显示指令的路径以及帮助手册等等
> whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
4.3 文件类型的区分
> ll
总用量 12556
-rw-r--r--. 1 root root 290 12月 27 17:16 aaa
drwxr-xr-x. 2 root root 53 12月 27 17:55 d
# -rw-r--r-- 第一个符号 代表的是文件的类型
- rw- r-- r--
类型 属主权限 数组权限 其他用户> ll /dev
类型 | 说明 |
- | 普通文件 |
d | 目录(文件夹) |
l | 链接(link) |
c | 设备文件 |
s | 套接字文件(socket) |