01月02, 2019

Linux文件系统

文件系统相关

目录文件就是Windows中常说的文件夹,文件夹也是一种特殊的文件。所以文件夹的名字和普通文件也不能重名!通常文件夹被称作目录(directory)更为贴切些,因为一般都用directory的缩写d来表示文件夹。(文件包括普通文件和目录文件)

新建目录mkdir

mkdir test

会新建一个目录test。

常用选项 描述
p 当要新建的目录已经存在时不报错

进入目录cd

cd是change directory的缩写

cd document 进入document这个文件夹。

特殊的目录

符号 描述
/ 根目录
用户目录
- 刚才所在目录
. 当前目录
.. 上一#Ω级目录

切换到某一目录的时候都有相对路径和绝对路径两种表达。

比如当前所在目录为/usr,切换到/usr/local。可使用如下两个命令:

cd /usr/local
cd ./local

第二个命令可简写为cd local 然后再回到/usr目录可使用如下命令:

cd /usr
cd ..
cd -

直接cd不加参数也相当于执行了cd ~,这是进入宿主目录的快捷方式

cp

复制文件。 复制目录时要加上-r或-a选项。

cp -r test/ test2/
cp -a test/ test2/

此时若不存在目录test2,那么会新建。

ls

ls为list的意思。可以列出当前目录的各种信息。 默认是列出子文件,子目录的信息。且会对结果排序,并加色彩高亮。

选项

常用选项 描述
a all,可以显示出全部文件,包括隐藏文件
d 显示当前目录自身的信息,而不是列出子目录,子文件的信息
F 显示信息的时候加上flag标识
f 关闭ls --color,打开aU选项
h human-readable与l联用,将文件大小(byte)改为更可读的效果(K,M)
l long,可以列出完整的信息
U 不排序,按条目在目录项中的顺序列出

使用时比如ls -l,也可以组合多个参数,比如ls -al

-F

文件类型 flag标识
可执行文件 *
符号链接 @
目录文件 /

-l

显示的完整信息,比如

drwxr-xr-x  8 jelly jelly      4096  72 11:51 document/

注意时间为创建时间,而非最后访问或修改的时间。第二个字段8为document目录所包含的link(目录项)的数量。 因为所有目录都会有 . 和..这两个目录,所以实际document所包含的子目录为6个。

有个很常用的命令ll,Ubuntu中这是ls -alF的别名。

chmod

chmod [who][opt][mode] 文件/目录名
who u g o a
描述 文件所有者 同组用户 其他用户 所有用户


opt + - =
描述 添加某一权限 取消某一权限 赋予给定权限,取消原权限


权限 描述
r
w
x 执行
X 只有目标文件对某些用户是可执行的或该文件是目录才追加x属性
s 在文件执行时把进程的属主或组ID置为该文件的属主。
t 设置粘着位(sticky bit),防止文件或目录被非属主删除

s的用法是u+s,g+s。 当用户身份变化时,即使该文件对其他用户无执行权限,也会执行。

可以使用chmod 数字来改权限。 r、w、x分别为4,2,1。没有权限则为0,三位相加算作一位。 对于s,t,是第四位。写的时候在最开始位置,这一位的取值可位4,2,1。

  • 4.执行时设置用户ID。
  • 2.执行时设置用户组ID。
  • 1.设置粘着位t。

比如:chmod 4755 file

chown

改变文件所有者

chown guodong a.c
chown guodong.guodong a.c
chown guodong:guodong a.c

改变所有者,第二个第三个改变所有者及所有组。

另外有命令chgrp用来修改文件所有组。

选项

  • [x] h

默认情况下,修改符号链接的所有者,实际是在修改它所引用的文件。 -h选项就会指定修改的是符号链接而非所引用的文件。

mv

mv为move的意思。

mv a.c project/

移动文件a.c到project目录下。

mv Qt/ software/

因为目录文件也是文件,所以目录名后面的/可以省略。

注意!如果存在software文件夹,那么上述命令将该文件夹移动的software文件夹下面,如果不存在的话,那么上述命令只会完成将Qt文件夹重命名为software的操作。

修改Linux下文件名

简单方案----mv

mv a.c  b.c

rename命令不是这样用的,会涉及正则表达式,简单地重命名rename会显得繁琐 rename的写法用了Perl的语法 复杂但却能更好地批量修改

批量修改----rename

我的文件夹下有好几个实验报告的doc文档。命名如:南昌大学实验报告1.doc,南昌大学实验报告2.doc……

现在我想把它们文件名中的南昌大学改成操作系统

rename 's/南昌大学/操作系统/' *.doc

前提是我这文件夹里并无其他的doc文档。这里的rename 使用了类sed的语法。两个参数,第二个参数是目标文件,这不多说。 第一个参数是规则,其中的s表示的是替换。然后三个斜杠内含两个字符串,指的就是把前面的字符串替换为后面的。

链接(link)

link分为两种符号链接和硬链接

符号链接

ln -s ~/document/readme.txt readlink.txt

在当前目录下建立一个符号链接readlink.txt指向用户的document目录下的readme.txt

当使用ls -F查看时,readlink.txt会显示

readlink.txt@

注意,如果你的源路径是相对路径,那么当你移动该符号链接的时候,链接可能会失效。

硬链接

ln不加参数就是硬链接,硬链接是再添加一个指向原来inode的文件。硬链接不能链接目录。如果硬链接指向的原文件被删除,那么硬链接不会变成无效链接。 而符号链接会无效。

查看文件最后修改时间

stat 文件名  

查看命令的所在位置

which java
which adb
type java

which可以显示java,adb的所在位置 type可以显示是shell的内部命令还是外部命令。外部命令会指出所在位置。 type也能指出是否是别名。

本文链接:https://901web.com/post/Linux文件系统.html

-- EOF --

Comments

请在后台配置评论类型和相关的值。