Linux学习(3)——文件相关&命令介绍

Linux文件与目录管理

参考博客:http://www.92csz.com/study/linux/6.htm

文件路径

Linux系统中存在绝对路径和相对路径。

  • 绝对路径:路径的写法一定由根目录”/“开始,如”/usr/src/linux-headers-4.10.0-28”
    image.png

  • 相对路径:路径的写法不是由根目录”/“开始。例如,首先用户进入到/然后再进入到home,命令为cd home;然后cd test,此时用户所在的路径为 /home/desmon。第一个cd命令后跟 /home,第二个cd命令后跟desmon,并没有斜杠,这个desmon是相对于/home目录来讲的,所以叫做相对路径。
    image.png

命令介绍

pwd: 打印当前所在目录
image.png

cd: 进入到某个目录。除了可进入绝对路径和相对路径外,./指当前目录,../指当前目录的上一级目录。
image.png

mkdir: 创建目录(make directories)。其语法为mkdir [-mp] [目录名称],其中-m参数为指定要创建目录的权限,-p参数则为递归创建目录,即使上一级目录不存在。如果提示目录存在,那么加上-p参数则不会报错。如果为mkdir aa bb,则指创建aa和bb两个目录。
image.png
image.png

rmdir: 删除目录(remove directories)。其-p参数与mkdir类似,其作用是将上级目录一起删除。例如,新建目录mkdir -p d1/d2/d3 ,rmdir -p d1/d2/d3相当于是删除了d1,d1/d2, d1/d2/d3。而如果要删除的目录中还有目录,则会提示该目录不为空不可删除。因此我们需要该用rm命令。
image.png

rm: 删除目录或文件。rmdir命令只能删除目录而不能删除文件。

  • -f参数:强制删除,如果不加此参数,则当删除一个不存在的文件时会报错。
  • -i参数:当用户删除一个文件时提示用户是否真的删除。
  • -r参数:当删除目录时,需要添加此选项。可删除不为空的目录。
  • -rf参数:可合用,删除文件或目录。

which: 用来查找一个命令的绝对路径。
image.png

alias: 用来设置指令的别名。语法alias [别名]=[指令名称],例如 alias rm=’rm -i’。

环境变量PATH

我们从上面的which命令实例可以知道,命令是有绝对路径的。但是为什么我们输入很多命令时,都是直接打出命令,而没有去使用对应的绝对路径?这就是环境变量PATH在起作用。输入echo $PATH,echo为打印,PATH前的$表示后面接变量。
image.png

如果我们将ls移动到/root底下,在/root需要使用ls,但却无法使用,原因便是PATH没有/root目录。因此可以直接将/root的路径加入PATH当中: PATH=”$PATH”:/root;而是使用绝对路径来执行。

命令介绍(续)

ls: 查看某个目录或某个文件,是list的缩写。其他参数可man ls查看。

  • -a参数:列出全部档案,包括隐藏的。linux文件系统中同样也有隐藏文件。这些隐藏文件的文件名是以.开头的。
  • -l参数:详细列出文件的属性信息,包括大小、创建日期、所属主所属组等等。ll命令等同ls -l。

cp: copy的简写,即拷贝。格式为cp [选项] [来源文件] [目的文件]。

  • -d参数:涉及到一个“连接”的概念。连接分为软连接和硬连接,软连接与windows中的快捷方式类似。如果不加这个-d 则拷贝软连接时会把软连接的目标文件拷贝过去,而加上后,其实只是拷贝了一个连接文件(即快捷方式)。
    image.png
  • -r参数:拷贝目录必须加。
  • -i参数:如果遇到一个存在的文件,会问是否覆盖。
    image.png

touch: 看字面意思是摸一下,如果有这个文件,则会改变文件的访问时间,如果没有这个文件就会创建这个文件。

echo: 打印。如上图,我们可以使用echo来写文件,比如上面所echo的内容”abc”和”edf”并没有显示在屏幕上,而是通过”>”重定向到了文件111和222中(即把前面产生的输出写入到后面的文件)。

mv: 移动,move的简写,格式为 mv [选项] [源文件] [目标文件]。

  • -i参数:当目标文件存在时会问用户是否覆盖。
  • -u参数:当目标文件存在时才会生效,如果源文件比目标文件新才会移动,否则不做任何动作。
    image.png
    image.png

cat: 查看一个文件的内容并显示在屏幕上。-n参数显示行号,-A显示所有东西(包括特殊字符)。
image.png
注意”>>”和”>”都是重定向,前者为追加内容,后者为覆盖。
image.png

tac: cat的反写,反向打印文件的内容到屏幕上。
image.png

more: 阅读长文件,格式为more [文件名],按空格读取下一页,按Q可退出阅读。更多内容可参考:https://linux.cn/article-2647-1.html

less: 作用与more相同,但还可以上翻。空格键同样可以翻页,而按”j”键可以向下移动(按一下就向下移动一行),按”k”键向上移动。

head: head后直接跟文件名,则显示文件的前十行。如果加–n选项则显示文件前n行。

tail: 和head一样,后面直接跟文件名,则显示文件最后十行。如果加-n选项则显示文件最后n行。-f选项动态显示文件的最后十行。

切换为root用户: sudo su,输入密码后即可,退出输出exit。

文件的所有者以及所属组

一个linux目录或文件都有一个所有者和所属组。所有者,即文件的拥有者,而所属组,即该文件所属主所在的一个组。这样做可以保证文件的安全,即不同所有者所拥有的文件是不能相互查看的。那么,如果我们想要设置可以提供给usr1和usr2共同查看的文件test呢?此时,需要“所属组”。即创建群组users,使得usr1和usr2同属于该组,设置test的所属组为users,那么usr1和usr2都可以访问test。

Linux文件属性不仅规定了所有者和所属组,还规定了所有者(user)、所属组(group)以及其他用户(others)对该文件的权限。通过ll可查看这些属性。
image.png

linux文件属性

上图中,通过ll指令查看目录文件时,共显示了9列内容。

第1列,包含的东西有该文件类型和所有者、所属组以及其他用户对该文件的权限,共十位。
(1)第一位用来描述文件类型。

  • d表示该文件为目录;
  • -表示该文件为普通文件;
  • l表示连接文件(linux life),例如软连接;
    image.png
  • b表示块设备文件,比如磁盘分区;
    image.png
  • c表示串行端口设备,例如键盘、鼠标;
  • s表示套接字文件(socket),用于进程间通信;
    (2)后面9位,每三个为一组,均为rwx三个参数的组合。其中r代表可读,w代表可写,x代表可执行。前三位为所有者(user)的权限,中间三位为所属组(group)的权限,最后三位为其他非本群组(others)的权限。举例:
    一个文件的属性为-rwxr-xr—,它代表的意思是,该文件为普通文件,文件所有者可读可写可执行,所属组可读不可写可执行,其他用户只可读。

第2列,表示为连接占用的节点(inode),若为目录时,通常与该目录底下还有多少目录有关系。

第3、4列分别表示文件所有者和所属组。

第5列表示文件大小。(字节单位,ll -h可更清楚看文件大小)

第6列、第7列和第8列为该文件的创建日期或者最近的修改日期,分别为月份日期以及时间。

第9列,文件名。如果前面有一个. 则表示该文件为隐藏文件。

更改文件权限

更改文件的权限,即更改所有者、所属组以及他们对应的读写执行权限。(应该root用户才可修改)

更改所属组chgrp

语法:chgrp [组名] [文件名]
image.png

更改所有者chown

语法:chown [-R] 账户名 文件名 or chown [-R] 账户名:组名 文件名
这里的-R选项只作用于目录,作用是级联更改,即不仅更改当前目录,连目录里的目录或者文件全部更改。
image.png
image.png
image.png
聪明的你肯定知道了,原有的test文件夹是我在以desmon用户登录时创建的,因此其所有者和所属组都是desmon;而test2文件是root用户创建的,因此其所有者和所属组都是root;之后使用chown修改test文件夹,最后用-R选项级联修改到了test2。

改变读写执行权限chmod

在linux中为了方便更改这些权限,linux使用数字去代替rwx,具体规则为r: 4 w:2 x:1 -:0(二进制)。如,-rwxrwx—-用数字表示就是770。

chmod语法:chmod [-R] xyz 文件名(这里的xyz表示数字,-R表示级联修改)
image.png

另外,chmod也可以支持显式的修改权限,基本上就九个属性分别是user/group/others三种,那么我们就可以用u/g/o来代表三种的属性。举例:
image.png
另外,其中的=也可以替换成+或-,表示增加或删除某个权限。

权限值限定

默认情况下,目录权限值为766,普通文件权限值为644。该值由umask限定。umask语法:umask xxx (这里的xxx代表三个数字),查看umask值只要输入umask然后回车。
root的umask预设是0022,含义规则如下:

1)若用户建立为普通文件,则预设“没有可执行权限”,只有rw两个权限。最大为666(-rw-rw-rw-)
2)若用户建立为目录,则预设所有权限均开放,即777(drwxrwxrwx)

umask数值代表的含义为,上边两条规则中的默认值(文件为666,目录为777)需要减掉的权限。所以目录的权限为(rwxrwxrwx) – (——w—w-) = (rwxr-xr-x),普通文件的权限为(rw-rw-rw-) – (——w—w-) = (rw-r—r—)。

umask的值可自定义修改,预设情况下,root的umask为022,而一般使用者则为002,因为可写的权限非常重要,因此预设会去掉写权限。

特殊属性相关指令

chattr:修改文件/目录的特殊属性
lsattr:列出文件/目录的特殊属性

linux下搜索文件

which:用来查找可执行文件的绝对路径。需要注意的一点是,which只能用来查找PATH环境变量中出现的路径下的可执行文件。

whereis:通过预先生成的一个文件列表库去查找跟给出的文件名相关的文件。

locate:类似于whereis,也是通过查找预先生成的文件列表库来告诉用户要查找的文件在哪里。

find:最为常用。语法:find [路径] [参数]。参数仅介绍根据文件名搜索对应的文件,如下:
image.png

linux文件系统

windows的系统格式化硬盘时会指定格式,fat或者ntfs。目前的linux系统基本采用Ext3,为日志文件系统。Linux文件系统在windows中是不能识别的,但是在linux系统中可以挂载的windows的文件系统。

有些linux发行版例如SuSE默认的文件系统为reiserFS,ReiserFS的优势在于,它是基于B*Tree快速平衡树高效算法的文件系统,具有高效的磁盘空间利用和独特的搜寻方式。

linux文件类型

  • 正规文件:一般类型文件,分为纯文字文件(可用cat,more,less直接查看)和二进制文件。
  • 目录
  • 连接档(link):类似windows下的快捷方式。这种文件在linux中很常见,日常的系统运维工作中用的很多。
  • 设备档(device):与系统周边相关的一些档案,通常都集中在/dev这个目录之下。通常又分为两种:区块 (block) 设备档:储存数据,以提供系统存取的接口设备,简单的说就是硬盘。例如一号硬盘的代码是/dev/hda1,其第一个属性为”b”;字符(character) 设备档:即是一些串行端口的接口设备,例如键盘、鼠标等等,第一个属性为”c”。

早期Unix系统文件名最多允许14个字符,而新的Unix或者linux系统中,文件名最长可以到达 256 个字符。

软连接和硬连接

这块就不摘抄了,直接阅读原博客内容更为清晰。链接在最开头。涉及到的指令为ln。
语法: ln [-s] [来源文件] [目的文件]。ln 常用的选项就一个-s ,如果不加就是建立硬连接,加上就建立软连接。