目的:了解Linux文件系统
Linux系统常用的命令
# uname (Unix Name)系统相关的命令
# 查看Linux系统的内核版本
uname -r
系统环境变量PATH
# 显示系统变量的环境,一般配置可执行文件的路径,这样在执行可执行文件的时候不需要输入全路径了
echo $PATH
文件与目录管理
目录相关的操作
# cd(change directory) 切换目录
cd /etc
# pwd(print working directory) 显示当前的工作路径
pwd -P // 显示文件的物理物理,即使是快捷键
# mkdir 创建新的文件夹
# -m 设置创建文件夹的权限,不需要看预设权限umask
mkdir -m 777 hello
# -p 创建多个文件夹
mkdir -p hello/world
# rmdir 删除空的文件夹
# -p 连同父文件夹如果是空的也删除
rmdir -p hello/world # 如果hello也是空文件夹,hello文件夹也会被删除
文件的相关操作
# ls list 显示文件夹下的文件详细内容
ls -a // 全部文档,连同隐藏文件
ls -A // 全部文档,连同隐藏文件(除了.和..)
ls -d // 仅列出目录本身,而不是列出目录内的文件
ls -f // 直接列出结果,而不进行排序(ls默认按照文件名排序)
ls -F // 根据文件、目录等信息,给予附加数据结构表示文件类型
ls -h // 将文件大小较易人类阅读的方式显示(KB,MB,GB)
ls -i // 列出inode号
ls -l // 长数据串行,包含文件的属性与权限等数据
ls -n // 列出uid和gid而非使用者与群组的名称
ls -r // 将排序结果反向输出
ls -R // 连同字目录内容一起列出,相当于该目录下的所有文件都会列出
ls -S // 以文件大小排序,而非文件名进行排序
ls -t // 以时间排序,而非文件名进行排序
ls --color=never // 不要按照文件的特性给于颜色显示
ls --color=always // 显示颜色
ls --color=auto // 让系统根据设定来判断是否显示颜色
ls --full-time // 以完整的时间格式输出
ls --time={atime,ctime} // 输出access时间或改变权限属性时间(ctime)而非内容变更时间(modification time) 已被-c和-u替换
# cp 复制 注意如果src有多个来源,则目标文件必须是个文件夹 cp -a src1 src2 des
cp -a src des // 相当于-pdr的意思
cp -d src des // 如果复制的src是链接文件的属性(link file), 则复制链接文件属性而非文件本身
cp -f src des // force,如果des目标文件已经存在且无法打开,则移除后在尝试一次cp
cp -i src des // 如果目标文件des已经存在时,在覆盖时会先询问动作的进行
cp -l src des // 进行硬连接(hard link)的连接文件建立,而非文件本身
cp -p src des // 连同文件的属性一起复制过去,而非默认属性(备份常用)
cp -r src des // 递归持续复制,用于目录的复制行为
cp -s src des // 复制成为符号链接文件(symbolic link),即快捷键
cp -u src des // 如果des比src旧,则更新des目标文件
# rm 删除
rm -f src // 强制删除,不管文件是否存在
rm -i src // 询问方式删除
rm -r src // 递归删除
# mv 移动目录或者更改文件名
mv -f src des // 如果目标文件存在,直接覆盖
mv -i src des // 如果目标文件存在,就会询问覆盖
mv -u src des // 如果目标文件已存在,且source文件新,才会更新(update)
# basename 查看文件名
# dirname 查看文件所在目录
文件查看
# cat 由第一行开始显示文件内容
# tac 从最后一行开始显示,可以看出tac是cat倒着写
# nl 显示的时候,顺道输出行号
# more 一页一页的显示文件内容
# less 和 more类似,但是比more更好的是,他可以往前翻页
# less 中常用的快捷方式
# # 空格键 向下翻页
# # pagedown 向下翻页
# # pageup 向上翻页
# # /字符串 向下搜索[字符串]功能
# # ?字符串 向上搜索[字符串]功能
# # n 重复前一个搜寻(与/或?有关)
# # N 反向的重复前一个搜寻(与/或?有关)
# # q 离开less程序
# head 只看头几行
# tail 只看尾几行
# od 以二进制的方式读取文件内容
补充说明
# Linux系统下有很多的时间参数,主要介绍下面三个参数:
# modification time(mtime):当文件的内容更改时会更新这个时间,内容指的是文件的内容,而不是文件的属性和权限
# status time(ctime):当文件的状态改变时会更新这个时间,如文件的权限和属性被更改的时候会更新这个时间
# access time(atime):当文件被访问的时候会更新这个时间
# 使用touch命令可以修改文件的上述时间
# touch -a file // 仅修改access time
# touch -c file // 仅修改文件的时间,如果文件不存在则不建立新文件
# touch -d file // 后面跟可以接欲修订的日期而不用目前的日期,也可以使用--date='日期或时间'
# touch -m file // 仅修订mtime
# touch -t file // 后面跟可以接欲修订的日期而不用目前的日期,格式为[YYMMDDhhmm]
文件隐藏属性
# chattr (change attribute)设置文件隐藏的属性
# + 增加一个特殊的参数,其他原本存在的参数不变
# - 移除一个特殊的参数,其他原本存在的参数不变
# = 设定一定,且仅有后面接的参数
chattr + A // 当设定A的属性,如果你存取此文件(或目录)时,他的访问时间atime将不会被修改,可以避免I/O较慢的机器过度的存取磁盘
chattr + S // 文件一般是异步的写入磁盘,当设置这个属性的时候,文件有任何的修改会同步的写入磁盘
chattr + a // 当设定a的属性,这个文件将只能增加数据,而不能删除或者修改数据,只有root用户才可以设定该属性
chattr + c // 这个属性读取时会自动解压,存储时会先压缩在写入磁盘
chattr + d // 设置这个属性的文件(或目录)在dump时,不会被备份
chattr + i // 可以让文件不能被删除/改名/设置连接点也无法写入/新增资料
chattr + s // 设置这个属性的文件如果被删除了,将会完全的移除硬盘,无法找回
chattr + u // 和s属性相反,如果文件被删除了,其实数据内容还在磁盘上,可以用来找回数据
# lsattr 显示文件的隐藏属性
lsattr -a file // 将隐藏文件的属性也显示出来
lsattr -d dir // 如果接的是目录,仅列出目录本身的属性而非目录内的文件名
lsattr -R dir // 连同子目录的数据也一并列出来
SUID SGID等相关权限需补充
磁盘与文件系统管理
分区和文件系统
一般磁盘分区完要进行格式化,这是因为不同的操作系统设定的文件属性/权限不同,为了存放这些文件需要的数据,因此需要将分割槽进行格式化,使得操作系统可以使用格式化后的文件系统.传统磁盘与文件系统之应用中,一个分割槽就只能被格式化成为一个文件系统,所以一般可以说一个文件系统就是一个分区.但是可以利用LVM与软件磁盘阵列,这些技术可以将一个分割槽格式化为多个文件系统.
Linux中的block块
superblock
# 记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等
# dumpe2fs dump ext2/ext3/ext4.. file system
dumpe2fs -h /dev/sda5 // 查看文件系统的信息
inode
记录文件的属性,一个文件占用一个inode,同时记录这文件的数据所在的block号码
block
实际记录文件的内容,如果文件太大时,会占用多个block块.