文件系统相关
目录文件就是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 7月 2 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也能指出是否是别名。
Comments
请在后台配置评论类型和相关的值。