跳转至

文件系统

查看当前目录所有文件(-a 包含隐藏文件):ls -al

20210821163302

类型字段

  • d 目录
  • - 文件:纯文本文件(ASCII,源代码)、二进制文件(binary,图片视频等)、数据文件(data)
  • l 链接:类似Windows的快捷方式
  • b 设备与设备文件(通常集中存放在/dev/...,比如硬盘与软盘等区块文件(/dev/sda)
  • c 鼠标键盘等串行端口设备
  • p 数据传送文件,FIFO(先进先出),即管道(pipe)
  • s 数据接口文件,sockets

权限字段

  • 身份:ownergroupothers
  • 权限:r(read 4)、w(write 2)、x(execute 1)、-(不可读/写/执行)

root用户不受权限限制,无论什么权限都可读写

在Windows中文件是否可执行由后缀决定,在Linux中则由权限x决定,不过拥有可执行权限不代表真的可以执行,还是得看文件内容是否为可执行代码才行

虽然扩展名没什么用,但通常用来区分不同用途,比如*.sh*.tar*.html

如果想rwx某个目录内的文件,则必须要拥有目录的x权限才行。

比如要删除目录内某文件,首先要有目录的x权限进入目录,然后要有目录的w权限删除文件(不管文件本身什么权限,文件的w权限只是可编辑写入文件的权限,并不能删除文件)

新建目录默认都会有可执行权限,管理员创建的为755,普通用户创建的为775
新建文件默认都没有可执行权限,管理员创建的为644,普通用户创建的为664

修改权限:

  1. chmod 755 filename 7=4+2+1 表示r+w+x权限全开
  2. chmod u=rwx,go=rx filename ugo分别表示user group other
  3. chmod a+x filename a表示给所有人加上(去掉用-)执行权限

修改文件拥有者:

  • chown root:root filename 将文件拥有者和用户组改回root
  • chgrp [-R] user dirname 将目录(-R 递归子目录)的用户组改为user

其它字段

  • 文件名
  • 有多少文件名链接到此节点
  • 拥有者
  • 所属用户组
  • 文件容量大小(Bytes)
  • 创建/最近修改日期

    atime Access访问时间
    ctime Modify更改时间,只有文件内容更改才会变
    mtime Change改动时间,只要文件改动就会变,比如权限大小等
    btime Birth创建时间

目录

目录主要记录文件名列表,类似于抽屉,不同的目录依据FHS标准有不同的用途

20210821215536

目录树

4d8207054d6d55daab264f050e11515

  • /usr Unix Software Resource 主要存放系统软件资源文件,而不是用户的数据
  • /usr/local 类似Windows的C:/Progrem Files/,存放一些自编译的软件
  • /opt 类似Windows的D:/Software,存放一些第三方软件
  • /etc 存放配置文件,比如/etc/profile
  • /etc/opt 存放第三方软件的配置
  • /var 存放一些缓存日志等文件

简写:

  • . 当前目录
  • .. 上层目录,根目录/的上层目录即当前目录
  • ~ 家目录,~chonge chonge的家目录,系统管理员的家目录是/root
  • - 前一个目录

配置文件

配置文件是在用户登录(su - username)时加载的

e4da92fd9a72e844053abca2d931f2d

图中实线为主流程,即加载顺序为:/etc/profile => ~/.bash_profile,虚线为被调用的配置文件

操作

# 创建目录 make directory
# -p 递归创建多层,-m 设置权限
mkdir [-p ][-m 711] dirname/subdir

# 删除目录 remove directory
# -p 递归删除,只能删除空目录,删除非空文件夹还得用rm
rmdir [-p] [-r] dirname

# 切换目录 change directory
# 不带选项则默认回到家目录
cd [dirname]

# 显示工作目录(绝对路径) print working directory
# -P 显示link文件的真实目录
pwd [-P]

# 查看当前目录有哪些文件(目录显示为蓝色,文件为白色)
# -a可查看隐藏文件,-l可查看文件权限等详情,-R可查看子目录
ls [-al]

basename /etc/path/file  # 返回文件名:file
dirname /etc/path/file  # 返回目录名:/etc/path

文件有三个时间:

  • 修改时间 mtime
  • 状态时间 ctime
  • 读取时间 atime
# 创建空文件(还可以用来改mtime)
touch filename

# 复制文件 copy
# -a 会把文件的权限以及子目录等全都copy,-i 如果与目标文件重复询问是否覆盖
cp -ai 源文件 目标文件

# 移动文件(可重命名文件)move
mv 源文件 目标文件

# 删除文件 remove
# -r 递归删除,否则删除非空目录会报错,-f忽略询问强行删除
rm -rf
  • 显示文件内容
cat [-n] filename  # concatenate 串联 从第一行开始,-n显示行号
tac filename  # cat的反写,从最后一行开始

head [-3] filename  # 头,显示前3行,默认显示前10行
tail [-3] filename  # 尾,显示后3行,默认显示后10行
tail -f filename  # 持续显示文件内新增内容,直到Ctrl c退出

# 如果只想取一个文件的第7~10行,并且显示行号
# 可以先用显示行号,然后取出前10行,最后再取出后(10-6)行
cat -n filename | head -10 | tail -4

文件描述符,通常用1~9的数字表示一个文件

  • 0 标准输入stdin,输入自键盘
  • 1 标准输出stdout,输出到屏幕
  • 2 标准错误输出stderr

输入/输出重定向

# stdout重定向,是1>的简写
cmd > file  # 将命令的输出从屏幕重定向到file文件,file若非空,则默认覆盖
cmd >> file  # file若非空,则追加写入

# stderr重定向
cmd 2> file
cmd 2> /dev/nul  # 将错误信息丢弃

# stdout与stderr全都重定向
cmd &> file  # 最简写法
cmd > file 2>&1  # 另一种写法
cmd 2>&1 > file  # 错误写法,如果先把2指向1,即屏幕,再指向file,只是1指向了file,2其实没变,还是指向屏幕
cmd > file 2> file  # 错误写法,这样虽然可以都保存但会交叉的混在一起

用cat创建文件

cat  # 执行cat什么都不加则会让在命令行输入内容,ctrl+d退出
cat > file  # 回车后在命令行输入内容,退出则内容自动保存到file中

# 输入重定向,是0<的简写
# 原本由键盘输入的数据,改由文件内容来代替
cat > file1 < file2  # 从file2读取内容写入到file1中,类似于复制

# 设置输入结束符
cat > file << "eof"

查找文件

which [-a] command  # 在PATH路径中查找脚本文件,-a找出所有

whereis filename  # 在/bin等特定目录查找文件
locate filename  # 利用/etc/lib/mlocate数据库记录模糊查询文件

find path -mtime -4   # 找出4天内被修改过的文件,find很慢,因为是硬盘查找
find / -user username  # 查出所有属于username这个用户的文件

最后更新: 2022-06-14