Linux 文件管理
1. Linux下的目录结构
/
是Linux里的根目录
Linux的一级目录
- /boot :存放的是系统的启动配置⽂件和内核⽂件
- /dev :存放的是Linux的设备⽂件
- /etc:存放的是Linux下的配置文件
- /home:存放普通用户的家目录
- /media:挂载点⽬录
- /mnt:挂载点⽬录
- /run:挂载点⽬录
- /opt:存放软件⽂件的⽬录
- /proc:存放的是进程⽂件
- /srv:存放⼀些资源⽂件
- /sys:存放⼀些资源⽂件(系统资源)
- /tmp:存放的是⼀些临时⽂件(⾮常重要)
- /var⽬录:存放log⽇志⽂件的⽬录(⾮常重要)
- /usr⽬录:Linux软件默认安装的⽬录
- /bin->/usr/bin :存放的是普通⽤户能执⾏的命令
- /lib->/usr/lib:存放的是32位的函数⽂件
- /lib64->/usr/lib64:存放的是64位的函数⽂件
- /sbin->/usr/sbin:存放的是超级⽤户能执⾏的命令
- /root:是root⽤户的家⽬录
在商⽤环境或⽣产环境,⼀定要尽量的避免直接使⽤root权限操作Linux
su命令详解
su(switch user)切换⽤户
普通⽤户切换到任何⽤户都需要输⼊密码
root⽤户切换到任何⽤户都不需要输⼊密码
su - username
su命令切换⽤户如果不加"-",只是shell层⾯的切换,⽤户的环境变量实际上是没有变的
su -和su - root 是⼀样的,没区别
文件管理命令
⽂件的增删改查
⽂件的创建(⽂本⽂件的创建,⽬录⽂件的创建)
⽂件的删除(⽂本⽂件的删除,⽬录⽂件的删除)
⽂件的修改(⽂件内容的修改,⽂件属性的修改)
⽂件的查看(⽂件内容的查看,⽂件属性的查看)
理解绝对路径和相对路径
绝对路径:以顶级⽬录开头的路径就是绝对路径,在Linux⾥⾯"/"就是顶级⽬录,以/开头的路径就是绝对路径
相对路径:不以/开头的路径就是相对路径
- cd(change directory)命令
cd path(相对路径或者绝对路径)
cd … 表示切换到上级⽬录
cd ~ 表示切换到当前shell⽤户的家⽬录,相当于直接敲cd命令
cd - 表示切换到上次所在的⽬录(反复的敲,会在两个⽬录下反复的切换)
ctrl+shift+t多⼀个命令⾏的shell,然后atl+1~9来回切换,ctrl+d关闭当前的shell
- ls 命令
ls 是对【文件属性】的查看
ls 如果什么都不加,表示显示当前⽬录下的所有⽂件名称
$ ls
# ls后⾯加路径,就能显示路径下⾯的⽂件内容,如果ls后⾯跟的是⽬录,就把⽬录下⾯的⽂件名字列出来,如果ls后⾯跟的是普通⽂件,就把这个普通⽂件的名字列出来
$ ls /opt/testfile.txt #只列出文件的名字(文件名也算文件的属性)
# ls /opt #列出目录下的文件
# ls 可以跟多个路径(相对路径和绝对路径都可以)
$ ls /opt /var /opt/testfile
# ls 的参数详解
-l 参数表示显示⽂件的详细信息
-a 参数表示显示以"."开头的⽂件,在Linux中,以"."开头的⽂件是隐藏⽂件
-d 表示显示⽬录本身的属性,⽽不是⽬录下的内容的属性
-h 参数必须和-l参数⼀起使⽤,-h参数能让⽂件的⼤⼩显示的更⼈性化
ls -l显示的内容,第⼀列表示⽂件的类别
"-"表示普通⽂件
“d”表示⽬录本身⽂件的属性
ls -l /opt -d # 显示一行/opt目录本身的属性
# drwxr-xr-x. 7 root root 113 4月 18 22:49 /opt
“b”表示块设备(存储设备)
“l”表示快捷⽅式(软链接)
上⾯9列表示权限列,表示3类⼈的权限,前三列表示⽂件拥有者对该⽂件具备的权限,中三列表示⽂件所属组对该⽂件具备的权限,后三列表示其他⼈
对该⽂件的权限。
r表示read,读权限
w表示write,写权限
x表示execute,执⾏权限
-表示没有权限,3列⾥⾯,第⼀列总是-或者r,第⼆列总是-或w,第三列总是-或x
权限9列后⾯的"."表示该⽂件具备SELinux的安全上下⽂,有些时候,权限9列后⾯可能是"+",如果是+,则表示该⽂件有ACL权限。
后⾯⼀列,数字那列,表示该⽂件有的链接数量。
⽂件所属组后⾯那列表示⽂件的⼤⼩,单位是字节(Byte)
1024Byte=1KB,1024KB=1MB,1024MB=1GB,1024GB=1TB,1024TB=1PB,1024PB=1EB
再后⼀列就是⽉,⽇,时,分,表示时间。
最后⼀列表示的是⽂件名字
# 参数在99%的命令⾥,参数的顺序是⽆所谓的
stat filename
查看文件的一些时间信息(修改时间、创建时间、最近访问时间等)
- cat命令的使用
cat 文本文件的path
cat /opt/filename /etc/hosts #可以显示多个
- head 命令的使用
head -n 10 filename.txt #显示前十行 -n number
head -n 10 filename.txt -n 3 test.txt
[root@localhost opt]# head -n 5 filename.txt -n 2 test.txt
==> filename.txt <==
sdwj
滴答
==> test.txt <==
aaaaaaaaaaaaaaaaaaaaaaaaaaaa
- tail命令的使用
tail 显示文件的后面的内容
tail -n 10 filename.txt #显示后十行
tail -f filename.txt #持续打印文件的后面的内容
- more命令的使用
more命令显示文本内容非常多的时候使用,它是以一页一页显示的。
more filename.txt
回车查看下一行的内容
空格查看下一页的内容
q退出more 的状态
more命令不⽀持向前翻⻚
- less命令的使用
less和more差不多,less的好处是可以向前翻⻚
more有的功能less都有,more没有的less也有
- 创建文件方式
# 文本文件的创建
touch file.txt file1.txt # 创建的⽂本⽂件默认都是空的
# 如果touch后⾯跟的⽂件已经存在,那么就更新这个⽂件的时间戳
touch file{1..5} # 这样可以创建五个文件 分别是file1 file2 file3 file4 fil5 可以批量创建文件
Linux里的后缀名是没有作用的,但是加上后缀,让人看着是有意义的。
为什么说windows⾥⾯要有后缀名呢? 菜鸡保护机制
# 在Linux里如何查看文件的类型
file /opt/
[root@localhost opt]# file /opt/
/opt/: directory # 这是一个目录
file /opt/filename
[root@localhost opt]# file /opt/filename.txt
/opt/filename.txt: UTF-8 Unicode text # 这是一个文件
- 创建目录的命令
mkdir 创建目录
mkdir demo
mkdir -p demo/demo1/demo2 # -p parents 父级目录
# 如果没有/tmp/demo1/demo2 ⽬录,-p参数会让demo1⽬录⾃动创建
- 删除命令
#删除目录
rmdir demo #demo假设是一个目录
#删除除目录以外的文件
rm filename # 会询问你是否删除
#强制删除,不询问
rm -f filename
-i 参数能提示是否删除⼀个⽂件
-r 参数能赋予rm删除⽬录的能⼒
-r -f⼀起⽤,⽂件⽬录都能在不提示的情况下,直接⼲掉(删除),删对了,升职加薪,⾛向⼈⽣巅峰。
删错了,再⻅。
- 文件的拷贝和剪贴
指定多⽂件拷⻉
cp 源⽂件1 源⽂件2 .... ⽬的⽬录path
cp 如果最后⼀个⽂件是⼀个存在的⽬录,就将cp指定的⽂件拷⻉到⽬标⽬录
拷⻉且改名(备份) 常用
cp 源⽂件 ⽬的⽬录/awhduawdaw
cp如果最后⼀个⽂件并不是⼀个存在的⽬录,就将cp指定的⽂件拷⻉到⽬标名字的上层⽬录,并且将名字更改为⽬标
名字
cp /etc/hosts /root/Desktop/hosts.bak
cp -r可以拷⻉⽬录
cp -a 可以保留⽂件的原有属性 # 必须是以root权限创建的目录
cp -i 也有-i提示参数
# 文件的移动
# ⽤法和cp基本⼀致,唯⼀的不同就是移动之后,源⽂件没了,到了新的路径
# 如果移动的源⽂件和⽬的⽂件路径⼀致,就可以实现改名的操作
mv 源文件 目标文件
- 通配符
?就是通配符的⼀个,"?"表示⼀个⾮空的任意字符
\表示转移字符,能让特殊字符失去原有的功能
[]表示匹配"[]"包含的其中的⼀个字符
[a-z]表示所有的字⺟
[A-Z]表示匹配所有⼤写的字⺟
[1-9]表示匹配所有的数字
[^] # ^ 表示非得意思
*表示匹配任意数量的字符
- vim编辑器
vim 有四大模式
命令行模式
编辑模式
末行模式
可视化模式
1. 命令行模式
hjkl 表示命令模式里调整光标方向的命令
h 左
j 下
k 上
l 右
gg 切换到行首
G 切换到最后一行
输入nG 就能切换到第n行 # 比如输入3G 就能到第三行 按完3松手,再按G
光标位置,按x 就能删除光标所在的字符 ,连续按x 向右边删
如果输入X 就能删除光标左边的字符,连续按X向左边删
按u 撤销 ,相当于Windows的Ctrl+z, Linux里的撤销次数几乎无限,Windows由于缓冲区不一样,撤销次数有限制。
#命令行模式的高级用法
dd 在命令模式下,按dd删除光标所在行 按5dd 删除包含光标所在行的下面的5行
yy 在命令模式下,按yy 复制光标所在行,按8yy,复制包含光标所在行的下面的8行
p 粘贴复制的文本内容 粘贴到光标所在行的下一行
P 粘贴复制的文本内容, 粘贴到光标所在行的上一行
p 和 P 都可以把在上次执行的yy 或者dd命令来粘贴出来。
2. 编辑模式
在命令模式下,输入 i / I / a / A / o / O 都能进入编辑模式
在(任何)编辑模式下,按esc都能回到命令模式
命令模式下按i ,从光标所在行左边插入文本
命令模式下按a , 从光标所在行右侧插入文本
命令行模式按I , 从光标所在行行首开始插入文本
命令行模式按A , 从光标所在行行尾开始插入文本
命令行模式按o , 从光标所在行的下一行另起一行插入文本
命令行模式按O , 从光标所在行的上一行另起一行插入文本
3. 末行模式
在命令模式下,输入正斜线"/" 或者 冒号":" 进入末行模式
常见操作如下
- 查看指定的字符串 # 输入 / (/test)再输入要查找的字符,会以高亮显示。没找到就报错。
# 找到多个相同的字符串,按n 切换到下一个找到的字符串,按N切换上一个找到的字符串
- 文本内容的替换
:5,10s/aaa/bbbbbbb/g
# g :global # 代表全局替换的意思
将包含第5行和第10行所有的aaa全部替换成bbbbbbbb
:1,$s/RRR/fffff/g
将第一行到最后一行的RRR全部替换成ffffff
:1,$s/\/var\/log/\/opt\/filename/g # 记得转义
如果在后面不加g ,就只替换每一行遇到的第一个匹配的字符串被替换。
- 保存文本内容
# 按 :
# w 保存, wq 保存并退出 wq! 保存并强制退出
- 退出vim编辑器
# 输入q 退出,q! 强制退出
# 常见操作
输入 :set number 显示行号 简写 :set nu
:set nonumber 取消行号 简写 :set nonu
4. 可视化模式
命令模式,按 v 或者 V进入可视化模式
Linux里的重定向
- 输出重定向
我们可以使用 > >> 来将命令的结果输入到一个文件中
cat /etc/hosts >> ./file.txt # 没有这个file.txt文件,会默认创建这个文件
cat /etc/hosts > ./file.txt # 一个 > 是会直接覆盖源文件的,两个 >> 是追加内容。不会覆盖原有的内容
> 正确的覆盖
>> 正确的追加
2> 错误的覆盖
2>> 错误的追加
&> 正确的错误的都覆盖
&>> 正确却错误的都追加
&>> /dev/null #它是一个黑洞文件,可以将一些敏感的或者无关紧要的东西重定向到这个文件中。
举例:cat /etc/hosts &>> /dev/null
- 输入重定向(可以将交互式命令变为非交互式命令)
<
<<
[root@localhost ~]# cat <<EOF
> you
> ni
> hao
> EOF
you
ni
hao
cat > hello.txt <<EOF
>nihao
>AAA
>EOF
- 管道命令
1.管道两边都总有命令
2.管道的左侧产生输出结果,经过管道后,变成输入
ls | xargs cat #这个xargs 将输出的内容作为cat的参数来使用。
比如ls 的结果是 file.txt(这里面存的内容是ABCDEFG)
那么 ls | xargs cat就是 cat file.txt 这样的意思。
也就是说,最后输出的是ABCDEFG
grep # 中文的意思:抓
# grep 内容 文件名
过滤文件中的内容。
grep filename
参数解释
-i 不区分大小写
-v 反向抓取(比如,你要抓123 加了-v 就是除了123都过滤)
-n 显示行号
-A after 将抓取关键字后两行列出来
-B before 将抓取关键字前两行列出来
在管道里使用grep的命令频率很高
ls | grep abc
- 快捷键
ctrl + a 移动光标到最左侧
ctrl + e 移动光标到最右侧