Linux 文件 & 目录
2019-06-20 17:40:34 0 举报
AI智能生成
Linux 学习笔记之三(文件目录操作)
作者其他创作
大纲/内容
文件目录属性
查看文件属性
ls -l命令
文件目录属性结构
文件属性
文件目录inode号码(文件系统详解)
第一栏代表这个文件的类型与权限
第一个字符代表这个文件的类型
当为[ d ]则是目录
当为[ - ]则是文件
若是[ l ]则表示为软链接文件(link file)(文件系统详解)
若是[ b ]则表示为设备文件里面的可供储存的周边设备
若是[ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备)。
接下来的字符中,以三个为一组分别表示操作系统三个角色“拥有者”,“分组”,"其他人“ 对应的权限
其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。
其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。
第二栏表示有多少文件名链接到此节点(i-node)
记录有多少不同的文件或目录连结到相同的一个i-node,i-node相当于索引,可以指向当前文件或目录存储数据的位置 (文件系统详解)
第三栏表示这个文件(或目录)的“拥有者帐号”
第四栏表示这个文件(或目录)的所属群组
第五栏为这个文件(或目录)的容量大小,默认单位为Bytes
第六栏为这个文件的创建日期或者是最近的修改日期
如果这个文件被修改的时间距离现在太久了,那么时间部分会仅显示年份而已。
修改文件属性
touch 改变文件时间
Linux文件时间属性
分类
atime(access time)
最近一次文件的内容被读取而更新的时间
mtime(modification time)
最近一次文件的内容发生改变而更新的时间
ctime(change time)
最近一次文件的状态发生改变而更新的时间(文件的属性,权限变更都属于状态的变更)
查看
使用ls指令查看
ls -lc
获取文件最后一次状态的改变时间(access time(atime))
ls -l
获取文件最后一次内容修改的时间(modification time(mtime))
在默认的情况下,ls 显示出来的是该文件的 mtime
ls -lu
获取文件最后一次访问的时间(change time(ctime))
使用stat指令查看
stat fileName
案例
同步更新文件所有时间,并创建一个空文件
touch filename
同步更新文件所有时间(文件不存在不创建)
touch -c filename
同步更新文件的atime和ctime
touch -a filename
同步更新文件的mtime和ctime
touch -m filename
指定时间更新atime和mtime
touch -t time filename
touch -d time filename
指定文件同步更新atime和mtime,并同步更新ctime
touch -r filename1 filename2
chgrp :改变文件所属群组
用法
chgrp [-R] dirname/filename ...
选项与参数
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件、目录
都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况
都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况
案例
修改用户所属群组
注意
设置群组必须存在
chown :改变文件拥有者
用法
chown [-R] 帐号名称 文件或目录
chown [-R] 帐号名称:群组名称 文件或目录
chown 可以同时改变文件所属的群组和文件拥有者
选项参数
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都变更
案例
将 initial-setup-ks.cfg 的拥有者改为bin这个帐号
将 initial-setup-ks.cfg 的拥有者与群组改回为root
注意
设置用户必须存在
chmod :改变文件的权限
数字类型改变文件权限
用法
chmod [-R] xyz 文件或目录
x 表示文件拥有者的权限
y 表示文件所属组的权限
z 表示其他人的权限
读取权限=4,写入权限=2,执行权限=1,权限x,y,z等于其数字相加
案例
将.bashrc这个文件所有的权限都设置启用
符号类型改变文件权限
用法
| chmod | u g o a | +(加入) -(除去) =(设置) | r w x | 文件或目录 |
u 表示文件拥有者的权限
g 表示文件所属组的权限
o 表示其他人的权限
a 表示所有的权限
案例
用户拥有者添加rwx,分组和其他人设置为rx
隐藏属性
隐藏属性列表
注意
chattr指令只能在Ext2/Ext3/Ext4的 Linux 传统文件系统上面完整生效,CentOS7 默认文件系统不再是ex4 而是xfs
操作
设置隐藏属性
chattr
用法
chattr [+-=][ASacdistu] 文件或目录名称
选项与参数
操作
+ :增加某一个特殊参数,其他原本存在参数则不动。
- :移除某一个特殊参数,其他原本存在参数则不动。
= :设置一定,且仅有后面接的参数
案例
请尝试到/tmp下面创建文件,并加入 i 的参数,无法删除
请将该文件的 i 属性取消!
显示文件隐藏属性
lsattr
用法
lsattr [-adR] 文件或目录
选项与参数
-a :将隐藏文件的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R :连同子目录的数据也一并列出来!
案例
特殊权限属性
SUID
SUID权限状态
-rwsr-xr-x
多了一个s放在文件拥有执行权限x上
SUID含义
这里s表示文件拥有者拥有文件的x权限,同时执行者将具有该程序拥有者 (owner) 的权限。-rwsr-xr-x状态下非文件的拥有者在执行此文件拥有此文件rwx
SUID限制与功能
SUID 权限仅对二进制程序(binary program)有效
执行者对于该程序需要具有 x 的可执行权限;
本权限仅在执行该程序的过程中有效 (run-time);
执行者将具有该程序拥有者 (owner) 的权限。
例子
我们知道用户的密码保存在/etc/shadow文件,而修改密码的程序指令为passwd
passwd 权限为-rwsr-xr-x,拥有者为root,/etc/shadow权限为----------
就好像A借给了它拥有游戏的权限给我r-x,我可以玩游戏但是却没有给我保存游戏存储文件的权限,导致我无法存储。
就好像A借给了它拥有游戏的权限给我r-x,我可以玩游戏但是却没有给我保存游戏存储文件的权限,导致我无法存储。
当给passwd程序赋值SUID权限后,我就可以拥有root权限去执行,当然也就能修改/etc/shadow
SUID 不能用于shell 脚本
SGID
SGID权限格式
-rwxr-s--x
SGID含义
这里s表示文件分组拥有x权限,同时执行者将具有该程序分组 的权限。-rwxr-s--x状态下非文件的拥有者在执行此文件拥有此文件r-x
SGID限制与功能
SGID 可以针对文件或目录来设置
作用于文件
程序执行者对于该程序来说,需具备 x 的权限;
执行者在执行的过程中将会获得该程序群组的支持
作用目录
使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
使用者在此目录下的有效群组(effective group)将会变成该目录的群组
用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文
件,该新文件的群组与此目录的群组相同。
件,该新文件的群组与此目录的群组相同。
例子
/usr/bin/locate 这个程序可以去搜寻 /var/lib/mlocate/mlocate.db 这个文件的内容
locate的权限为-rwx--s--x,mlocate.db权限为-rw-r-----
非分组用户执行可以拥有分组用户的权限,读取mlocate
SBIT
SBIT
drwxrwxrwt
SBIT含义
t作用于其他人权限x权限上时,可以限制用户对目录的管理,每个用户只能删除自己的文件(除了root外)
SGID限制与功能
目前只针对目录有效
当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时
当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
SUID/SGID/SBIT 权限设置
数字表示
特殊权限一般用数字来表示,如果文件具有特殊权限则文件权限数字为4位,第一位表示特殊权限
SUID 的权限 表示 4
SGID的权限表示 2
SBIT的权限表示 1
字母表示
加上 SGID 与 SBIT 在上述的文件权限中
chmod g+s,o+t test; ls -l test
设置权限成为 -rws--x--x 的模样
chmod u=rwxs,go=x test; ls -l test
案例
设置SUID
设置SGID和SUID
设置SBIT
具有空的 SUID/SGID 权限
大写S和T表示不具有x权限
文件与目录管理
文件目录管理
复制文件或目录
cp
用法
cp [-adfilprsu] 来源文件(source) 目标文件(destination)
将文件从源文件(目录)复制到目标文件(目录)
源为文件
当目标是目录时将源文件复制到目标目录下
当目标时文件时将源文件复制到目标目录的目录中并变更为目录文件名
源为目录
目标只能为目录,将源目录下所有文件复制到目标目录下
cp [options] source1 source2 source3 .... directory
将多个文件复制到指定目录
选项和参数
-d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身
-f :为强制(force)的意思,若目标文件已经存在且无法打开,则移除后再尝试一次
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l :进行硬式链接(hard link)的链接文件创建,而非复制文件本身;
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r :递回持续复制,用于目录的复制行为;(常用)
-s :复制成为符号链接文件 (symbolic link),亦即“捷径”文件;
-a :复制时,尽可能保持文件的结构和属性.(但不保持目录 结构)等同于 -dpR
案例
将主文件夹下的 .bashrc 复制到 /tmp/bashrc(目标和源都为文件)
将主文件夹下的.bashrc复制到指定目录下
将目录中文件复制到指定目录中
复制文件时保留文件原始属性(特殊时创建人和分组)
检索文件目录
ls
用法
ls [-aAdfFhilnrRSt] 文件名或目录名称
ls [--color={never,auto,always}] 文件名或目录名称..
ls [--full-time] 文件名或目录名称..
ls 参数可以有多个,可以将多个文件和目录一起显示
ls 当参数为文件夹时可以查看文件夹下面所有文件或子目录
ls -d 当参数为文件夹时仅仅查看当前文件夹信息(不在列出文件夹下文件或子目录)
选项和参数
列出指定目录下全部文件
-a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(默认显示的只有:非隐藏文件的文件名)
-A :全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录 (默认显示的只有:非隐藏文件的文件名)
-d :仅列出指定目录本身,即“.”,而不是列出目录内的文件数据(常用)
-R :连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来;
排序相关
-S :以文件大小大小排序,而不是用文件名排序;
-r :将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小
-f :直接列出结果,而不进行排序 (ls 默认会以文件名排序!)
-t :按文件最近修改时间排序
-c:按文件状态改变时间(i节点中的ctime)排序并输出目录内容
文件属性相关
-n :列出 UID 与 GID 而非使用者与群组的名称
-l :长数据串行出,包含文件的属性与权限等等数据
-i :列出 inode 号码,
-h :将文件大小以人类较易读的方式(例如 GB, KB 等等)列出来;
显示样式相关
--color=never :不要依据文件特性给予颜色显示;
--color=always :显示颜色
--color=auto :让系统自行依据设置来判断是否给予颜色
--full-time :以完整时间模式 (包含年、月、日、时、分) 输出
--time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime)
而非内容变更时间 (modification time)
而非内容变更时间 (modification time)
-F :根据文件、目录等信息,给予附加数据结构,例如:
*:代表可可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
*:代表可可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
案例
将主文件夹下的所有文件列出来(含属性与隐藏文件)
不显示颜色,但在文件名末显示出该文件名代表的类型(type)
完整的呈现文件的修改时间
技巧
使用通配符对当前目录下文件目录进行关键字查找
使用-F和grep组合对查找文件类型进行过滤 (只查找目录)
使用-l和grep组合对
移除文件或目录
rm
用法
rm [-fir] 文件或目录
选项与参数
-f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!
案例
询问是删除文件
使用通配符删除文件
删除某个目录中文件
移动文件与目录,或更名
mv
用法
mv [-fiu] source destination
将文件从源文件(目录)移动到目标文件(目录)
当目标是目录时将目录(文件)复制到目标目录下
当目标时文件时且目标和源文件同目录,则相当于更改文件名
当目标时文件时且目标和源文件不同目录,则相当于移动文件并变更文件名
mv [options] source1 source2 source3 .... directory
将多个文件移动到指定目录
选项与参数
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会更新 (update)
案例
将文件复制到指定目录中
更改文件名
创建多个文件再全部移动到目录
取得文件名称
basename
获取PATH路径中文件名
获取目录名称
dirname
获取PATH 路径目录路径
创建文件
vim 文件名
echo "" > 文件名
touch 文件名
通过文件名搜寻文件
概述
Linux 搜寻文件命令有 whereis ,locate,find
whereis 通过已经加载到内存中某些特定目录搜寻
locate 通过利用数据库来搜寻
find 通过搜寻硬盘内的文件系统搜寻
whereis (由一些特定的目录中寻找文件文件名)
概述
whereis 主要是针对 /bin,/sbin 下面的可执行文件和/usr/share/man等几个比较特定的目录查找文件。
可以使用 whereis -l查看所有特点目录
可以使用 whereis -l查看所有特点目录
用法
whereis [-bmsu] 文件或目录名
选项与参数
-l :查看 whereis 查找的特定目录
-b :只找 binary 格式的文件
-m :只找在说明文档 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件
案例
查看 whereis 查找的特定目录
只找出跟 passwd 有关的“说明文档”文件名
locate
概述
locate使用Linux数据库查找文件,Linux数据会定期系统文件数据写入数据库中,我们可以使用locate -S查看数据的信息。
数据库保存数据文件 /var/lib/mlocate
Linux操作系统按照不同的发现版本会按照不同的时间定时将操作系统中所有的文件信息
添加到数据库中(CentOS 7.x 是每天更新数据库一次)
添加到数据库中(CentOS 7.x 是每天更新数据库一次)
因为定时更新,因而一些刚刚生成的文件可能无法被locate查找到。这时可以通过updatedb命令手动触发更新
locate
用法
locate [-ir] keyword
选项与参数
-i :忽略大小写的差异;
-c :不输出文件名,仅计算找到的文件数量
-l :限制查找到文件的数量
-S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
r :后面可接正则表达式查找
案例
找出系统中所有与 passwd 相关的文件名,且只列出 5 个
列出 locate 查询所使用的数据库文件之文件名与各数据数量
列出系统所有与passwd相关文件名的数量
找出系统中所有与 passwd 相关的文件名,且只列出 5 个
updatedb
updatedb命令根据 /etc/updatedb.conf 的设置去搜寻系统硬盘内的文件名,并更新/var/lib/mlocate 内的数据库文件;
find
用法
find [PATH] [option] [action]
find [PATH] [option] [action]
选项和参数
与时间有关的选项
mtime
-mtime n
查看n 表示数字表示n天以前的24小时内文件内容发生改变的文件
-mtime +n
查看n+1天以前文件内容发生改变的文件
-mtime -n
查看n-1天内文件内容发送改变的文件
atime
最近一次文件的内容被读取而更新的时间,(使用和mtime相同)
ctime
最近一次文件的状态发生改变而更新的时间(文件的属性,权限变更都属于状态的变更) (使用和mtime相同)
-newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名
案例
将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出
寻找 /etc 下面的文件,如果文件日期比 /etc/passwd 新就列出
与使用者或群组名称有关的参数
-user name
查看某个路径下文件拥有者名称为name的所有文件
-group name
查看某个路径下分组名称为name的所有文件
-uid n
查看某个路径下文件拥有者UID为n的所有文件
-gid n
查看某个路径下分组UID为n的所有文件
-nouser
查看某个路径下寻找文件的拥有者不存在的所有文件
-nogroup
查看某个路径下寻找文件所在分组不存在的所有文件
案例
搜寻 /home 下面属于 dmtsai 的文件
搜寻系统中不属于任何人的文件
名称属性有关的参数
-name filename:搜寻文件名称为 filename 的文件;
-size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:
c: 代表 Byte, k: 代表 1024Bytes。所以,要找比 50KB
还要大的文件,就是“ -size +50k ”
c: 代表 Byte, k: 代表 1024Bytes。所以,要找比 50KB
还要大的文件,就是“ -size +50k ”
-type TYPE :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f), 设备文件 (b, c),
目录 (d), 链接文件 (l), socket (s), 及 FIFO (p) 等属性。
目录 (d), 链接文件 (l), socket (s), 及 FIFO (p) 等属性。
案例
找出文件名为 passwd 这个文件
找出文件名包含了 passwd 这个关键字的文件
找出 /run 目录下,文件类型为 Socket 的文件名有哪些?
文件权限有关的参数
-perm mode :搜寻文件权限“刚好等于” mode 的文件,这个 mode 为类似 chmod
的属性值,举例来说, -rwsr-xr-x 的属性为 4755 !
的属性值,举例来说, -rwsr-xr-x 的属性为 4755 !
-perm -mode :搜寻文件权限“必须要全部囊括 mode 的权限”的文件,举例来说,
我们要搜寻 -rwxr--r-- ,亦即 0744 的文件,使用 -perm -0744,
当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,
因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。
我们要搜寻 -rwxr--r-- ,亦即 0744 的文件,使用 -perm -0744,
当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,
因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。
-perm /mode :搜寻文件权限“包含任一 mode 的权限”的文件,举例来说,我们搜寻
-rwxr-xr-x ,亦即 -perm /755 时,但一个文件属性为 -rw-------
也会被列出来,因为他有 -rw.... 的属性存在!
-rwxr-xr-x ,亦即 -perm /755 时,但一个文件属性为 -rw-------
也会被列出来,因为他有 -rw.... 的属性存在!
额外可进行的动作
-exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。
-print :将结果打印到屏幕上,这个动作是默认动作!
目录相关操作
切换目录
cd
几个特殊目录
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表“目前使用者身份”所在的主文件夹
~account 代表 account 这个使用者的主文件夹
显示当前的目录绝对路径
pwd
用法
pwd -[-P]
选项与参数
-P :显示出确实的路径,而非使用链接 (link) 路径(软连接就好像快捷方式)
案例
进入/var/mail 查看当前目录绝对路径
进入/var/mail 使用-P查看当前目录(软连接目录)链接到其真实目录绝对路径
创建一个新的目录
mkdir
用法
mkdir [-mp] 目录名称
选项和参数
-m :设置文件的权限喔
p :帮助你直接将所需要的目录(包含上层目录)递回创建起来
案例
创建一个目录并设置权限
使用连续创建多级目录
删除一个空的目录
rmdir
概述
rmdir只能删除空目录,因而并不常用
用法
rmdir [-p] 目录名称
选项和参数
-p :连同“上层”“空的”目录也一起删除
案例
使用-p连续删除多级空目录
文件内容查看
文件内容分为文本文件和二进制文件Linux 查看文件内容的命令如下
- cat 由第一行开始显示文件内容
- tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
- nl 显示的时候,顺道输出行号!
- more 一页一页的显示文件内容
- less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
- head 只看头几行
- tail 只看尾巴几行
- od 以二进制的方式读取文件内容!
cat
概述
第一行到最后一行连续显示在屏 幕上
用法
cat [-AbEnTv]
选项和案例
列出行号
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-n :打印出行号,连同空白行也会有行号,与 -b 的选项不同;
列出特殊字符
-v :列出一些看不出来的特殊字符
-E :将结尾的断行字符 $ 显示出来
-T :将 [tab] 按键以 ^I 显示出来;
-A :相当于 -vET 的整合选项
tac
由最后一行到第一行反向在屏幕上显示出来。用法和cat相同
nl
查看文件所有内容并打印出行号
用法
nl [-bnw] 文件
选项与参数
-b :指定行号指定的方式
-b a
空行列出行号
-b t
空行不列出行号(默认)
-n :列出行号表示的方法
-n ln :行号在屏幕的最左方显示;
-n rn :行号在自己字段的最右方显示,且不加 0
-n rz :行号在自己字段的最右方显示,且加 0 ;
-w :行号字段的占用的字符数。
more
可翻页检视 文件内容
用法
more 文件
快捷键
空白键 (space):代表向下翻一页;
b 或 [ctrl]-b :代表向上翻一页
q :代表立刻离开 more ,
:f :立刻显示出文件名以及目前显示的行数
/字串 :代表在这个显示的内容当中,向下搜寻“字串”这个关键字
Enter :代表向下翻“一行”;
less
more升级版本
用法
less 文件
快捷键
[pagedown]:向下翻动一页
[pageup] :向上翻动一页;
/字串 :向下搜寻“字串”的功能;
?字串 :向上搜寻“字串”的功能;
n :重复前一个搜寻 (与 / 或 ? 有关!)
N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
g :前进到这个数据的第一行去
G :前进到这个数据的最后一行去 (注意大小写);
q :离开 less 这个程序;
head
head (取出前面几行)
用法
head [-n number] 文件
选项参数
-n :后面接数字,代表显示几行的意思
案例
默认取出前10行
取出前20行
tail
tail (取出后面几行)
用法
tail [-n number] 文件
选项与参数
-n :后面接数字,代表显示几行的意思
-f :表示持续侦测后面所接的文件名,要等到按下[ctrl]-c才会结束tail的侦测
案例
默认的情况中,显示最后的十行
显示最后的二十行
列出100行以后的数据
持续侦测/var/log/messages的内容
要显示 /etc/man_db.conf 的第 11 到第 20 行
od
od [-t TYPE] 文件
用法
od [-t TYPE] 文件
选项或参数
-t :后面可以接各种“类型 (TYPE)”的输出
c :使用 ASCII 字符来输出
a :利用默认的字符来输出
d[size] :利用十进制(decimal)来输出数据,每个整数占用 size Bytes ;
f[size] :利用浮点数值(floating)来输出数据,每个数占用 size Bytes
o[size] :利用八进位(octal)来输出数据,每个整数占用 size Bytes
x[size] :利用十六进制(hexadecimal)来输出数据,每个整数占用 size Bytes
相关概念
绝对路径
绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc
相对路径
相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 ../../home/dmtsai/ 等
等。反正开头不是 / 就属于相对路径的写法
等。反正开头不是 / 就属于相对路径的写法
. :代表当前的目录,也可以使用 ./ 来表示;
.. :代表上一层目录,也可以 ../ 来代表。
文件的编辑器
vi & vim 概述
vi,vim时最常见的文件编辑器其中vim为vi的升级版本
vi
概述
vi 三种状态
一般指令模式 (command mode)
vi 打开一个文件就直接进入一般指令模式了(这是默认的模式,也简称为一般模式)
使用vim 打开一个新文件
vim 打开一个文件
编辑模式 (insert mode)
进入编辑指令模式需要在一般指定模式中按下“i, I, o, O, a, A, r, R”等任何一个字母之后才会进入编辑模式
按下 [Esc] 回到一般指令模型
编辑一个文件
命令行命令模式 (command-line mode)
进入命令行命令模式需要在一般模式中输入:+指令
对文件执行指令
不同指令模式按键功能
一般指令模式 (command mode)
常用操作
光标移动
屏幕“向下”移动一页,相当于 [Page Down]按键
[Ctrl] + [f]
屏幕“向上”移动一页,相当于 [Page Up] 按键
[Ctrl] + [b]
移动到这一列的最前面字符处
0 或功能键[Home]
移动到这一列的最后面字符处
$ 或功能键[End]
移动到这个文件的最后一行
G
移动到这个文件的第 n行
nG
移动到这个文件的第一列,相当于 1G 啊
gg
查找替换
向光标之下寻找一个名称为 word 的字符串
/word
向光标之上寻找一个字串名称为 word字符串
?word
查找下一个匹配的字符串
n
查找上一个匹配的字符串
N
n1 与 n2 为数字。在第 n1 与 n2 列之间寻找
word1 这个字串,并将该字串取代为 word2
word1 这个字串,并将该字串取代为 word2
:n1,n2s/word1/word2/g
从第一列到最后一列寻找 word1 字串,并将
该字串取代为 word2
该字串取代为 word2
:1,$s/word1/word2/g
从第一列到最后一列寻找 word1 字串,并将
该字串取代为 word2 !且在取代前显示提示
字符给使用者确认 (confirm) 是否需要取
代!(
该字串取代为 word2 !且在取代前显示提示
字符给使用者确认 (confirm) 是否需要取
代!(
:1,$s/word1/word2/gc
复制移动删除
删除
x 为向后删除一个字符 , X 为向前删除一个字符
x, X
删除光标所在的那一整列
dd
n 为数字。删除光标所在的向下 n 列
ndd
复制
复制光标所在的那一行
yy
n 为数字。复制光标所在的向下 n 列
ydd
p 为将已复制的数据在光标下一列贴上,P 则为贴在光标上一列
p, P
复原前一个动作
u
重做上一个动作
[Ctrl]+r
其他
参考鸟哥私房菜
编辑模式 (insert mode)
vim
概述
目前大部分的 distributions 都以 vim 取代 vi 的功能了!如果你使用 vi 后,却看到画面
的右下角有显示目前光标所在的行列号码,那么你的 vi 已经被 vim 所取代
的右下角有显示目前光标所在的行列号码,那么你的 vi 已经被 vim 所取代
vim功能的增强
vim 会进行语法检验,所以你会看到画面中内部主要为深蓝色, 且深蓝色那一列是以注解符号 (#) 为开头
在左边显示该文件的属性,包括只读文件、内容共有 11176 列与670293 个字符;
最下面一列的右边出现的 1,1 表示光标所在为第一列, 第一个字符位置之意
vim 特殊功能
多窗口
当我们编辑一个大文件可以使用多窗口查看
按键功能
块化
可以在一般指令模式 (command mode),块化复制粘贴
按键功能
多文件
vim 可以同时编辑多个文件,并在多个文件中复制粘贴
用法
vim file...
增强的命令行
vim 环境设置与记录
vim 的暂存盘、救援回复
当你的系统因为某些原因而导致类似死机的情况时, 还可以通过某些特别的机制来让你将之前未储存的数据“救”回来
原理
当我们在使用 vim 编辑时, vim 会在与被编辑的文件的目录下,再创建一个名为.filename.swp 的文件,vim中做的动
作就会被记录到这个 .man_db.conf.swp 当中喔!如果你的系统因为某些原因断线了, 导致你编辑的文件还没有储存,
这个时候 .man_db.conf.swp 就能够发挥救援的功能了
作就会被记录到这个 .man_db.conf.swp 当中喔!如果你的系统因为某些原因断线了, 导致你编辑的文件还没有储存,
这个时候 .man_db.conf.swp 就能够发挥救援的功能了
案例
执行 vim man_db.conf
[ctrl]-z 让编辑操作在后台执行并暂停
kill- 9 杀掉vim命令程序的进程
重新编辑文件选择系统处理方式
回复状态类型
[O]pen Read-Only:打开此文件成为只读文件, 可以用在你只是想要查阅该文件内容并
不想要进行编辑行为时(同时用于多用户操作同一文件的情况)
不想要进行编辑行为时(同时用于多用户操作同一文件的情况)
(E)dit anyway:还是用正常的方式打开你要编辑的那个文件, 并不会载入暂存盘的内容
(R)ecover:就是载入暂存盘的内容,用在你要救回之前未储存的工作。 不过当你救
回来并且储存离开 vim 后,还是要手动自行删除那个暂存盘喔
回来并且储存离开 vim 后,还是要手动自行删除那个暂存盘喔
(D)elete it:你确定那个暂存盘是无用的!那么打开文件前会先将这个暂存盘删除!
这个动作其实是比较常做的
这个动作其实是比较常做的
(Q)uit:按下 q 就离开 vim ,不会进行任何动作回到命令提示字符
(A)bort:忽略这个编辑行为,感觉上与 quit 非常类似! 也会送你回到命令提示字符
文件目录的压缩和解压
压缩的原理
计算机系统中都是使用所谓的 Bytes 单位来计量的!不过,事实上,计算机最小的计量单位应该是 bits 也就时0,1,当我们用一个字节保存数字1则是00000001,一共7个0和一个1,所谓压缩计算就时用一个bit来表示1.释放那些被占用放0的没用空间。
常用的压缩文件和程序
针对单一文件的压缩和解压
gzip, zcat/zmore/zless/zgrep(对应*.gz压缩文件)
压缩解压
gzip
用法
gzip [-cdtv#] 文件名
默认情况下gzip为压缩文件为gz格式的*.gz压缩包
加上-d参数后gzip为解压
选项与参数
-c :将压缩的数据输出到屏幕上,可通过数据流重导向到文件;这样可以保留源文件
-d :解压缩的参数;
t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6
案例
将service文件压缩到当前文件
将压缩文件解压
将文件压缩并保留源文件
注意
gzip 压缩后并不会保留源文件
查看压缩包中文件
zcat/zmore/zless
查看压缩文件内容
查看压缩文件关键字
zgrep
查看http关键字在压缩文件中哪几行
- bzip2, bzcat/bzmore/bzless/bzgrep(对应*.bz2压缩文件)
压缩解压
bzip2
用法
bzip2 [-cdkzv#] 文件名
选项与参数
-c :和gzip含义相同
-d:和gzip含义相同
-v:和gzip含义相同
-#:和gzip含义相同
案例
使用bzip2将文件压缩并输出对比信息
将压缩的文件解压
将文件压缩并保留源文件
注意
bzip2 压缩后并不会保留源文件
查看压缩包中文件
bzcat/bzmore/bzless
查看压缩文件内容
查看压缩文件关键字
bzgrep
查看http关键字在压缩文件中哪几行
xz, xzcat/xzmore/xzless/xzgrep
压缩解压
xz
用法
xz [-dtlkc#] 文件名
选项和参数
-#:和gzip含义相同
-d:和gzip含义相同
-l :列出压缩文件的相关信息
-c :和gzip含义相同
-t :测试压缩文件的完整性,看有没有错误
案例
使用xz将文件压缩并输出对比信息
将压缩的文件解压
将文件压缩并保留源文件
查看压缩包中文件
xzcat/xzmore/xzless
查看压缩文件内容
查看压缩文件关键字
xzgrep
查看http关键字在压缩文件中哪几行
多文件目录压缩和解压
tar
用法
打包
tar [-z|-j|-J] [cv] [-f 待创建的新文件名] 需要压缩文件(目录)
查看
tar [-z|-j|-J] [tv] [-f 既有的 tar文件名]
解压
tar [-z|-j|-J] [xv] [-f 既有的 tar文件名] [-C 目录]
仅仅解压压缩文件中部分存在的文件
tar [-z|-j|-J] [xv] [-f 既有的 tar文件名] [-C 目录] [解压的文件名称]
压缩目录中部分文件
--exclude 将目录中除去指定文件之外的文件打包
tar [-z|-j|-J] [cv] [-f 待创建的新文件名] --exclude=/root/etc* 需要压缩文件(目录)
-newer-mtime="2015/06/17" 将目录下指定时间之后的文件压缩
tar [-z|-j|-J] [cv] [-f 待创建的新文件名] -newer-mtime="2015/06/17" 需要压缩文件(目录)
选项和参数
压缩解压相关技术选择
-z :通过 gzip 的支持进行压缩/解压缩:此时文件名最好为 *.tar.gz
-j :通过 bzip2 的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2
-J :通过 xz 的支持进行压缩/解压缩:此时文件名最好为 *.tar.xz
-z, -j, -J 不可以同时出现在一串命令行中
压缩
-c :创建打包文件,可搭配 -v 来察看过程中被打包的文件名(filename)
-f filename:-f 后面要立刻接要被处理的文件名,表示压缩的文件名
-P(大写) :保留绝对路径,压缩包中目录格式保留压缩文件的绝对路径
(当不添加-P压缩会出现 ‘从成员名中删除开头的“/”’警告性提示)
(当不添加-P压缩会出现 ‘从成员名中删除开头的“/”’警告性提示)
加上-P, 如果压缩目录为/etc,则压缩文件中文件路径为/etc/*(保留绝对路径,相对根路径而言)
不加上-P,如果压缩目录/etc,压缩文件中目录为 etc/*(保留相对路径)
查看
-t :察看打包文件的内容含有哪些文件名,重点在察看“文件名”就是了;
-f filename:-f 后面要立刻接要被处理的文件名,表示查看压缩文件名
解压缩
-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
-C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项
-f filename:-f 后面要立刻接要被处理的文件名,表示解压的文件名
-P: 当文件压缩加上-P保留绝对路径,没有使用-C参数解压的文件会直接覆盖压缩目录
添加-P参数解压,解压文件回去覆盖/etc目录中的文件
不添加-P参数,会压缩当前当前路径 /root/etc目录下
其他
-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来!对于查看过程中-v 这个选项时,可以将详细的文件权限/属性都会被列出来
-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
--exclude=FILE:在压缩的过程中,不要将 FILE 打包!
案例
tar 使用gz格式压缩/etc目录
tar使用bz2格式压缩/etc目录
tar使用xz格式压缩/etc目录
tar查看压缩文件中文件列表
tar使用bz2格式压缩/etc目录保留绝对路径
解压bz2压缩文件默认到当前目录
解压bz2压缩文件(保留绝对路径)解压到源文件路径下覆盖
解压压缩文件部分文件
Linux文件类型和扩展名称
Linux文件种类
正规文件
纯文本文件(ASCII)
二进制档(binary)
数据格式文件(data)
目录(directory)
链接文件(link)
设备与设备文件(device)
区块(block)设备文件
字符(character)设备文
数据接口文件(sockets)
数据输送档(FIFO, pipe)
Linux文件扩展名
Linux文件能不能被执行于文件名扩展名称无关
Linux能不能执行和文件内容有关
Linux文件能否执行和权限有关
常用的扩展名称
*.sh : 脚本或批处理文件 (scripts),因为批处理文件为使用shell写成的,所以扩展名
就编成 .sh 啰;
就编成 .sh 啰;
Z, .tar, .tar.gz, .zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar
等等的,由于不同的压缩软件,而取其相关的扩展名啰!
等等的,由于不同的压缩软件,而取其相关的扩展名啰!
html, .php:网页相关文件,分别代表 HTML 语法与 PHP 语法的网页文件啰! .html 的
文件可使用网页浏览器来直接打开,至于 .php 的文件, 则可以通过 client 端的浏览器来
server 端浏览,以得到运算后的网页结果呢!
文件可使用网页浏览器来直接打开,至于 .php 的文件, 则可以通过 client 端的浏览器来
server 端浏览,以得到运算后的网页结果呢!
Linux文件名称的限制
Linux下面的文件名称时,最好可以避免一些特殊字符比较好
? > < ; & ! [ ] | \ ' " ` ( ) { }
避免将文件文件名的开头以 - 或 + 来命名
Linux文件名称长度限制
Ext2/Ext3/Ext4文件系统
单一文件或目录的最大容许文件名为 255Bytes,以一个 ASCII 英文占用一个 Bytes 来
说,则大约可达 255 个字符长度。若是以每个中文字占用 2Bytes 来说, 最大文件名就
是大约在 128 个中文字之谱!
说,则大约可达 255 个字符长度。若是以每个中文字占用 2Bytes 来说, 最大文件名就
是大约在 128 个中文字之谱!
观察文件类型:file
fiel 文件名称
查看~/.bashrc文件类型
查看mlocate.db文件类型
0 条评论
下一页