Linux入门基础认知2

文件系统:按名存取文件

  • 文件和目录被组织成一个单根倒置树结构

    • 目录:目录并非文件夹,而是路径映射

  • 文件系统从根目录开始,用“/”表示;根文件系统(rootfs):root filesystem

  • . 开头的文件为隐藏文件

  • 文件的数据分两种:

    • 元数据(metadata):描述数据属性的数据:文件名,大小,属性,日期...例如: 人的身高体重

    • 数据(data):文件内实实在在的数据

文件系统分层结构:LSB Linux Standard Base

FHS:Filesystem Hierarchy Standard

(例:磁盘被分为A,B两个分区,一旦A被定义为根分区,B分区想要被访问到,必须与根分区上已存在的某个目录建立联系,当作B分区的入口,才可以进行访问)

文件名规则

  • 文件名最多255个字节

  • 包括路劲在内,文件名最长4095个字节。2^10*4=4k

  • (ANSI Color文件名颜色标准)蓝色-->目录,绿色-->可执行文件,红色-->压缩文件,浅蓝色-->链接文件,紫色--> 套接字(socket)文件,灰色-->其他文件

  • 标准Linux文件系统(主流文件系统如ext4,xfs),文件名称大小写敏感

文件系统结构

  • /boot:引导文件存放目录,内核文件(vmlinuz),引导加载器(bootloader,grub),initramfs都存放于此目录

  • /bin:存放供所有用户使用的基本命令;OS启动即使用的程序,不能关联至独立分区

  • /sbin:存放管理类的基本命令;OS启动即使用的程序,不能关联至独立分区

  • /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)

  • /lib64:专用于x86_64系统上的辅助共享库文件存放位置

  • /etc:配置文件目录(Linux哲学,用文本文件存储配置文件)

  • /home/USERNAME:普通用户家目录

  • /root:管理员的家目录

  • /media:便携式移动设备挂载点(例如,U盘使用时关联到media上进行访问)

  • /mnt:临时文件系统挂载点

  • /dev:devices的简写,所有设备文件及特殊文件存储位置

  • b:block device(块设备)随机访问,例如磁盘

  • c:character device(字符设备)线性访问,例如键盘

  • /opt:optional(可选的)第三方应用程序安装目录

  • /srv:services简写,系统上运行的服务用到的数据

  • /tmp:temporary简写,临时文件位置(超过30天不使用的文件系统会自动删除)

  • /usr:universal shared,read-only data 全局共享只读数据

bin: 保证系统拥有完整功能而提供的应用程序

sbin:

lib:32位使用 

lib64:只存在64位系统

include: C程序的头文件(header files)

share:结构化独立的数据,例如doc, man等

local:第三方应用程序的安装位置,3rd party:bin, sbin, lib, lib64, etc, share

  • /var:variable data files(可变的数据存放)

cache:应用程序缓存数据目录

lib:应用程序状态信息数据(是data,不是库文件)

local:专用于为/usr/local下的应用程序存储可变数据;

lock: 锁文件

log: 日志目录及文件

opt: 专用于为/opt下的应用程序存储可变数据;

run: 运行中的进程相关数据,通常用于存储进程pid文件

spool: 应用程序数据池

tmp: 保存系统两次重启之间产生的临时数据

  • /proc:用于输出内核与进程i西给相关的虚拟文件系统

  • /sys:用于输出当前系统上硬件设备相关信息虚拟文件系统

  • /selinux:security enhanced Linux,selinux相关的安全策略等信息的存储位置

绝大部分情况下,/selinux是关闭状态,其太过严格

Linux上所有应用程序4类主要组成文件

  • 二进制程序(应用程序):/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin

  • 库文件:/lib,/lib64 ...

  • 配置文件:/etc,/etc/DIRECTORY,...

  • 帮助文件:/usr/share/man,/usr/share/doc...

Linux下的文件类型(元数据上的区分)

  • - :普通文件 file

  • d:目录文件 directory

  • l:符号链接文件 symbolic link

  • b:块设备 block device(随机访问的设备文件)

  • c:字符设备 character device(线性访问对应的设备文件)

  • p:管道文件 pipe,FIFO(First In,First Out)。/先进后出叫栈/

  • s:套接字文件 socket

显示当前工作目录pwd

  • 每个shell和系统进程都有一个当前的工作目录

  • pwd:printing working directory 显示当前的工作目录

绝对路径和相对路径

  • 绝对路径:

  • / 开始

  • 完整的文件的位置路径

  • 可用于任何想指定一个文件名的时候

  • 相对路径:

  • 不以 / 开始

  • 指定相对于当前工作目录或某目录的位置

  • 可以作为一个简短的形式指定一个文件名, 如 ./

基名:basename,一个文件路径最右侧文件名,

目录名:dirname,除basename以外的全部叫目录名

更改目录

cd 改变目录;(change directory)

使用绝对路经或者相对路径

切换至父目录:               cd ..

切换至当前用户主目录: cd

切换至上一个工作目录: cd -

命令ls

用法: ls [options] [files_or_dirs]

示例:

ls -a: 列出包含隐藏文件

ls -l :显示额外的信息(metadate元数据) 、

ls -R: 递归显示所有文件,包括子目录下的子文件和子目录...(一般使用tree)

ls -ld: -d 表示显示路径自身,通常与 -l 一起使用

例: ls -a ,ls -l

QQ5.png

共10位,第一个字母代表文件类型,rwx 3个*3组表示,属主/属组/其他用户 的使用权限

表示文件硬链接次数

表示属主和属组是谁

表示文件size,特殊文件显示为2位

表示修改时间戳(modify time/mtime)和文件名

例:ls -ld

查看文件状态

stat

文件:metadata, data

三个时间戳:

     access time:访问时间,atime,读取文件内容

     modify time: 修改时间, mtime,改变文件内容(数据)

     change time: 改变时间, ctime,元数据发生改变

(数据改了元数据一定改变,元数据变了数据未必会变)

文件名通配符,glob,globing,wildcard

  • * 匹配零个或多个字符

  • ? 匹配任何单个字符

  • [0-9]  匹配数字范围

  • [a-z]:字母(不区分大小写)

  • [A-Z]:字母(不区分大小写)

  • [abcd]  匹配列表中的任何的一个字符

  • [^abcd] 匹配列表中的所有字符以外的字符(去反)

预定义的字符类:man 7 glob

  •   [:digit:]:任意数字,相当于0-9

  •   [:lower:]:任意小写字母

  •   [:upper:]: 任意大写字母

  •   [:alpha:]: 任意大小写字母

  •   [:alnum:]:任意数字或字母

  •   [:blank:]:水平空白字符

  •   [:space:]:水平或垂直空白字符

  •   [:punct:]:标点符号

  •   [:print:]:可打印字符

  •   [:cntrl:]:控制(非打印)字符

  •   [:graph:]:图形字符

  •   [:xdigit:]:十六进制字符

创建文件和刷新时间

touch命令:同时改3个时间戳;如果文件不存在,则创建一个空文件

  touch [OPTION]... FILE...

  •   -a   仅改变 atime和ctime  至当前时间

  •   -m  仅改变 mtime和ctime 至当前时间

  •   -t  指定atime和mtime的时间戳 [[CC]YY]MMDDhhmm[.ss]

  •   -c  如果文件不存在,则不予创建

复制cp [OPTION] 源 目标

QQ4.png

  • -i:覆盖前提示  –n:不覆盖,注意两者顺序

  • -r, -R: 递归复制目录及内部的所有内容

  • -a: 归档,相当于-dR --preserv=all

  • -d:--no-dereference --preserv=links 不复制原文件,只复制链接名

  • --preserv[=ATTR_LIST]

  mode: 权限

  ownership: 属主属组

  timestamp:

  links

  xattr

  context

  all

  • -p: 等同--preserv=mode,ownership,timestamp

  • -v: --verbose,详细信息

  • -f: --force

  • -u:--update 只复制源比目标更新文件或目标不存在的文件

  • --backup=numbered 目标存在,覆盖前先备份加数字后缀

移动和重命名文件

    mv命令常用option(选项):

  -i: 交互式

  -f: 强制

-t:源在后,目标位置在前

删除

rm [OPTION]... FILE...(只删除文件)

常用选项:

  -i: 交互式

  -f: 强制删除

  -r: 递归(想删除文件夹时使用)

         --no-preserve-root 

示例:

  rm -rf    / (删除根文件,即删除全部数据)

目录操作

tree 显示目录树

-d:只显示目录

-L level:指定显示层级数

-P pattern:只显示由指定pattern匹配到的路径

mkdir 创建目录

-p:存在于不报错,且可自动创建所需的各目录(创建已买单传的空目录

-v:显示详细信息

-m MODE:创建目录是直接指定权限

rmdir 删除空目录(很少用)

-p:递归删除空父目录(删除一脉单传的空目录)

-v:显示详细信息

rm-r 递归删除目录树(删除非空目录时使用)

PS:生产环境下在不100%明确自己在做什么的时候不要删除任何目录(可以手动建立以回收站,使用mv指令移动到回收站中)

索引节点inode(index node)

  • inode(index node索引节点)表中包含文件系统所有文件列表

  • 一个节点 (索引节点)是在一个表项,包含有关文件的信息( 元数据 ),包括:

  文件类型,权限,UID,GID

  链接数(指向这个文件名路径名称个数)

  该文件的大小和不同的时间戳

  指向磁盘上文件的数据块指针

  有关文件的其他数据

ls -i 显示inode号

目录

  • 文件引用是一个inode号(跨文件系统/分区,inode号不能共享)

  • 人是通过文件名来引用一个文件

  • 一个目录是目录下的文件名和文件inode号之间的映射

cp和inode

  1. 分配一个空闲的inode号,在inode表中生成新条目

  2. 在目录中创建一个目录项,将名称与inode编号关联

  3. 拷贝数据生成新的文件

rm和inode

  1. 链接数递减,从而释放inode号可以被重新使用

  2. 把数据块放在空闲列表中

  3. 删除目录项

rm的数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

mv和inode

如果mv命令的目标和源在相同的文件系统,

  1. 用新的文件名创建对应的目录项

  2. 删除旧的目录条目对的旧的文件名

不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动

如果目标和源在一个不同的文件系统,mv相当于cp和rm 2步

硬链接和软链接(符号链接)

硬链接 :不同的文件路径指向同一个inode

ln filename [linkname]

  • 创建硬链接会增加额外的记录项来引用文件(增加inode的引用计数)

  • 硬链接对应于同一文件系统同一个物理文件

  • 目录不支持硬链接

  • 创建硬链接时链接数增加

  • 删除文件时:

  • rm命令减少硬链接的次数

  • 文件要存在,至少有一个链接数

  • 当链接数为0时,该文件被删除

  • 硬链接不能跨越驱动器或分区

符号链接/软链接 :

ln -s filename [linkename]

(原始路径,链接路径)链接路径不指向inode,而是指向原始路径

一个符号链接指向另一个文件的路径

ls -Id 显示链接的名称和引用的文件

软链接可以对目录进行

可以跨越分区

指向另一个文件的路径;其大小为指向的了路径字符串的长度,不增加或减少目标文件inode引用计数

标准输入和输出

程序 :指令 + 数据

读入数据:Input

输出数据:Output

打开的文件都又一个文件描述符(fd:file descriptor)

linux个程序提供3种I/O设备

input,缺省。标准输入:(STDIN) - 0 默认接受来自键盘的输入

/dev/stdin,keyboard

output,缺省。标准输出:(STDOUT)- 1 默认输出到终端窗口

/dev/stdout,terminal monitor

error,缺省。 标准错误:(STDERR)- 2 默认输出到终端

/dev/stdout,

I/O重定向:改变默认位置

把输出和错误重新向到文件

STDOUT和STDERR可以被重定向到文件

命令 操作符号 文件名

  支持的操作符号包括:

    1. >  >> 把STDOUT重定向到文件

    2. 2> 2>> 把STDERR重定向到文件

    3. &> &>>  (COMMAND > /path/to/file.out 2>&1 , COMMAND >> /path/to/file.out 2>&1)把所有输出重定向到文件

> 覆盖文件,>>不覆盖文件,后面追加

标准输出和错误输出各自定向至不同位置:COMMAND > /path/to/file.out 2> /path/to/error.out

合并多个程序的STDOUT:(cal 2007;cal 2008)> all.txt

文件可以包含多种类型的数据

检查文件的类型,然后确定适当的打开命令或应用程序使用

file [options] <filename>...

管道(使用符号“|”表示)用来连接命令

  命令1 | 命令2 | 命令3 | …

将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN

STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现

最后一个命令会在当前shell进程的子shell进程中执行用来

组合多种工具的功能

  ls  | tr 'a-z' 'A-Z'


猜你喜欢

转载自blog.51cto.com/13886191/2151890
今日推荐