linux day 4


文件管理

文件系统


文件有两类数据

元数据:metadata (装备属性)文件大小 文件名 如人的身高

数据:data


linux 文件名 

蓝色》目录

绿色》可执行文件

红色》压缩文件

浅蓝色》链接文件

灰色》其他文件


文件系统结构回忆

/

/boot:引导文件存放目录,内核文件,引导加载器

/bin:供所有用户使用的基本命令

/sbin:管理类基本命令

/lib:启动时程序以来的基本共享文件及内核模块文件

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

/etc:配置文件目录

/home:普通用户家目录

/root:管理员家目录

/media:便携式移动设备挂载点

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

/dev:设备文件及特殊文件存储位置

/opt:第三方应用城区的安装位置

/srv:系统上运行的服务用到数据

/tmp:临时文件存储位置

/usr:操作系统软件资源存放位置

/var:经常变化的文件的存放位置

/proc:用于输出内核与进程信息相关的虚拟文件系统

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

/selinux:selinux相关的安全策略嘻嘻的存储位置


linux 下的文件类型


-:普通文件

d:目录文件

b:块设备

c:字符设备

l:符号链接文件

p:管道文件pipe

s:套接字文件socket



cd 命令

到上一级目录

cd ..

回到你的主目录

cd

到之前的工作目录

cd -

pwd:查看当前目录路径

OLDPWD:上次所在的目录路径


pwd -p 显示 物理路径


ls 命令

ls -a 包含隐藏文件

ls -l 显示额外的信息

ls -R 目录递归通过

ls -ld 目录和符号链接信息

ls -1 文件分行显示

ls -S 按从大到小排序

ls -u 配合-t选项,显示并按atime新新到旧排序

ls- U 不排序按目录存放顺序显示


文件通配符


* 匹配零个或多个字符

? 匹配任何单个字符

~ 当前用户家目录

~username 用户家目录

~+ 当前工作目录

~- 前一个工作目录

[0-9] 匹配一个数字范围

[a-z][A-Z]


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

[^xhb] 匹配列表中的所有字符以外的字符


[] 内包含的其他通配符


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

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

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

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

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

[:space:] : 空格

[:punct:] : 标点符号




练习 

1.显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录


[root@CentOS7 ~]# ls -d /var/l*[[:digit:]]*[[:lower:]]

/var/l33a

2.显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录


ls -d /etc/[[:gidit:]][^[:gidit:]]



3.显示/etc目录下以非字母开头,后面跟了一个字母及其他任意长度任意字符的文件或目录


ls -d /etc/[^[:alpha:]][[:alpha:]]*


4.显示/etc目录下所有以m开头以非数字结尾的文件或目录 


ls /etc/m*[^[:gidit:]]


5.显示/etc目录下,所有以.d结尾的文件或目录


ls -d /etc/*.d


6.显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录


ls -d /etc/[mnrf]*.conf



查看文件状态


stat

[root@CentOS7 ~]# stat /root

 File: ‘/root’

 Size: 4096      Blocks: 8          IO Block: 4096   directory

Device: 802h/2050dInode: 201326721   Links: 16

Access: (0550/dr-xr-x---)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2016-07-27 20:30:45.639436485 +0800

Modify: 2016-07-27 20:30:44.101129780 +0800

Change: 2016-07-27 20:30:44.101129780 +0800

Birth: -


三个时间戳

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

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

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


元数据:metadata (装备属性)文件大小 文件名 如人的身高

数据:data



创建空文件和刷新时间


touch 命令

touch [OPTION] FILE

   -a 仅改变 atime

   -m 仅改变 mtime

   -t 200808080808.08  改变amtime 时间戳

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


复制 cp 命令



一个文件复制 如果 目标文件存在 则 覆盖目标

如果 不存在 则 新建填充

如果 目标为目录 则 在其下新建与源文件同名的文件并填充


多个文件复制 如果 目标文件不存在 则 报错

如果 目标存在且是文件 则 报错

如果 目标存在且是目录 则 在目标下建立与源文件相同名字的文件并内容复制进新文件


复制目录    如果 目标不存在 则 建立目标并把源文件下文件复制到目标

 如果 目标存在且是文件 则 报错

 如果 目标存在且是目录 则 在目标下建立与源文件同名的目录并复制目录内内容

cp 常用选项

-i 交互式 (询问yes or no)

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

-a 归档(复制文件的元数据等不更改)

-d 不复制源文件,只复制链接名  此处如果单纯复制链接文件,会复制链接文件指向的源文件,如只想复制链接文件就要加 -d 选项

-p 保持源文件的属性信息

-f 强制覆盖

-v 显示过程



练习

1,使用别名命令,每日将/etc目录下所有文件,备份到/testdir/下独立日的新目录下,并要求新目录格式为backupYYYY-mm-dd,备份过程可见


alias cpetc='cp -vrp /etc/ /testdir/date`date+%F`

alias cpetc='cp -vrp /etc/ /testdir/date&(date+%F)


2,先创建/testdir/rootdir目录,在复制/root所有下文件到该目录内,并要求保留原有权限


cp -rp /root/ /testdir/rootdir



命令别名 alias


alias NAME='VALUE'


在命令行中定义的别名,仅当前shell进程有效

如果想永久有效,要定义在配置文件中

仅对当前用户;~/.bashrc

对所有用户有效: /etc/bashrc 


编辑配置给出的心配置不会立即生效!!!


需 bash 进程重新读取配置文件:

source /path/to/config_file

或  

. /path/to/config_file


撤销别名

unalias

unalias name



如果别名同原命令同名,如果要执行原命令,可使用


\COMMAND

'COMMAND'

/PATH/COMMAND



移动和重命名文件


mv 

-i 交互式(询问)

-f 强制

删除

rm 

-i

-f

-r 递归(目录)


--no-preserve-root 删除 / 需要的参数 


目录操作

tree 显示目录树


-d 只显示目录

-L 指定显示目录层级数目


 如[root@CentOS7 ~]# tree -L 1 /root

/root

├── Desktop

├── Documents

├── Downloads

├── Music

├── myfirst.sh

├── Pictures

├── Public

├── Templates

├── Videos

└── xx.x

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



mkdir 创建目录

  -p 创建目录树

  -v 显示创建详情过程信息

  -m 指定权限

rmdir 删除空目录

-p 递归删除父 空目录

-v 显示过程

rm -r 递归删除目录树



练习


1,如何创建/testdir/dir1/x,/testdir/dir1/y,/testdir/dir1/x/a,/testdir/dir1/x/b,/testdir/dir1/y/a,/testdir/dir1/y/b


mkdir -p /dir1/{x,y}/{a,b}

[root@CentOS7 ~]# tree dir1/

dir1/

├── x

│   ├── a

│   └── b

└── y

   ├── a

   └── b



2, 如何创建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b


mkdir -p /testdir/dir2/{x/{a,b},y}

mkdir -p /testdir/dir2/{x,y/{a,b}}

[root@CentOS7 ~]# tree dir2

dir2

├── x

└── y

   ├── a

   └── b



3, 如何创建/testdir/dir3,/testdir/dir4,/testdir/dir5,/testdir/dir5/dir3,/testdir/dir5/dir4


mkdir -p /testdir/dir{3,4,5/dir{3,4}}

[root@CentOS7 ~]# tree ttt

ttt

├── dir3

├── dir4

└── dir5

   ├── dir3

   └── dir4