linux中最常用的文件管理命令
仅个人想法,会持续不间断更新和改进。
在 Linux 系统中,文件管理是基础且重要。
如何显示,如何查找,如何编辑,如何删除,如何复制,如何移动,如何重命名,如何创建,如何修改,如何查看文件的属性等等,都是我们在日常工作中经常会用到的命令。
Linux的文件管理命令也会帮助你更高效地在终端中操作文件和目录。
而其中最绕不开的当属以下几个。
最常用的且没有之一的 ls
如果linux
命令来个排名,ls
命令应该是最常用的命令,除非你像黄蓉的母亲,有过目不忘的本领,惹得黄药师抱憾终身。
ls
命令是list
的缩写,通过ls命令,我们可以查看目录的内容,确定各种重要文件和目录的属性。
命令格式
1 | ls [参数] [路径] |
不加任何参数
如果不加任何参数,默认列出当前目录的内容。
1 | $ ls /etc/sysconfig/network-scripts |
使用-l显示更多细节
-l 就是使用long listing format长格式,来显示更多的内容信息。
1 | $ ls -l /etc/sysconfig/network-scripts |
使用-t按照时间排序
如果希望看到最近创建的文件,就需要用到-t参数了。
1 | $ ls -lt /etc/sysconfig/network-scripts/ |
使用-r按照时间逆序
如果希望删除很早以前的文件,看到最早创建的文件,就需要用到-r参数了。
1 | $ ls -ltr /etc/sysconfig/network-scripts/ |
使用-S根据文件大小排序
1 | $ ls -lS /etc/sysconfig/network-scripts/ |
查看庐山真面貌的cat
cat命令可用于输出文件的内容到标准输出。
cat
的官方定义为:
concatenate files and print on the standard output
翻译过来就是:把档案串连接后传到基本输出
其用法一般为:
1 | $ cat [OPTION]... [FILE]... |
cat
命令的可选参数[OPTION]
如下所示:
-n
或--number
: 由 1 开始对所有输出的行数编号-b
或--number-nonblank
: 和 -n 相似,只不过对于空白行不编号-s
或--squeeze-blank
:当遇到有连续两行以上的空白行,就代换为一行的空白行-T
或--show-tabs
:显示TAB字符,显示为^I
-E
或--show-ends
:显示行末符号,字符为$
-A
或--show-all
:显示所有的信息
此时假定我们的文件为hello.c,内容为最经典的:
1 |
|
接下来的实例全部根据这个文件展开,Hello World. Hello Linux
实例 :简单显示内容
1 | $ cat hello.c |
实例 :显示行号 -n
1 | $ cat -n hello.c |
实例 : 显示行末
1 | $ cat -E hello.c |
实例:显示空白字符
1 | cat -T hello.c |
此时可以看到^I,which means Tab charcter.
加一个管道
比如,此时希望看到你的源码文件一共多少行,每行代表什么意思,就可以把含有行号的输入通过管道发送到另外一个文件,如下所示:
1 | $ cat -n hello.c > hello_number.c |
其他的一些选项可以自行尝试。
反向显示之 tac
tac
命令将文件反向输出,刚好与前面的cat
输出相反,cat
命令可用于输出文件的内容到标准输出。
这个命令其实就是cat
的反向输出,😁。
tac
的官方定义为:
tac
- concatenate and print files in reverse
其用法一般为:
1 | $ tac [OPTION]... [FILE]... |
tac
命令的可选参数[OPTION]
如下所示:
-b
,--before
:在行前而不是行尾添加分割标志-r
,--regex
:将分割标志作为正则表达式来解析-s
,--separator=STRING
:使用STRING
作为分割标志
同样使用前面的hello.c文件,内容为:
1 |
|
接下来的实例全部根据这个文件展开,Hello World. Hello Linux
显示内容
与cat比对输出如下所示:
1 | $ cat hello.c |
其他几个参数用的到时不多,不过搭配起来还是有一些帮助的,比如做一个反序输出,搭配使用-s
和-r
参数,如下:
1 | $ cat 'Hello World.' | tac -r -s "." |
这个方法就用到了管道、正则表达式。
识别文件类型的file
file鉴别大神
file的官方解释为:
1 | file - determine file type |
也就是说可以识别文件类型的意思,也可用来辨别一些文件的编码格式。它是通过查看文件的头部信息来获取文件类型,而不是像Windows通过扩展名来确定文件类型的,所以加不加后缀真的无所谓,谁会爱上谁,说起Windows吗,啥也不说了。
下面看几个比较使用的例子。
实例一 :默认
file后直接跟文件,得到如下所示信息
1 | $ file book.pdf |
可以看出加不加后缀都是没有关系的。
实例二:不显示名称
1 | $ file -b book.pdf |
加上-b
参数,是brief
的含义,将只显示文件辨识结果,不显示文件名称了,这个其实对于很多文件而言,不是很友好。
实例三:输出易懂信息
1 | $ file -i delete.pdf |
加上-i
参数,是mime
类型的含义,我也不懂是啥意思,但是我能刚方便地读懂我想知道的文件类型的含义。这就够了,不是吗,毕竟我们是来是用file
命令的。
实例四:查看文件中的文件名的文件信息
1 | $ cat hello.txt |
这个咋听着这么拗口,其实很简单,其实并不难
,加上·-f·参数,是file-from
类型的含义,到底是几个意思呢,也就是你想查看文件的类型信息的文件名在一个文件里面,从这个文件里面读取文件的信息。
实例五:好看的鸡肋
1 | $ file -F " === " sunset.jpg |
这个功能说实话,没搞明白有什么作用,默认的:感觉挺好用的,当然这个应该属于定制型的,就是默认替换掉一些提示信息。
实例六:查看软链接的文件信息
1 | $ file a.jpg |
默认情况下,如果没有-L
参数,只能得到这个文件是软链接的信息,如果加上这个参数,就能看到源文件的文件信息,这个功能还是很赞的。
less - 少就是多
在Linux
系统如果希望查阅文件,有三个命令,是在命令行里面,如果GUI界面,请自行绕过,选择太多了。
cat
入门级的more
文件内容一屏幕装不下的时候使用的less
可以简单地认为是more
的升级版 , 首推
我首推less
命令的原因是该命令可以往回卷动浏览已经看过的部分,但是more
是不可以的。或者可以认为less
是查看模式下的vim
。
首先看看为什么用less
命令吧。
If the file is longer than the size of Terminal window then it will be not easy to read or view all the content of the file easily. But there is a tweak, you can use less with cat command. It will give user an ability to scroll forward and backward through the content of the files using PgUp and PgDn keys or Up and Down Arrow keys on the keyboard.
如题,在文件内容足够多的时候,屏幕足够不大的时候,就会出现上面描述的问题,这就出现了less
命令。
Linux
系统可以说把少就是多
这个哲学用到了极致,恰如小巧优美的C语言,不该有的功能坚决不给你提供,应该有的也不给你提供,哈哈,比如内存的管理,程序员就是神,你就是神。
命令简介
less - opposite of more # 我觉得这是废话
我嘞个去,什么鬼?这是什么意思,我也知道少的反义词是多,大的反义词是小。
别急,那就看看more的含义吧,不会是 opposite of less
吧。OMG
more - file perusal filter for crt viewing
什么意思,淡定,听我说,在Linux
系统中有三种命令可以用来查阅全部的文件,分别是cat
、more
和less
命令,关于more
的解释主要针对在上古年代的计算机,你不理解crt
也没有关系,毕竟现在已经是Retina
的年代了。
一起看看下面的实例吧。
命令格式
1 | less [参数] 文件 |
与其他命令类似,直接跟上文件名即可。
接下来依旧使用/etc/services来进行示例。
-m 显示类似more命令的百分比
这个是more命令比较好用的一个功能,可以显示目前浏览的百分比。
1 | $ less -m /etc/services |
此时可以在左下角看到,有个百分比。
-N 显示行号
使用-N可以实现cat中-n的效果,显示行号
1 | $ less -N /etc/services |
搜索字符串
在less中,可以比较容易的搜索字符串,比如可以:
- /字符串:向下搜索“字符串”的功能
- ?字符串:向上搜索“字符串”的功能
- n:重复前一个搜索(与 / 或 ? 有关)
- N:反向重复前一个搜索(与 / 或 ? 有关)
其实这些功能或者热键与vim相同。
在用less打开文件后,可以直接输入/number
来搜索nubmer这个字符串,回车后可以看到该字符串高亮显示,这个也是优于more的一点;同样?number
可以反向搜索number字符串。
可以通过-i选项来忽略搜索时的大小写
设置缓冲区的大小
可以通过-b <缓冲区大小> 设置缓冲区的大小,这个一般用于文件很大、巨大、不是一般大的时候,此时你的内容可能不足以承载打开整个文件,比如4G的内存,而你却要打开10G的文件,此时可以通过该选项来设置,默认单位为KB,比如
1 | $ less -b 1024 filename |
即打开1024KB的文件缓冲
编辑less浏览的文件
要编辑一个正在用less
浏览的文件,可以按下v
。你就可以用变量$EDITOR
所指定的编辑器来编辑了: 按下v键来编辑文件,退出编辑器后,你可以继续用less浏览了。
移动
我比较喜欢less
的原因是对于该命令的很多操作都是与vim
相同,而我是一个重度vimer
,so 推荐less
。
说几个比较简单的移动:
j
向下移动k
向上移动g
移动到第一行G
移动到最后一行b
向后翻一页d
向后翻半页u
向前滚动半页y
向前滚动一行空格键
滚动一行回车键
滚动一页
more - 多多益善
more功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上。 more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能 。more命令从前向后读取文件,因此在启动时就加载整个文件。
在查阅文件的时候,我们说过可以用cat命令,不过这个是入门级别的,但凡用了几天Linux的,基本不太会再使用cat,而是另外两个指令,more或者less。这次说一下more,more是在文件的内容一个屏幕装不小的时候使用的。而less是more的升级版本,稍后会介绍。
more
: 文件内容一屏幕装不下的时候使用的
看看为什么用less
命令吧。
more - file perusal filter for crt viewing
看不懂,什么是CRT,莫慌,关于more
的解释主要针对在上古年代的计算机,你不理解crt
也没有关系,毕竟现在已经是Retina
的年代了。
命令格式
less的命令格式与cat一样,可以直接跟上文件名,如下:
1 | less [参数] 文件 |
其中的参数如下所示:
- +n 从笫n行开始显示
- -n 定义屏幕大小为n行
- +/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
- -c 从顶部清屏,然后显示
- -d 提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
- -l 忽略Ctrl+l(换页)字符
- -p 通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
- -s 把连续的多个空行显示为一行
- -u 把文件内容中的下画线去掉
一起看看下面的实例吧,这里以文件/etc/services
为例:
这个文件的开始信息如下:
1 | # /etc/services: |
+n 从第n行开始显示
接下来的命令从第10行开始显示:
1 | $ more +10 /etc/service |
可以看到前面的10行是没有显示的。
-n 定义屏幕大小为n行
这里的含义为定义输出的内容为10行,你的屏幕可能足够大,不过显示的内容只有n行,如下:只显示10行的内容,此时终端可能还会残留以前的内容:
1 | $ more -10 /etc/services |
可以关注一下,此时每次显示的只有10行。
+/pattern 搜寻字符串(pattern)
这个参数用于在文件中搜索字符串pattern,然后在该字符串的前两行之前开始显示。比如搜索number,会显示以下内容:
1 | $ more +/number /etc/services |
可以留意,此时显示的内容,第三行即包含搜索的字符串。
其他
除以上介绍的以外,还有比较容易理解的以下参数:
- -c 从顶部清屏,然后显示
- -p 通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
- -s 把连续的多个空行显示为一行
- -u 把文件内容中的下画线去掉
不可狗尾续貂的tail
tail
命令用来查看文件尾部的n行,如果没有指定的n,默认显示10行。
命令格式:
1 | $ tail [option] [filename] |
参数option比较常用的如下所示:
-f
循环读取-c <数目>
显示的字节数-n <行数>
显示文件的尾部 n 行内容
常规使用
假定文件text.txt有20行,从1-20,默认情况下的使用如下:
1 | $ tail text.txt |
显示N行
可以通过-n参数来只显示N行,而不是默认的10行,比如15行,如下:
1 | $ tail -n 15 text.txt |
从第N行显示
此时如果希望从第N行显示,而不是显示N行,可以通过下面的参数,比如从第15行显示
1 | $ tail -n +15 text.txt |
按照字符显示
如果希望显示文件的最后几个字符,比如6个,如下:
1 | $ tail -c 6 text.txt |
特别赞的一个实时更新的功能
参数 -f
常常用于查阅正在改变的日志文件。如下面👇所示:
1 | $ tail -f filename |
如果filename的内容在增加,那么显示在屏幕上的内容就会一直更新。
查看目录命令pwd
pwd
命令的作用是查看当前目录,没有参数,输入后回车即可显示当前绝对路径。
官方定义为:
pwd - print name of current/working directory
所以pwd
是Print Working Directory第一个字的缩写。
唯二需要了解的参数如下:
-L
,--logical
:打印逻辑路径,与pwd
一致-P
,--physical
:打印物理路径,这里可以从超级链接直达原处
实例展示
此时比如我们进入一个目录,然后在打印出来,如下:
1 | $ cd /etc/sysconfig/network-scripts/ |
可以看到pwd将输出完全路径
逻辑与物理路径
比如如下:
1 | $ pwd |
可以看到此时的路径在/opt/test/里面有两个目录source和dir,其中dir链接到source里面的dir。
接下来对比一下-L和-P的区别。
1 | $ cd dir |
从上面的输出可以发现,-P
参数会显示文件最原始的路径;而-L
则是逻辑上的路径。
Linux 的 echo 命令
echo
命令用于在终端设备上输出字符串或变量的值,类似于Python的print
和C语言的printf
,是Linux系统中最常用的命令之一。
其中输出字符串主要在shell脚本中使用,常用的还是输出变量的值。
命令格式为:echo [参数] [字符串]
其中常用的参数为:
- -n 不输出结尾的换行符
- -e “\a”发出警告音
- -e “\n”换行,光标移至行首
- -e “\r”光标移至行首,但不换行、主用用在打印循环的情况下
几个示例
输出一段字符串:
1 | $ echo "Hello Linux" |
输出变量提取后的值:
1 | $ echo $PATH |
一般使用在变量前加上$符号的方式提取出变量的值,例如:$PATH,然后再用echo命令予以输出。或者直接使用echo命令输出一段字符串到屏幕上,起到给用户提示的作用。
其中的PATH与Windows的环境变量类似
几个Linux命令来输出:
1 | $ echo `date` |
查询上一次的执行结果
1 | $echo $? |
$?
是Shell中的一个特殊变量,表示上一条命令的退出状态,0表示成功。
Linux ln 命令
ln
命令是一个非常重要的命令,可以为某一个文件或目录在其他不同的位置建立一个同步的链接。部分功能与Windows的快捷方式类似。但更加强大。
官方解释为:
ln - make links between files
当我们需要在不同的目录,或者不同的工程,甚至是不同的人员需要用到同一个文件的时候,此时不需要每个位置都通过cp
来拷贝一份,因为在源文件更新的时候,这个文件是不会同步更新的 。而此时ln
命令就不一样了,通过该命令链接到源文件或目录,不仅可以不用占用重复的更多的磁盘空间,还可以同步更新。NICE。
使用格式
1 | $ ln [参数][源文件或目录][目标文件或目录] |
其中参数的格式为
- -b ,或 like –backup but does not accept an argument
-f
,或--force
: 强制执行,这个在链接已经存在的情况下必用-s
,或--symbolic
:创建符号链接
在Linux文件系统中,又有两种链接类型:
- 硬链接(hard link)
- 软链接(symbolic link):又称符号链接,类似于Windows的快捷方式
硬链接会复制一份相同大小的源文件,而软链接是一种特殊的文件,占用很小的磁盘空间。
创建硬链接
默认情况下,不加任何参数,创建的是硬链接,如下,创建源文件a.log的硬链接a1.log:
1 | $ ln a.log a1.log |
这个时候修改源文件a.log的部分内容,可以看到硬链接也同步更新。
1 | $ vim a.log |
创建软链接
如果需要创建软链接,就需要参数-s
,如下,创建源文件a.log的软链接a1.log:
1 | $ ln -s a.log a1.log |
这个时候修改源文件a.log的部分内容,可以看到软链接没有更新,不过其指向的内容依然更新了。
1 | $ vim a.log |
此时可以看到,对于软链接a1.log而言,其仅为一个符号链接,用file
看一下:
1 | $ file a1.log |
删除源文件后的情况
此时通过ln创建a.log的硬链接ah.log和软链接as.log,然后看一下如果删除源文件会发生什么情况。
1 | # 创建软硬链接 |
可以看到如果删除了源文件,硬链接不受影响,但是软链接已经提示链接损坏了。
强制更新软链接
在软链接存在的情况下,如果再创建一个同名的,会报错,此时就需要强制创建了,加上-f
参数即可。
1 | $ ln -s b.log as.log |
文件权限设置命令 chmod
文件权限指的是文件是否可以执行、写入、读取等操作。
而Linux/Unix的文件存取权限分为三级 : 文件所有者、用户组及其他,分别使用以下字母来表示:
- u:所有者
- g:用户组
- o:其他用户
如下图所示,每个级别都可以设置为rwx三种权限 。
该命令官方定义为:
chmod - change mode
所以可以通过chmod
来控制文件如何被他人所存取。
使用的语法如下所示:
1 | $ chmod [-cfvR] [--help] [--version] mode file... |
其中mode权限设定的格式如下 : [ugoa] [+-=] [rwxX]
其中u表示该文件的拥有者,g表示与该文件的拥有者属于同一个群体(group)者,o表示其他以外的人,a表示这三者皆是。
+
表示加权限、–
表示减权限、=
表示设定唯一权限。r
表示可读取,w
表示可写入,x
表示可执行,X
表示只有当该文件是个子目录或者该文件已经被设定过为可执行。-R
: 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
对于chmod的使用而言,只有文件所有者和超级用户可以修改文件或目录的权限。
具体的方法为可以使用符号模式或者绝对模式来进行操作。
而我比较喜欢用的是绝对数字模式,比较粗暴简单。
符号模式
使用符号模式需要考虑多个因素,其中包括用户类型,操作符 和设定权限。
who | 用户类型 | 说明 |
---|---|---|
u |
user | 文件所有者 |
g |
group | 文件所有者所在组 |
o |
others | 所有其他用户 |
a |
all | 所用用户, 相当于 ugo |
operator 的符号模式表:
Operator | 说明 |
---|---|
+ |
为指定的用户类型增加权限 |
- |
去除指定用户类型的权限 |
= |
设置指定用户权限的设置,即将用户类型的所有权限重新设置 |
permission 的符号模式表:
模式 | 名字 | 说明 |
---|---|---|
r |
读 | 设置为可读权限 |
w |
写 | 设置为可写权限 |
x |
执行权限 | 设置为可执行权限 |
绝对数字模式
chmod
命令可以使用八进制数来指定权限。文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者的读、写、执行权限,用户组的读、写、执行以及其它用户的读、写、执行。历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。比如下面的0-7分别表示各自的权限定义。
No | 权限 | rwx | 二进制 |
---|---|---|---|
7 | 读 + 写 + 执行 | rwx | 111 |
6 | 读 + 写 | rw- | 110 |
5 | 读 + 执行 | r-x | 101 |
4 | 只读 | r– | 100 |
3 | 写 + 执行 | -wx | 011 |
2 | 只写 | -w- | 010 |
1 | 只执行 | –x | 001 |
0 | 无 | — | 000 |
如表所示:
- 对于7而言就表示所有者的权限为可读、可写、可执行,也就是对应的八进制为111,所以就是7;
- 而对于 5而言,表示所有者的权限为可读、可执行,对应的八进制为101,所以就是5;
其他类似。
实例更改为全部可读
接下来将文件 a.c 设为所有人皆可读取 ,有三种方式可以使用,如下,分别为 :
chmod ugo+r filename
chmod a+r filename
chmod 444 filename
具体如下所示:
通过方法1:
1 | # 默认设定为没有任何属性 |
通过方法2:
1 | # 默认设定为没有任何属性 |
通过方法3:
1 | # 默认设定为没有任何属性 |
设置用户及组可读写,其他用户无法写入但可以查看
接下来继续把文件 a.c设置为用户 和组可以读写,而其他 用户无法写入但是 可以查看 。
使用符号模式如下:
1 | $ ll |
使用数字模式如下:
1 | $ ll |
设定为所有人只有可执行权限
此时不管文件的权限是什么,因为只具有可执行权限,所以符号模式可以使用**=**,而数字模式只需要1即可,如下:
1 | $ chmod a=x filename |
所以对于只有可执行权限的文件,是无法执行读取或者写入操作的,这也保证了文件的安全性。
炫技 - TODO
其实对于每个文件或者目录而言,除了rwx权限,还有 一个权限位,这个权限为一般为特殊权限。
模式 | 名字 | 说明 |
---|---|---|
X |
特殊执行权限 | 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行 |
s |
setuid/gid | 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限 |
t |
粘贴位 | 设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位 |
若用 chmod 4755 filename 可使此程序具有 root 的权限。
更多说明
命令 |
说明 |
---|---|
chmod 4755 *file* |
4 设置了设置用户ID位,剩下的相当于 u=rwx (4+2+1),go=rx (4+1 & 4+1)。 |
find path/ -type d -exec chmod a-x {} \; |
删除可执行权限对path/以及其所有的目录(不包括文件)的所有用户,使用’-type f’匹配文件 |
find path/ -type d -exec chmod a+x {} \; |
允许所有用户浏览或通过目录path/ |
极具归属感的 - chown
Linux chown
命令用于设置文件所有者和文件关联组的命令。
官方的定义为:
chown - change file owner and group
Linux/Unix 的有个理念就是一切皆文件,而对于每个文件也是如chmod
所述,均拥有所有者。
此时就可以利用 chown
指定文件的拥有者或者指定的用户或组,用户可以是用户名或者用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改变权限的文件列表,支持通配符。
不过需要注意的是 chown
需要超级用户 root 的权限才能执行此命令,或者使用sudo
也可以。
使用语法
使用语法如下:
1 | $ chown [option] [user[:group]] file... |
其中user为新的文件拥有者的用户名或者ID,group为新的文件拥有者的用户组名或ID****。
并且可以通过--referenc=RFILE
选项来设定希望修改的文件和目录。
其他的选项可以为: :
-c
: 与-v
类似,不过只显示更改的信息-R
: 递归地处理指定的目录以及其子目录下的所有文件
通用实例
最简单的使用方式应该就是指定用户和用户组了,如下:
1 | $ ll |
上面的命令将把a指定为用户user1,组group1。注意user1和group1必须存在,不然会提示无效的用户或者组。
更新组而不更新用户
这个选项一般用在,希望把某个用户的文件共享到一个组,此时的方法如下:
1 | $ sudo chown :newgroup filename |
此时的用户所有者不变,而仅仅更改了文件所属组。
提示更新
1 | $ sudo chown -c user1 a b c d |
从这个例子可以看出,对于-c和-v的区别,-v全部显示,而-c仅仅显示更新的部分。
递归处理文件或文件夹
1 | $ sudo chown -R user:group file directory |
此条命令将递归地将文件file和目录directory及其子目录的文件更新为user用户拥有,group组拥有。
有所依靠的chgrp
.. code::
鸿鹄志、向炎天。
宋 刘克庄《贺新郎·杜子昕凯歌》
Linux的chgrp
命令用于变更文件或者目录所属的组group。
这里的变更不仅限于本人的组,只要用户属于的组,均可以使用chgrp
更改相应的权限而不是必须使用管理员权限。
很多权限的操作可以与chmod
来交叉。比如如果希望文件只有本组成员访问,可以通过chmod 770 file/directory
,此时就涉及到组的概念了。
官方定义为:
chgrp
- change group ownership
语法为:
1 | $ chgrp [OPTION]... GROUP FILE... |
常用的几个参数为:
--reference=RFILE
: 参考指定文件进行所属组更换-R, --recursive
:递归处理,将某个目录的所有文件均更改用户组
默认用法
最简单的使用为将文件file归属到组group,使用方法为:
1 | $ chgrp group file |
此时的file数组组group,file1属于组group1。
更改文件夹的所属组
对于文件夹而言,就需要使用-R
参数来递归实现了,不然会报错的。
1 | $ chgrp -R group1 directory1 |
根据指定文件来修改组
这个参数比较有趣,也比较高效,如果希望某个用户的组权限与另外一个文件一致,此时--reference
强势出现
1 | $ chgrp --reference=ref_file stage_file |
该命令执行后,stage_file的权限将与ref_file的组权限一样。
Linux的 tee 命令
Linux的tee
命令可以将输出输出到终端的同时写入文件。
这个命令对于既想试试看到输出保存到文件稍后查看的操作十分有用。
官方定义为:
tee
- read from standard input and write to standard output and files
语法
具体的使用方法为:
1 | $ tee [OPTION]... [FILE]... |
参数:
-a, --append
追加到现有文件的后面,而非覆盖它.-i, --ignore-interrupts
忽略中断信号。
一般使用
比如最简单的想查看一下当前有哪些文件并保存到一个日志,如下:
1 | $ ls |
可以看到tee
在保证同时显示在终端上还输出到了文件 list.log中。
同时保存到多个文件
tee
当然也是可以同时输出到多个文件的,比如:
1 | $ ls |
与自己对话
与自己对话如何呢,或者叫做复读机?
tee
命令直接跟文件的话,会等待输入,并同步进行输出到终端和文件的操作。
1 | $ tee test.log |