Linux基础巩固--Day2--文件操作
文件系统结构
文件和目录被组织成一个单根倒置树结构
文件系统从根目录下开始,用“/”表示
根文件系统(rootfs): root filesystem
文件名称区分大小写
以.开头的文件为隐藏文件
路径分隔的 /
文件有两类数据:
元数据 : metadata
数据:data
文件系统分层结构: LSB Linux Standard Base
FHS: 文件系统分层结构标准,地址:http://www.pathname.com/fhs/
/:根目录,位于Linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中。 /bin : 提供用户使用的基本命令, 存放二进制命令,不允许关联到独立分区,OS启动会用到里面的程序。 /boot:用于存放引导文件,内核文件,引导加载器. /sbin:管理类的基本命令,不能关联到独立分区,OS启动时会用到的程序(重要的命令通常处于bin,不重要的则安装在sbin)。 /lib:存放系统在启动时依赖的基本共享库文件以及内核模块文件. 系统使用的函数库的目录 也存放了大量的脚本库文件 ,程序在执行过程中,需要调用时会用到 /lib64:存放64位系统上的辅助共享库文件. /etc: 系统配置文件存放的目录,该目录存放系统的大部分配置文件和子目录,不建议在此目录下存放可执行文件 。 /home:普通用户主目录,当新建账户时,都会分配在此,建议单独分区,并分配额外空间用于存储数据。 /root: 系统管理员root的宿主目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。 /media:便携式移动设备挂载点目录. /mnt:临时文件系统挂载点. /dev: 设备(device)文件目录,存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,存放连接到计算机上的设备(终端、磁盘驱动器、光驱及网卡等)的对应文件 (b 随机访问,c 线性访问) /opt:第三方应用程序的安装位置. /srv: 服务启动之后需要访问的数据目录,存放系统上运行的服务用到的数据,如www服务需要访问的网页数据存放在/srv/www内。 /tmp:存储临时文件, 任何人都可以访问,重要数据一定不要放在此目录下。 /usr: 应用程序存放目录,/usr/bin 存放保证系统拥有完整功能而提供的应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件,_/usr/local 存放软件升级包,第三方应用程序的安装位置,/usr/share/doc _系统说明文件存放目录。 /var :放置系统中经常要发生变化的文件,如日志文件。/var/log 日志目录及文件./var/tmp:保存系统两次重启之间产生的临时数据. /proc: 用于输出内核与进程信息相关的虚拟文件系统,目录中的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间 /sys : 用于输出当前系统上硬件设备相关的虚拟文件系统. /selinux:存放selinux相关的信息安全策略等信息.
在Linux中,使用命令查看文件,首字母会标记该文件的文件类型,一般有以下几种类型:
– : 普通文件
d: 目录文件
b:块文件
c:字符文件
l:符号链接文件
p:管道文件pipe
s:套字节文件socket
创建和查看文件
# 创建文件夹 zhangw@ubuntu:~/studytest$ mkdir two # 创建文件 zhangw@ubuntu:~/studytest$ touch three.txt # 查看文件 zhangw@ubuntu:~/studytest$ cat sm.log 查看sm.log文件内容 zhangw@ubuntu:~/studytest$ head sm.log 查看sm.log文件内容的前10行 zhangw@ubuntu:~/studytest$ head -n 20 sm.log 查看sm.log文件内容的前20行 zhangw@ubuntu:~/studytest$ tail sm.log 查看sm.log文件内容的后10行 zhangw@ubuntu:~/studytest$ tail -n 20 sm.log 查看sm.log文件内容的后20行 zhangw@ubuntu:~/studytest$ tail -f sm.log 动态查看sm.log文件内容 zhangw@ubuntu:~/studytest$ more sm.log 以翻页的形式查看sm.log的内容(按空格键下翻,不能上翻) zhangw@ubuntu:~/studytest$ less sm.log 以翻页的形式查看sm.log的内容(按上下键进行上下翻页,按q退出)
# 查看文件,find
zhangw@ubuntu:~/studytest$ find . -name *java* 在当前位置下查找文件名包含java字符的文件
zhangw@ubuntu:~/studytest$ find . -perm 777 在当前位置下查找权限为777 的文件
zhangw@ubuntu:~/studytest$ find / -user ouyang 在系统中查找用户为ouyang的文件
zhangw@ubuntu:~/studytest$ find . -type d 在当前位置下查看找类型为文件夹的文件
复制,移动和删除文件
# 复制
zhangw@ubuntu:~/studytest$ cp three.txt two/ #复制文件
zhangw@ubuntu:~/studytest$ cp -r one /home/zhangw/studytest/two/ # 复制文件夹需要加 -r
# 移动 zhangw@ubuntu:~/studytest$ mv one /home/zhangw/studytest/two/ # 删除
zhangw@ubuntu:~/studytest$ rm -rf #强制删除,谨慎使用 -r 递归删除,-f强制删除
删除的替代方法:
1 mv one /tmp/ 用mv到指定文件夹来形成类似回收站的功能,防止误删除
2 alias 设置别名
alias
rm
=
'This command cannot be used'
zhangw@ubuntu:~/studytest$ vim /root/.bashrc #将alias写入到配置文件中
zhangw@ubuntu:~/studytest$ source /root/.bashrc #对配置文件立即生效
\rm -rf # 加\屏蔽别名
确定文件内容
文件可以包含多种类型的数据
检查文件的类型,然后确定适当的打开命令或应用程序使用
file [options] <filename>....
常用选项:
-b 列出文件辨识结果时,不显示文件名称
-f filelist 列出文件filelist中文件名的文件类型
-F 使用指定分隔符号替换输出文件名后默认的“:”f分隔符
-L 查看对应软链接对应文件的文件类型
--help显示命令在线帮助
软链接和硬链接
硬链接
创建硬链接会增加额外的记录项以引用文件
本质上是同一个文件系统上的同一个物理文件,只是重新起了个名
每个目录引用相同的inode号
创建时链接数递增
删除文件时:
rm命令递减计数的链接
文件要存在,至少有一个链接数
当链接数为零时,该文件被删除
不能跨越驱动器或分区
语法:
ln filename [linkname]
软链接
软链接是存放另一个文件的路径的形式存在。
软链接可以 跨文件系统 ,硬链接不可以。
软链接可以对一个不存在的文件名进行链接,硬链接必须要有源文件。
软链接可以对目录进行链接。
语法:
ln -s filename [linkname]
ln命令格式:
ln [参数] [源文件或目录] [目标文件或目录]
主要参数:
-i 交互模式,文件存在则提示用户是否覆盖。
-s 软链接(符号链接)。
-d 允许超级用户制作目录的硬链接。
-b 删除,覆盖以前建立的链接
软链接 (符号链接) ln -s source target
硬链接 (实体链接)ln source target
三种I/O设备
标准输入和输出
程序:指令+数据
读入数据:Input
输出数据:Output
打开的文件都有一个fd:file descriptor(文件描述符)
Linux给程序提供三种I/O设备
标准输入(STDIN) -0 默认接收来自键盘的输入
标准输出(STDOUT)-1默认输出到终端窗口
标准错误(STDERR)-2 默认输出到终端窗口
重定向
> 是重定向符,就是把前面输出的内容重定向到后面指定的位置
>! 输出重定向到一个文件或设备 强制覆盖原来的文件
>> 输出重定向到一个文件或设备 追加原来的文件
>前是可以加数字来说明把什么内容重定向到文件中,默认是把标准输出重定向到文件中,所以下面这个例子和上面那个是一样的(例2):
echo "一些内容" 1> filename.txt
& 是一个描述符,如果1或2前不加&,会被当成一个普通文件。
1>&2 意思是把标准输出重定向到标准错误.
2>&1 意思是把标准错误输出重定向到标准输出。
&>filename 意思是把标准输出和标准错误输出都重定向到文件filename中
为何要使用命令输出重导向
当屏幕输出的信息很重要,而且我们需要将他存下来的时候;
背景执行中的程序,不希望他干扰屏幕正常的输出结果时;
一些系统的例行命令(例如写在 /etc/crontab 中的文件)的执行结果,希望他可以存下来时;
一些执行命令,我们已经知道他可能的错误讯息,所以想以『 2> /dev/null 』将他丢掉时;
错误讯息与正确讯息需要分别输出时。
管道
使用符号“|” 表示,用来连接命令
命令1 | 命令2 | 命令3
将命令1 的STDOUT 发送给命令2 的STDIN,命令2的STDOUT发送到命令3 的STDIN
STDERR默认不能通过管道转发,可利用2>&1或 |&实现
最后一个命令会在当前shell进程的子shell进程中执行
组合多种工具的功能
例如:ls | tr 'a-z' 'A-Z'