本节内容

  1)文件系统结构元素

  2)创建和查看文件

  3)复制、转移和删除文件

  4)软和硬链接

  5)三种I/O设备

  6)把I/O重定向至文件

  7)使用管道

                    文件系统和结构

文件系统

文件和目录被组织成一个单根倒置树的结构
文件系统从根目录开始,用"/"表示
根文件系统(rootfs):root filesystem
文件名称区分大小写
以.开头的文件为隐藏文件
路径分隔/
文件有两类数据:
元数据:metadata
数据:data
文件系统分层结构:LSB(Linux Standard Base)
文件分层标准FHS:(File Hierarchy Standard)
http://www.pathname.com/fhs/

文件名规则

文件名最长255个字节
包括路径在内文件名称最长4095个字节
蓝色-->目录
绿色-->可执行文件
红色-->压缩文件
浅蓝色-->链接文件
灰色-->其他文件(实际上文件颜色由配置文件/etc/DIR_COLORS来定义的)
除了斜杠和NUL,所有字符都有效。但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用它们。
标准Linux文件系统(centos6中的ext4,centos7中的xfs),文件名称

文件系统结构

Directory                   Decription
bin Essential command binaries
boot Static files of the boot loader
dev Devices files
etc Host-specific system configuration
lib Essential shared libraries and kernel modules
media Mount point for removeable media
mnt Mount point for mounting a filesystem temporarily
opt Add-on application software packages
sbin Essential system binaries
srv Data for services provided by this system
tmp Temporary files
usr Secondary hierarchy
var Variable data
/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)都存放于此目录。
/bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序。
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序。
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)。
/lib64:专用于x86_64系统上的辅助共享文件存放位置。
/etc:配置文件目录。
/home/USERNAME:普通用户的家目录。
/root:管理员的家目录。
/media:便携式移动设备挂载点。

Linux上的应用程序的组成部分

二进制程序:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin
库文件:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64
配置文件:/etc,/etc/DIRECTORY,/usr/local/etc
帮助文件:/usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/share/doc

Linux下的文件类型

-:普通文件
d:目录文件
b:块设备
c:字符设备
l:符号链接文件
p:管道文件pipe
s:套接字文件socket

Centos7(相比较于Centos6)目录变化

/bin和/usr/bin
/sbin和/usr/sbin
/lib和/usr/lib
/lib64和/usr/lib64

显示当前工作目录

每个shell和系统进程都有一个当前的工作目录
pwd:显示当前工作路径
-P:显示真实的物理路径
-L:显示链接路径(默认)

绝对路径和相对路径

绝对路径
以正斜杠开始
完整的文件的位置路径
可用于任何想指定一个文件名的时候
相对路径名
不以斜线开始
指定相对于当前工作目录或某目录的位置
可以作为一个简短的形式指定一个文件名
基名:basename
目录名:dirname 切换至父目录:cd ..
切换至当前用户主目录:cd
切换至以前的工作目录:cd -
相关环境变量
OLDPWD:上一次目录路径
PWD:当前目录路径

 列出目录内容

ls:列出当前目录的内容或指定目录
参数:
-a 包含隐藏文件
-R 目录递归显示

查看文件状态

stat
文件:metadata,data
三个时间戳:
access time:访问时间,atime,读取文件内容
modify time:修改时间,mtime,改变文件内容(数据)
change time:改变时间,ctime,元数据发生改变(即可理解为属性信息,比如权限)

文件通配符

*匹配零个或多个字符
?匹配任何单个字符
~当前用户目录
~mage 用户mage家目录
~+当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z]: 字母
[A-Z]: 字母
[wang]:匹配列表中的任何一个字符
[^wang]:匹配列表中所有字符以外的字符
预定义的字符类: man 7 glob
  [:digit:]:任意数字,相当于0-9
  [:lower:]:任意小写字母
  [:upper:]:任意大写字母
  [:alpha:]:任意大小写字母
  [:alnum:]:任意数字或字母
touch命令
创建空文件和刷新时间
-a 仅改变atime和ctime
-m 仅改变mtime和ctime
  -c 如果文件不存在,则不予创建
用touch创建文件时,如果原文件已经存在则是不会覆盖的。用>创建文件时则会覆盖
cp命令
用法格式:
cp [OPTION] ...[-T] SOURCE DEST
cp [OPTION] ... SOURCE ...DIRECTORY
cp [OPTION] ... -t DIRECTORY SOURCE...
cp SRC DEST
SRC是文件:
如果目标不存在:新建DEST,并将SRC中内容填充至DEST中
如果目标存在:
如果DEST是文件:将SRC中的内容覆盖至DEST中,基于安全,最好加上-i选项
如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中

  

mv 命令
移动和重命名文件
用法:
mv [OPTION] ...[-T] SOURCE DEST
mv [OPTION] ...SOURCE ...DIRECTORY
mv [OPTION] ...-t DIRECTORY SOURCE...
常用选项:
-i:交互式
-f:强制
rm 命令
用法: rm [OPTIONS] ...FILE...
常用选项:
-i:交互式
-f:强制删除
-r:递归
--no-preserve-root
目录操作
tree命令
显示目录树
参数:
-d:只显示目录
-L level:显示指定的层级数目
-P pattern:只显示由指定pattern匹配到的路径 mkdir命令 创建目录
-p:存在于不报错,且可自动创建所需的各目录
-v:显示详细信息
-m MODE:创建目录时直接指定权限
rmdir命令 删除空目录
-p:递归删除父空目录
-v:显示详细信息

索引节点

inode(index node)表中包含文件系统所有文件列表
一个节点(索引节点)是一个表项,包含有关文件的信息(元数据),包括:
文件类型、权限、UID、GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据

 Inode表结构

cp和inode
  在执行cp的命令时:分配一个空闲的inode号,在inode表中生成新条目,在目录中创建一个目录项,将名称与inode编号关联拷贝数据生成新的文件。
rm和inode
  在执行rm命令时:链接数递减,从而释放的inode号可以被重用;把数据块放空闲链表;删除目录项;数据实际上不会马上被删除,但当另一文件使用数据块时将被覆盖。
mv和inode
  如果mv命令的目标和源在相同的文件系统,作为mv命令:用新的文件名创建新的目录项,删除旧目录条目对应的旧的文件名,不影响inode表(除了时间戳)或磁盘上的数据位置:没有数据被移动。
  如果目标和源不在同一个文件系统,mv相当于cp和rm。
硬链接
  link命令(ln)
创建硬链接会增加额外的记录项以引用文件
对应于同一文件系统上一个物理文件
每个目录引用相同的inode号
创建时链接数递增
删除文件时:
rm命令递减计数的链接
文件要存在,至少有一个链接数
当链接数为0时,该文件被删除
不能跨越驱动器或分区 软链接ln -s
  
软链接和硬链接的区别:
  1.硬链接不能跨分区,而软链接可以
  2.硬链接的inode number是一样的,软链接各有各的编号
  3.创建硬链接会增长链接数,而软链接不会
  4.硬链接不支持文件夹,而软链接可以
  5.删除原始文件时,硬链接还是可以访问(相当于少了一个名称而已),而软链接则会提示找不到文件了。
软硬链接根本区别:硬链接本质是同一个文件,多个名字;软链接本质是多个不同文件。

确定文件内容

file命令
  可以检查文件的类型,然后确定适当的打开命令或应用程序使用
  file [options] <filaname> ...
  常用选项:-b 列出文件识别结果时,不显示文件名称
       -f filelist 列出文件filelist中文件名的文件类型
       -F 使用指定分隔符号替换输出文件名后默认的" :" 分隔符
       -L 查看对应软链接对应文件的文件类型
       --help 显示命令在线帮助

标准输入和标准输出

程序:指令+数据
读入数据:Input
输出数据:Output
打开的文件都有一个fd:file descriptor(文件描述符)
Linux给程序提供三种I/O设备
标准输入(STUIN)-0 默认接受来自键盘的输入
标准输出(STDOUT)-1 默认输出到终端窗口
标准错误(STDERR)-2 默认输出到终端窗口
I/O重定向:改变默认位置 命令查看对应的设备:ls /proc/$$/fd -l

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

STDOUT和STDERR可以被重定向到文件
格式:命令 操作符号 文件名
支持的操作符包括:
> 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> 把所有输出重定向到文件
> 文件内容会被覆盖
set -C 禁止将内容覆盖已有文件,但可追加
>| file 强制覆盖
set +C 允许覆盖
>> 原有内容基础上,追加内容
2> 覆盖重定向错误输出数据流
2>> 追加重定向错误输出数据流
标准输出和错误输出各自定向至不同位置
  如: COMMAND > /path/to/file.out /path/ti/error.out
合并标准输出和错误输出为同一个数据流进行重定向
  &> 覆盖重定向
  &>> 追加重定向
  COMMAND > /path/to/file.out 2>&1(顺序很重要)
  COMMAND >> /path/to/file.out 2>&1
():合并多个程序的STDOUT
  (cal 2018;cal 2019) > all.txt

tr命令

tr转换字符和删除字符
用法:tr [OPTION] ... SET1 [SET2]
选项:
-c -C --complement:取字符集的补集
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符

从文件中带入STDIN

使用<来重定向标准输入
某些命令能够接受从文件中导入的STDIN
tr 'a-z' 'A-Z' < /etc/issue
该命令会把/etc/issue中的所有小写字母都转换为大写字母
tr -d abc < /etc/fstab
该命令删除fstab文件中所有abc中字符
cat > file
mage
wangxiaochun
按Ctrl+d离开,可以使用文件来代替键盘的输入
  
  cat < filea > filea 起到类似清空的效果
  cat < filea > fileb 起到类似cp命令的效果

把多行发送给STDIN

使用"<<终止词"命令从键盘把多行重导向给STDIN
直到 终止词 位置的所有文本都发送给STDIN
示例:

      

小结:
> 1> >> file 重定向输出
2> 2>>file 重定向错误
< 0< file 输入重定向
<<keyword 多行重定向
xxx
keyword &> file 输出和错误一起重定向 cmd1 | cmd2
cmd1 2>&1 | cmd2

管道

管道(使用符号"|"表示)用来连接命令
命令1 | 命令2 | 命令3 | ...
将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送给命令3的STDIN
STDERR默认不能通过管道转发,可利用2>&1或|&实现
最后一个命令会在当前shell进程的子shell进程中执行
组合多种工具的功能
示例:ls | tr 'a-z' 'A-Z'
  less:一页一页得查看输入
    示例:ls -l /etc | less
  mail:通过电子邮件发送输入
    示例:echo "test email" | mail -s "test" user#example.com
  lpr:把输入发送给打印机
    示例:echo "test print" | lpr -P printer_name 管道中-符号
  将/home里面的文件打包,但打包的数据不是记录到文件,而是传送到stdout,经过管道后,将tar -cvf - /home传送给后面的tar -xvf -,后面的这个-则是取前一个命令的stdout,因此,就不需要使用临时的file了。  
  示例:tar -cvf - /home | tar -xvf -
重定向到多个目标(tee命令)
tee命令结合管道一起用:使得能够同 时输出到文件以及输出到屏幕
  示例:ls |tee file 把ls的STUOUT保存到file文件中
  参数:-a 追加
  使用:保存不同阶段的输出;复杂管道的故障排除;同时查看记录和输出。

 

Linux基础学习笔记2-文件管理和重定向的更多相关文章

  1. Linux基础学习笔记5-软件管理

    包管理器 二进制应用程序的组成部分: 二进制文件.库文件.配置文件.帮助文件 程序包管理器: debian:deb文件.dpkg包管理器 redhat:rpm文件.rpm包管理器 rpm:Redhat ...

  2. Linux基础学习笔记4-文本处理

    本章内容 抽取文本的工具 文件内容:less和cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep 文件查看 文件查看命令:cat,tac,rev cat [OPTION] ...

  3. linux基础学习笔记

    我用的是centOS7.0版本的系统.linux的shell终端窗口类似于wind的command窗口 shell命令提示符格式:用户名@主机名:目录名 提示符 @前面的是已登录的用户名,@之后的为计 ...

  4. Linux基础学习笔记以及常用命令

    1.windows自带命令进入mysql所在磁盘   2.进入mysql安装目录的bin文件 D:\>cd D:\Program Files (x86)\mysql-5.5.25-winx64\ ...

  5. Linux基础学习笔记6-SHELL编程

    编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 编程基本概念: 顺序执行:循环执行:选 ...

  6. Linux基础学习笔记3-用户权限

    本章内容 用户user 令牌token,identity Linux用户:Uername/UID 管理员:root,0 普通用户:1-65535 系统用户:1-499,1-999(Centos7) 对 ...

  7. Linux基础学习笔记1

    MBR分区 主分区: 1-4,一块硬盘最多四个主分区,对主机必须有,主区可以格式化ntfs,存数据: 扩展分区:1-4,一块硬盘最多一个扩展分区,可以没有扩展分区,划分更小的单元,即逻辑分区: 逻辑分 ...

  8. Linux学习笔记(二) 文件管理

    了解 Linux 系统基本的文件管理命令可以帮助我们更好的使用 Linux 系统,以下介绍几个常用的文件管理命令 1.pwd pwd 是 Print Working Directory 的简写,用于显 ...

  9. 深挖计算机基础:趣谈Linux操作系统学习笔记

    参考极客时间专栏<趣谈Linux操作系统>学习笔记 核心原理篇:内存管理 趣谈Linux操作系统学习笔记:第二十讲 趣谈Linux操作系统学习笔记:第二十一讲 趣谈Linux操作系统学习笔 ...

随机推荐

  1. leetcode第一刷_Merge Intervals

    看到这个题我就伤心啊,去微软面试的时候,第一个面试官让我做的题目就是实现集合的交操作,这个集合中的元素就像这里的interval一样.是一段一段的.当时写的那叫一个慘不忍睹.最后果然被拒掉了. .好好 ...

  2. jira8.0.2安装与破解

    环境: centos7.4 java1.8 jira版本:8.0.2 mysql :mariadb 软件下载: 破解包: atlassian-extras-3.2.jar 连接mysql驱动: mys ...

  3. 【vue】vue +element 搭建及开发中项目中,遇到的错误提示

    1. import Layout from '@/views/layout/Layout'; export default [ { // 配置路由,当路径为'/activePublic',使用组件ac ...

  4. 洛谷题解 P1138 【第k小整数】

    蒟蒻发题解了 说明:此题我用的方法为桶排(我翻了翻有人用了桶排只不过很难看出来,可能有些重复的,这个题只是作为一个专门的桶排来讲解吧) (不会算抄袭吧 ‘QWaWQ’) 简单来说(会的人跳过就行): ...

  5. 20175310 《Java程序设计》第6周学习总结

    20175310 <Java程序设计>第6周学习总结 本周博客: <20175310 类定义 - 20175310xcy - 博客园 >https://www.cnblogs. ...

  6. netty简单样例

    package com.example.demohystrix.process; import io.netty.bootstrap.ServerBootstrap; import io.netty. ...

  7. Z370主板的黑苹果usb3.0驱动安装

    注意每个版本的usb端口代码是不一样的!一般是10.10到10.12 是一个版本,10.13 是一个版本 配合USBInjectAll.kext这个驱动就能顺利驱动你的usb3.0  .如果你是比较新 ...

  8. Item 26: 避免对universal引用进行重载

    本文翻译自<effective modern C++>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 如果你需要写一个以名字作为参数,并记录下当前日期和 ...

  9. WIFI智能配网 - SmartConfig

    要开始IoT项目的第一步是什么?当然不是硬件,而是硬件与硬件的连接!即使有各种各样的通信协议没有好的连接方式绝对不行.那外设上没有的屏幕,没有键盘怎末输入密码怎末选择网络?对,这就是WIFI模块最重要 ...

  10. Omi 拥抱 60FPS 的 Web 动画

    写在前面 Omi 框架 正式发布了 → omi-transform. Made css3 transform super easy. Made 60 FPS easy. 作为 Omi 组件化开发特效运 ...