Linux(文件管理 图片+大白话)

后面也会持续更新,学到新东西会在其中补充。

建议按顺序食用,欢迎批评或者交流!

缺什么东西欢迎评论!我都会及时修改的!

在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频

王晓春老师的个人空间-王晓春老师个人主页-哔哩哔哩视频

需要掌握的知识

创建文件

删除文件 

打开文件 

记住这里不是文件的内容,而是目录项

打开文件时不会把文件数据直接读入内存。只是把目录项信息复制到内存中的打开文件表,并把打开文件表返回给用户

一张是系统打开表会记录所有的正在被其他进程使用的文件的一些信息。

另外每个进程也会有自己的一个打开文件表记录了这个进程此时已经打开的文件到底有哪些

系统表索引号会指向系统打开文件表项,打开计数器是用来记录文件被几个进程打开过。

txt文件已经被某个记事本进程打开了,系统会提示我们暂时无法删除文件。

系统在背后做的事就是,当我们选择删除文件时,首先来检查一下文件是否被某个进程打开了,也就是查询了系统中的打开文件表,如果该文件被某个进程使用的时候是不能删除的。

读写指针是对文件读写到了什么位置,还需要表明该进程对于文件的访问权限。

不同进程对于文件读写操作是不同的,因此不同的进程的读写指针也是不一样的。

 关闭文件

读文件 

读写操作前必须打开文件

指明打开文件的索引号和读多少还需要指明读入数据放在内存中什么位置。

读指针指向外存中,将用户的指定大小读入用户指定的内存区域中。

写文件 

读写操作前必须打开文件

指明打开文件的索引号和写多少还需要指明写回外存的数据放在内存中的什么位置

写指针指向外存中,将用户的指定大小读入用户指定的内存区域中。

文件描述符和inode以及文件指针的区别与理解_文件句柄是inode吗-优快云博客

系统调用

系统调用就是程序员来请求操作系统内核服务的一个途径,和平时编程的时候使用的函数调用,是很类似的。

系统调用和普通的库函数又有区别

用高级语言提供库函数在底层也会用到操作系统提供的系统调用功能来请求操作系统的服务。

系统调用比高级语言更为底层的一个接口。

 为什么系统调用是必须的?

操作系统内核对共享资源进行统一管理,保证他们并发运行。

 凡是共享资源有关的操作内存、IO、文件等等,都是得通过系统调用。

 陷入指令将用户态转内核态。执行由陷入指令触发的内中断程序。

接下来系统调用入口程序,会检测寄存器这些参数,通过参数1会知道此时这个应用程序想要的是fork系统调用服务,接下来系统调用入口就会调用与特定的系统调用类型所对应的处理程序。让这个程序上CPU运行

 系统调用处理完以后又会转回用户态接着执行之前的这个应用程序。

可以用高级语言库函数,库函数封装了系统调用的。

文件管理基本命令

根目录下面有什么文件夹呢

/bin /boot /usr /root /sys /proc /var /etc 等等等...

 绝对路径和相对路径

相对路径是相对当前所在文件夹为/opt

一般指定相对于当前工作目录,特殊场景下,是相对于某目录的位置 (配置文件中)

ls

-a隐藏文件
-l显示时间文件大小文件所有者
-R递归 访问文件夹若此文件夹有子目录则会一直访问下去
-d查看本身文件夹

ls 实际上是一个别名 也就是加了个颜色

不想用别名 使用旧名

-R递归访问 直接把你祖宗都找出来 

查看目录本身内容 

ll

ll 也是使用了一个别名

atimeacess time   文件被读了
ctimechange time 所有者改变 属性更改
mtimemodify time  修改时间

chown change owner

修改一个文件哪个时间会改变呢

 三个时间都看到

inode 唯一标识身份号 每个用户账号都有唯一的UID

怎么区分文件类型呢

文件的最上面头部信息 存放了关于这个文件的格式信息

叫做magic number魔数

什么乱七八糟的不能简单一点吗!

okok!

 还可以查看命令本身

 window Linux可执行程序都是二进制文件

cat 看不了二进制文件

Linux不挑后缀

echo有内部  和 外部命令 外部命令没有内部优先级高

ls是外部命令删了就没了

文件七种类型

-普通文件
b块设备
l软连接
c字符设备
d目录
s套接字
p管道文件

批量查看文件类型

window和Linux格式转换(重点)

转换文件格式

yum -y install man-pages
man ascii

 

回车 和 换行不是一个东西? 

当然不是 我们敲下回车键做了两件事

1.光标从第一行到第二行

2.并且光标位置在开头也就是换行和回车同时都做了

早期的Linux为了节省存储就把回车换行当成一个字节了 也就是 0a

而windows 还是两个字节包含0d 0a

 所以需要转换一下!

yum -y install dos2unix   dos(windows) -> unix(linux)
dos2unix wintest.txt

yum -y install unix2dos unix(linux) -> dos(windows)
unix2dos wintest.txt

编码格式转换 

 字符集也得一样 Linux默认是utf-8 当然windows 也得选择 utf-8

 也可以使用命令转换 gb2312 和 ISO-8859一样的 注意Linux默认是UTF-8

 -f 是文件原编码 -t是文件要转换编码 -o是输出

文件通配符

使用范围:ls 对现有文件进行过滤touch是创建的所以不识别通配符(看不懂别着急下面有解释)

*匹配多个字符或零个    不匹配.开头文件即隐藏文件
?匹配任何单个字符
~当前家目录 cd ~root
.当前目录
~-

上一个目录 这个是用户呆的上一次目录而不是父目录比如

pwd 查看当前目录 假如是/ 我cd 到 /data 这个时候我当前

目录为/data 我的上一个目录就是/

..父目录
[0-9]0-9任意一个数字
[^0-9]除了数字任意一个字符
[wang]取得是wang 4个字母中的一个

 下面有创建语句别着急先理解一下这些符号

[a-c] 列出的文件顺序是 a A b B c 发现大写C没有了对吧

因为是[a-c] 没有到C

[a-Z]就全显示了

若是只想显示小写怎么办呢

[:lower:] 代表a-z [[:lower:]]代表取一个a-z(不包括大写) 取一个

实在不能理解就记住是这样写的就行

 file[wang] 取得是wang 4个字母中的一个 ^代表相反

隐藏文件

.开头的为隐藏文件

 *匹配不了.开头的文件 *不包含隐藏文件

小练一下 

1  ls /etc/i*[0-9]*[[:lower:]]
2  ls /etc/[0-9]*[^0-9]
3  ls [^a-zA-Z][a-zA-Z]*
4  ls -d /etc/rc[0-6]* 
5  ls /etc/[mnrp]*.conf
6  ls -d /root/.*   == l. 
7  ls -d /etc/*/显示文件夹  ls -d /etc/*显示文件和文件夹


显示/var目录下所有以i开头,以一个小写字母结尾,且中 间出现至少一位数字的文件或目录
ls /var/i*[0-9]*[[:lower:]]
显示/etc目录下所有以m开头以非数字结尾的文件或目录
ls /etc/m*[^0-9]
显示/etc目录下,所有以.d结尾的文件或目录
ls /etc/*.d

 ls -d .* = l.   .可以代表当前文件夹 ..代表父文件夹

 通配符被取消掉

''单引号可以把通配符功能取消掉

文件的创建与复制

touch

touch 里面识别不了通配符!

ls 对现有文件进行过滤touch是创建的所以不识别通配符

 刷新时间

 创建日志

[root@study data]# date
2024年 10月 30日 星期三 16:43:09 CST
[root@study data]# date -d "-1 year"
2023年 10月 30日 星期一 16:43:26 CST
[root@study data]# date -d "-1 day"
2024年 10月 29日 星期二 16:43:35 CST
[root@study data]# date  +%F_%T
2024-10-30_16:45:58
[root@study data]# touch `date -d "-1 day" +%F_%T`.log
[root@study data]# ls
2024-10-29_16:47:26.log
[root@study data]# touch $(date -d "1 year" +%F_%T).log
[root@study data]# ls
2024-10-29_16:47:26.log  2025-10-30_16:47:46.log



练习
把/etc/目录下所有文件,备份到/data独立的子目录下,并且要求子目录格式为backupYYYY-mm-dd
[root@study data]#cp -a /etc/ /data/backup`date + %F`

创建/data/rootdir目录,并且复制/root下所有文件到该目录内,要求保留原有权限
[root@study data]#cp -a /root /data/rootdir

copy 

cp source dest 
cp source dir 这里的source可以有多个
cp -t dir source 也可以把dir 放前面 只是交换了位置 还是source到dir

一个文件的属性非常重要!!!!!!!

-p保存权限所有权和时间戳
-r递归
-d不复制原文件只复制链接
-a上面命令我全包了!常用于备份
-v显示过程
-i询问是否覆盖
-f如是不能覆盖 删除了再创建
--backup版本递增
-b只保留最近的

复制文件 

复制文件夹

改名

一个神奇现象(非常重要!)

 这个时候我们再执行这个命令怎么说?cp -r /etc/ /data/etcbackup

有必要总结一下

 cp -r /etc/ /data/etcbackup

  1. 若/data/下面无目录 将/etc/改为/etcbackup/存放
  2. 若/data/下面以有/etcbackup/ 将/etc放入
  3. 若/data/下面已有/etc/backup/ /etc/backup/下面已有/etc/ 选择是否覆盖

 复制软连接

 我们实际上拷贝的是软连接指向的文件也就是centos-release

 还有高手?

 咳咳,av组合也不是不行

 覆盖是否询问

结论:-i导致的 

用户可以覆盖root用户的文件吗

这个时候如是cp -f 1.txt hosts  可以吗?

这里的逻辑是删除了root用户的hosts wang用户创了一个一模一样所以属主也变了

 再提问一下用xiaowang 可以删除 xiaowang文件吗

 为啥可以删除? 这里权限又不足了!

 自己家是不是自己做主 那root用户文件跑到我家里面我肯定可以删除啊!

备份

版本递增

最近一次备份 

-b的大哥

别把硬盘给撑爆了 

块设备文件会导致磁盘撑满

所以要输入-a  保留属性

不要低估霸道的力量(非常重要)

 别人文件你拷过来拷成别人的文件,等于别人又创建一个文件。

-a 就不能起保留属主的作用了 凡事都有优先级 并不是绝对的

其实我感觉我这里没有解释清楚做几个实验!

  1. 在wang用户下
  2.  root 属主 复制到除了wang家目录其他地方都是权限不足
  3. 在wang家目录就算-a 也还是显示wang创建的文件
  4. 在wang家目录可以删除重命名root文件(任意用户文件)

  1.  在root用户下
  2. 任意用户文件 root用户都可以复制到任意文件夹 
  3. root使用-a 可以保留其他用户使用的记录

 复制隐藏和非隐藏文件

说白了就算把整个wang文件夹下的东西复制到了/opt/下 

文件的移动和重命名

 mv

和cp 非常像
mv source dest 
mv source dir 这里的source可以有多个
mv -t dir source 也可以把dir 放前面 只是交换了位置 还是source到dir

  既可以移动也可改名

同一分区速度快,不同分区速度慢

同一分区文件都在分区里只需改名字就行不用动磁盘当然快

 批量改名

rename conf conf.bak f* 将f*文件中含有conf修改成conf.bak

rename .bak '' *bak 去掉文件含有bak后缀

文件删除

rm

rm -rf 谨慎使用!

删除当前文件夹

rm -rf * == rm -rf ./*但是删不了隐藏文件
rm -rf .* 删除有风险 会删除到父目录
rm -rf .[^.]* 删除隐藏文件

若看不懂这个表达式建议再看看上方文件通配符

 rm -rf .

我们删除当前文件夹总共分两步 

  1. rm -rf *  == rm -rf ./*删除非隐藏当前文件夹
  2. rm -rf .[^.]* 删除隐藏当前文件夹

好像直接删除文件夹也行好麻烦(bushi)

rm -rf /*

非常危险!!!! 直接给根目录的子目录干没了这里就不演示了

生产中建议

忘记rm拿mv代替 将文件移动到新目录 

将rm改成mv

删掉rm或改名

 删除-f

 有这么一个文件该怎么删除?

 

 rm --help 

 but 有局限

还是rm ./xx更加通用 

目录操作

tree 

yum -y install tree
tree -d 只列文件夹不列文件

mkdir 

-p递归创建文件夹
-v显示创建过程

rmdir基本没咋用过这里不赘述了 

 练习

mkdir -p /testdir/dir1/x 后面都是这样

参考文献

1文件管理基本命令和windows文本和Linux文本格式的区别_哔哩哔哩_bilibili

40:52 echo 内部命令 可以看一下

2文件管理相关命令创建新文件和复制_哔哩哔哩_bilibili

3文件管理基本命令_哔哩哔哩_bilibili

4.1_7_文件的基本操作_哔哩哔哩_bilibili

总结

本人基本上是个人理解加参考其他大佬的肯定有很多问题欢迎指正,我会及时修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值