4Linux常用文件操作命令
4.1.1 Linux常用命令-文件处理命令-命令格式与目录处理命令ls
选项是用来调整功能的,参数就是操作的对象:文件名称
简化选项用一个-,完整选项用两个–
以点开头的是隐藏文件,隐藏文件并不是为了让你找不到,是为了告诉用户是一个系统文件不要乱动它
linux中设置隐藏文件的方式就是改名加上.
l-long长格式,就是相关的属性
分成了七个组成部分,先说后六个部分,
1:引用计数,代表这个文件被引用过多少次
root:所有者
root:所属组
针对文件把用户分为三类root所有者只能有一个、group所属组一组相同类型的用户只能有一组、other其他人
1205:文件大小,默认单位是字节
-lh人性化显示
1.2k:文件大小
3月:最后一次修改时间
anaconda-ks.cfg:文件名称
接下来看第一部分是什么意思:文件类型和用户的权限
第一个字符:- d l
后九个字符:分为三组,分别代码所有者、所属组、其他人
每组有3个字符,读、写、执行
这样就可以判断每种类型的用户对这个文件可以执行什么操作
-d direct显示目录本身,而不显示目录下的东西
i结点:每个文件和目录都有一个id号,-i查结点号
总结:ls命令的五个
-a 查隐藏文件
-l 详细信息
-d 指定目录的详细信息
-h 人性化
-i i结点
4.1.2 Linux常用命令-文件处理命令-目录处理命令
1. 目录处理命令:mkdir 创建目录
不要把目录弄得乱七八糟,不要在根目录下创建目录
-p允许递归创建目录
允许同时创建多个目录
2.目录处理命令:cd +目录名称
创建完目录后,如何切换到这个目录
3.目录处理命令:pwd 显示绝对目录
注意前面只保存了当前的子目录的名称,如果我们想要让他显示完整的路径。查询到当前的详细目录
.表示当前目录,…表示上一级目录。注意这里cd空格…,要有空格。
4.目录处理命令:rmdir (remove empty directories)删除空目录
备注:只能删除空目录,非空不能删。如果你想要删除一个目录,先要把这个目录下的子目录和文件都给删除掉。要删除非空目录需要用rm
5.目录处理命令:cp (copy)
复制文件
复制目录
可以同时复制多个目录或文件
复制前后文件的时候不一样了,是以文件最后修改的时间为准。
但有的时候,想把日志备份,不希望文件最后更改的时间发生变化,就用-p,可以保存你想要复制的文件的属性
可以复制文件的同时改名
6.目录处理命令:mv(剪贴)
ctrl+l清屏或者敲clear命令
可以省略当前目录也可以不省略
剪切的时候改名
如果要在当前目录下面改名:在同一个目录下面移动就是改名
7.目录处理命令:rm (remove)
剪切和删除要谨慎,小心系统文件。
rm -rf [文件或目录]
-r 删除目录 (不加-r只能删除文件)
-f 强制执行(系统不会询问你是否确定删除,如果不加系统会一个个文件询问你是否确定删除)
一次删除多个文件,不要让他询问是否确认删除
删除目录
如果不写-f会一个一个的问你,这个目录下面有几百个文件
ctrl+c终止
这样就算这个目录下面有上百个文件也不会让你确认,直接就删除掉了
4.1.3 Linux常用命令-文件处理命令-文件处理命令
touch cat tac more less head tail
1.touch命令(创建文件)
格式: touch [文件名]
这表明要在当前目录tmp下创建文件,若要在指定目录下创建文件,需要在文件名前指定它的路径。
备注:空格的使用 如果想创建带有空格的文件
eg. touch program files 会创建两个文件 program 和 files 可以同时创建多个文件
touch “program files” 创建单个文件 program files
不建议这么用,因为空格多用于多个文件的隔开
2.cat命令(显示文件内容,通常应用于短文件)
格式:cat -n [文件名]
-n:显示行号
3.tac(倒着显示文件内容)格式与cat一样
不支持-n
这是看一个比较短的文件,如果要查长的文件,
4.more(分页显示文件内容,通常应用于长文件,但是不能向上翻页)
格式:more [文件名]
(空格) 或 f 翻页
(Enter) 换行
q或者Q 退出
按空格:一页一页的往后翻
按回车:一行一行的往后翻
往回返页?
5.less(与more 类似,只是多了向上翻页功能,同时多了搜索功能)
在less命令下输入 /xxx 即搜索包含xxx关键词的文件
同样也可以空格翻页、回车换行
如果想要回返,按page up一页一页往回翻,用上箭头一行一行往回翻
可以进行搜索,写上斜杠/以及要搜索的关键词,按下回车
高亮显示的部分即为找到,当前页没有,按n往下找
6.head(显示文件前几行)
格式:head -n [文件名]
-n表示指定行数
如果没有指定行数,默认显示前10行
7.tail (显示末尾几行,与head基本相同)
格式:tail -n [文件名]
-f:动态显示文件末尾内容,更新文件时也会动态变化
这里并没有回到命令行
然后我们再打开一个命令框:去更改一些命令,在这个文件中就会动态显示。
最多用的就是监控一下日志。
4.1.4 Linux常用命令-文件处理命令-链接命令ln
1.ln(生成链接文件)
原意:link
格式: ln -s [原文件] [目标文件]
-s 创建软链接
2.软链接:类似于windows的快捷方式
特点:①文件属性 lrwxrwxrwx
②文件大小-只是符号链接
③/tmp/issue.soft -> /etc/issue 有箭头指向源文件
软链接文件:l表示是软链接文件,3种用户3种权限rwx都可以,所有人都有全部的操作权限
相当于windows的快捷方式,方便快捷的让你找到常用的软件,右边属性只是一个快捷文件而不是应用。
软链接指向它的源文件。因为这个权限不决定它的源文件的操作方式。
很小,不管源文件有多大,他都只有十几个字节
3.硬链接:相当于拷贝 cp -p,但是同步更新
备注:硬链接不能跨分区,不能对目录使用
之前:
之后:往其中的某一个文件中写入一行
源文件末尾增加了一行
硬链接文件末尾也增加了一行
那么软链接是什么样的?
软链接末尾也增加了一行,毕竟软链接是指向硬连接的
把这个文件拷贝到一个地方去,然后把这个文件给删掉
那么再查看软链接,就会找不到
看硬链接,还在
4.区别:
1如果把原文件删除,软链接丢失,硬链接仍能使用(相当于复制但是同步更新)
2软链接可以跨分区,硬链接不可以跨分区
3硬链接不可以针对目录,软链接可以对目录使用
这个目录不可以作为硬链接
4判断硬链接方法:通过i节点识别
ls -i 查看inode,硬链接与源文件inode相同
判断软链接很简单,直接查看这个软链接文件会有箭头指向
直接查看三个文件的inode。一个文件只有一个inode,但是一个inode可以对应多个文件。
5硬链接作用:相当于实时备份,但是用的不多
4.2.1 Linux常用命令-权限管理命令-权限管理命令chmod
前面讲了如果查询到文件的权限
默认有一个权限,但是不一定合理,我们要学习如何更改权限
1.chmod (改变文件或目录权限)
格式:chmod [{ugoa} {±=} {rwx}] [文件或目录] [mode=421] [文件或目录]
-R:递归修改(在该目录下修改其全部子文件子目录的权限)
解释: u表示所有者 ,g表示所属组 ,o表示其他人,a表示所有人
±=增加减少或者直接赋予某种权限
rwx读写执行
只有文件的所有者和root可以更改权限。
我们想给所有者添加上执行的权限
可以同时做多个授权
我们给所属组增加写的权限,给其他人减去读的权限
=号的意思是我不考虑以前你是什么样的权限,我现在就要把权限设置成这个样子
2.权限通常用数字来更改,非常简单
把9个位的权限改成用3个数字来表示需要掌握权限与数字的转换,给你一个权限,你要能写出来它对应的数字
给你一个数字,你能写出来权限的表示
eg. 更改abc文件权限为 rw-r-----
对应输入: chmod 640 abc
3.-R递归修改
a目录和b目录 权限相等
我们改了a的权限,b的权限不会被改变
如果我们想要在改变一个目录的权限的同时,把这个目录下面的所有文件的权限都给改掉,那么:
4.对于权限的理解
问:一个普通用户是否可以删除这个文件?
创建了一个普通用户,用普通用户再进一遍
#是root
$是普通用户
为什么普通用户可以删除掉root创建的这个文件?而且这个普通用户明明没有写的权限呀?
其实是因为我们对rwx的理解是有问题的,要深入理解
文件的rwx权限:
r可以查看文件的内容
w可以修改文件的内容,像word一样
x可以执行,脚本、命令可以执行
目录的rwx权限:
r你可以列出目录中的内容,可以查看目录中有哪些文件
w你可以在这个目录下面创建、删除文件。刚刚那个例子的答案:我用root创建了一个目录,在这个目录下又用root创建了一个文件,但是注意我们把目录的权限改成了777,也就是所有的用户对所有的操作都有全部的权限,虽然那个目录下的文件只有root有写权限,但是这个文件所在的目录是每个人都有写权限的,所以linzhiling登陆过来一看,我对整个目录有写权限呀,证明我可以在这个目录下创建、删除文件呀。
为什么可以删除temp目录下testfile这个文件,是因为temp这个目录的权限是77呀。不管是root创建的还是任何一个普通用户创建的,都可以被删除。
刚才你为什么认为这个文件删除不了,是因为你以为此用户对这个文件有写权限,其实这个写文件的权限只能修改这个文件的内容,而对这个目录有写权限,才能删除掉这个目录下的文件。
千万要记住这个事情!
x你可以进入这个目录
注:想查看目录有哪些文件要有r,想进去这个目录要有x权限。
目录有r权限一定有x权限:因为不可能你有r权限你却进不去。也不可能你有x权限却没有r权限,你能进去却查看不到里面有什么文件。
为什么这个linzhiling用户可以删除temp/testfile文件?
此用户对这个文件有写权限,其实这个写文件的权限只能修改这个文件的内容,而对这个目录有写权限,才能删除掉这个目录下的文件。
4.2.2 Linux常用命令-权限管理命令-其他权限管理命令
既然一个文件它的权限属性是可以更改的,那么它的所有者它的所属组也可以更改
chmod 改变权限 root和所有者
chown 改变所有者 root
chgrp 改变所属组 root
umask
1. chown(改变文件或者目录的所有者)
首先我们讲,谁可以改变一个文件的所有者?
上节课讲过,如果你想要改变一个用户的权限,只有两个用户可以,一个是这个文件的所有者,一个是管理员root。
这里我们用linzhiling用户创建一个文件abcd,创建后,有它的默认权限,如果我们想要修改这个权限。
这个用户改是可以的。
但是今天要讲的改变一个文件的所有者,是不是也像改变操作权限一样呢?试试
不能,即使你是这个文件的所有者,你也不能改变这个文件的所有者。
那谁可以做呢?管理员root,用管理员登陆
刚刚用户linzhiling创建的abcd文件,是在/home/linzhiling下面
所以,只有root可以改变一个文件的所有者。
什么时候需要改变?如果一个人的工作还没有写完就要出去,就改变这个文件的所有者 。
现在我们root创建了一个文件fengjie,又创建了一个用户shenchao,然后改变所有者
中文设置问题
前提是这个系统中存在你要改的这个用户。
2.chgrp(改变文件或者目录的所属组)
格式:chgrp [用户组] [文件或目录]
fenhjie这个文件默认所属组是root
把所属组改了以后,你也可以增加所属组的权限,这个组里面所有的成员都是
3.umask(显示设置文件的缺省权限)
格式:umask [-S]
-S:以rwx形式显示新建文件缺省权限
备注:在linux种默认新建的文件权限:644 不具备可执行权限,为了安全性
默认新建的目录权限:755
使用方法:可以更改默认文件权限的参考值
创建的文件和目录都有默认的权限
一个文件的所有者:谁创建的就是谁
一个文件的所属组:一个用户可以属于多个组,但是它总只有一个缺省组,就是最主要的
所以就是这个文件所有者的缺省组
谁定义了一个目录默认的命令
新建一个目录,则目录的权限与默认的权限一致
但是新建一个文件,权限就和默认权限不一样了
看看这个文件的权限相比于目录的权限少了什么东西
每个用户的权限位上都少了一个x
原因:权限管理有一个最基本的定义:缺省创建的文件是不能有可执行文件的
为什么要这样规定:我们看到的木马病毒都是不具有可执行权限的
0特殊权限
022正常的权限
0—所有者什么权限都没有
2-w-其他人和所属组有写权限,没有读和执行权限
这样是非常不合理的,但是为什么会是这样的呢?
这叫做权限掩码,即真正的权限是用777减去022得到的值
777-022=755 rwxr-xr-x 就是我们用 umask -R显示出的那个
假设我们觉得755 rwxr-xr-x这个权限不合理,我们希望权限能是rwxr-xr–,这时候怎么做呢
先把这个权限对应的数字写出来754,先要用777减去754=023,即你要把umask的值改为023
缺省创建文件权限的值是可以更改的,但是不建议这么做,联系完后改回来
4.3.1 Linux常用命令-文件搜索命令-文件搜索命令find
目录结构都规划好,减少搜索操作,会占用大量的服务器资源
windows中有一个软件叫做everthing,可以搜索
根据文件名搜索、根据文件大小搜索
find的选项有很多,这里介绍最常用的
.find(文件搜索)
格式:find [搜索范围] [条件匹配]
备注:-name为精准搜索,搜索init则只搜索文件名为init的文件,名字中包含init的文件不会被搜索到
如果要搜索包含init字母的文件名,则 -name *init*
或者 -name init??? 其中问号匹配单个字符,会搜索到inittab
-iname不区分大小写搜索
-size 大小换算方法: 1数据块 = 512字节 = 0.5K
100MB = 102400KB = 204800
1按文件名搜索
这里是精准搜索,只有文件名叫做init的会被搜索到,多一个字符都不行
也可以模糊搜索,用匹配符*
只要文件名中包含了init就会搜索出来
查找所有的以init开头的文件
init开头的后面有三个字母的文件
*可以匹配任意字符,?可以匹配单个字符
区分大小写
加个-i才能不区分大小写
2按照文件大小搜索
清理时先把大的文件删掉
三种执行的方法
单位是数据块,一个数据块是512字节,0.5KB。即1KB占两个数据块。
100MB=102400KB=204800数据块
查找大于100M小于200M的文件
3根据所有者查找-home
4根据时间属性来查找
查找/etc下30分钟之内被修改过内容的文件
5find连接的选项
查找出了在etc下面以init开头的文件!用到了-a,既满足什么又满足什么
查找出了在etc下面以init开头的目录!
6查找后并执行一些操作
花括号:find查找的结果
\:转义符
;:结束
找到文件并且列出详细信息
查找以init开头的为文件列出它们的详细信息
-ok与-exec有什么区别
最大的区别就是就一个询问确认环节
它一个个的问你要不要看
比如,你要执行查找后删除的命令,就需要这样一个个的确认
7-inum 针对i节点的
什么时候用:比如我创建了一个文件,删除是不好操作的
用引号引起来
那么我们就需要用inode
4.3.2 Linux常用命令-文件搜索命令-其他文件搜索命令
locate which whereis grep
1.locate(文件资料库种查找文件)
格式:locate 文件名
备注:locate存在的问题,可能因为系统没有及时更新文件,搜索不到,但是大量常用的系统文件还是能搜的
原理:并不像find一样遍历你所查找的范围,而是在文件资料库中找,所以很快
我们看看这个资料库在哪呢
有一个数据库文件资料库
有一个问题:新创建的文件还没有被收集到资料库的话,就找不到
所以就需要我们手动更新资料库updatedb
还会有一个问题,创建一个文件叫做zhangbozhi放在tmp目录下
手动更新资料库后,还是找不到zhangbozhi文件
因为它是存放在tmp目录下,这个目录并不在update所收录的范围之中
如果想要locate查找不区分大小写,就需要用-i
2.which(搜索命令所在目录及别名信息)
格式:which [命令名称]
你现在查找的文件就是一个可执行文件、命令,可以更精准的查找到所在目录和别名
为什么这个会有询问确认,是因为我们用的是别名rm -i:
如果我们使用/bin下面的rm命令,则不会有询问确认
所以你要怎么知道一个命令有没有别名,就是要用which查看
3.whereis(搜索命令所在目录及帮助文档)
格式:whereis [命令名称]
whereis与which相同点:就是他也能找到文件所在的目录
不仅如此,他还列出帮助文档所在的位置
4.grep(在文件中搜索字串匹配的并行输出)
格式: grep -iv [指定字串] [文件]
-i 不区分大小写
-v 排除指定字串
在文件内容中搜索
比如我们只想要查看multiuser相关的所在的行
要想不区分大小写要加-i
很常用,比如apche Apche
-v排除指定字符串
这些行里面都会有一个#,表示配置文件或者脚本的注释
要想把注释行去掉,去掉#写在开头的,加一个表示行首的^
4.4 Linux常用命令-文件搜索命令-帮助命令
man help
1.man(帮助命令,获得帮助信息)
格式:man [命令或配置文件]
eg. man ls 查看ls命令的帮助信息
man services 查看配置文件services的帮助信息
备注:例如password同时有命令和配置文件,linux优先查看命令
passwd命令在man1目录下,passwd配置文件在man5目录下
通常1表示命令的帮助,5表示配置文件的帮助
进入了帮助手册,空格翻页,回车翻行,/加上响应的内容进行定位
输入/-a或者/-l就会定位到相应的位置
man除了可以看命令的帮助,还可以看配置文件的帮助
千万不要写成这个样子man+绝对路径,因为这个时候你得到的并不是它的帮助信息,而是把这个文件都写出来了
只要用man+配置文件名称
命令:作用、每个小的选项
配置文件:作用、每个内容
一个配置文件怎么会有选项
如果一个东西既有命令又有配置文件,会优先查看命令的帮助信息
1命令的帮助
5配置文件的帮助
那么我们只需要加上数字
用whatis+命令,直接查看命令的简短信息
用apropos+配置文件,查看配置文件的简短信息
只是想知道命令的选项
2man的使用
我们想要更改时间,不需要记住,用的时候查就行了
也可以用info
3help(获得shell内置命令的帮助信息)
格式: help 命令
备注:系统有很多内置命令无法通过man来查找 比如cd umask等,这时候需要help
一些内置命令,找不到路径
不能使用man来查找命令
如果用了man
后面shell编程时也很有用
总结: