自行整理,初学者的学习总结与记录。
目录的相关操作
1.一些必须记下来的特殊目录:
.代表此层目录
..代表上一层目录
—代表前一个工作目录
~代表"目前用户身份的主文件夹"
~account 代表account这个用户的主文件夹 (account为账号名称)
特别的,使用ls -al命令查询根目录的上层与此层目录,仔细查阅,两个目录的属性,权限完全一致。代表根目录的上一层目录与本身是同一个目录。
2.常见处理目录的命令
cd:切换目录
pwd:显示当前目录
mkdir:新建一个新的目录
rmdir:删除一个空的目录
-
cd(切换目录)
不论是Linux还是windows操作系统,cd都是非常常用的命令。
cd:切换工作目录的命令。注意的是,cd名称与目录名称之间存在一个空格。如果是利用相对路径的写法,必须要保证目前的路径才能正确去到想去的目录。否则必须输入完整路径。
另外提醒,linux的默认命令行模式具有文件补齐的功能,要经常使用Tab键快速完整的输入目录,可避免摁错键盘输错字。 -
pwd(显示目前所在目录)
执行语句
pwd [-p] //参数-p:显示出当前路径,而非连接路径
- mkdir(新建新的目录)
执行语句
mkdir [-mp] 目录名称
参数:
-m:配置文件案的权限
-p:帮助你直接将所需要的目录(包含上层目录)递归创建起来
使用mkdir命令可以创建新目录,但在默认的情况下,目录要一层一层创建才行。但是加上参数-p,系统可自动帮你自行创建多层目录。另外,上一篇里总结了关于特殊权限的知识点。这里的参数-m可以强制给予一个新的目录的相关权限。例如:-m 711(权限对应分数)。如果没有给-m参数,就为默认权限(umask)。具体参考上一篇博客。
- rmdir(删除"空"的目录)
执行语句
rmdir [-p] 目录名称
参数:
-p: 连同上层“空的”目录也一起删除
如果想要删除就有的目录,rmdir命令即可。但对象为“空”的目录。也就是说,目录要一层一层删除,同时被删除目录里面不能包含别的目录,即为”空”目录。
关于执行文件路径的变量:$PATH
查看文件属性的命令ls的完整文件名为/bin/ls,那为什么可以在任何地方执行这个命令呢,这是因为环境变量PATH的帮助。
当执行ls命令的时候,系统会依照PATH的设置去每个PATH下的目录查询文件名为ls的可执行文件,如果查询到含有多个文件名为ls的执行文件,以先查询到的同名命令被执行。
PATH变量的内容是有一堆目录构成的,每个目录中间用冒号(:)隔开,每个目录有顺序之分。
1个例题来增进理解。
1.假如你是root,如果将ls由/bin/ls一定成/root/ls,然后自己本身也在root目录下请问:
(1)能不能直接通过输入ls来执行.
(2)若不能,该如何执行这个命令?
(3)若要直接输入ls即可执行,又该如何进行?
答:
首先,该例题重点是将某执行文件移动到非正规目录去:
mv /bin/ls /root
(mv为移动)
(1)接下来无论在哪个目录下面输ls,都不能执行了。
因为root这个目录并不在PATH指定的目录中。所以即使在该目录下,也无法查询。
(2)因为ls存在于/root下面,并未被删除。
可通过使用绝对路径或相对路径来指定这个执行文件:
/root/ls //使用绝对路径指定该文件名。
或者
./ls //因为在/root的目录下,就用./ls指定即可。
(3)解决思路:将/root加入PATH当中:
PATH="$PATH":/root
那么,为什么PATH查询的目录不加入本目录(.)?加入本目录的查询应该很好吧?
确实,加入本目录后,我们就能在命令所在目录进行命令的执行了,但由于工作目录非固定,经常会使用cd来切换,所以能执行的命令变动(因为每个目录下可执行文件都不同啊),对用户来说并非好事。
更有可能的是,碰见一个坏心用户在/tmp下做了一个窃取用户数据命令,由于这是大家都可写入的环境,如果你以root的身份来执行这个命令,岂不是就凉凉了。再严重的,这个命令万一是常用的ls,后果是很糟糕的。
所以,安全起见,最好不要吧.加入PATH的查询目录中。
以上各种例子总结下来就是:
- 不同用户身份默认的PATH不同,默认能够随意执行的命令也不同
- PATH是可以修改的,所以一般用户还是可以通过修改PATH来执行某些位于/sbin或/usr/bin下的命令来查询
- 使用绝对路径或相对路径直接指定某个命令的文件名来执行,会比查询PATH来得准确。
- 命令应该放置到正确的目录下,执行方便
- 处于安全考虑,本目录.最好不要放到PATH中去。
文件目录与管理的各种命令
这些基本命令一定要记住哈
- 查看文件与目录ls
话不多说,直接上整理好的各参数对应查询到的类型文件:
-a | 全部文件,连同隐藏文件 |
---|---|
-d | 仅列出目录本身 |
-f | 直接列出结果,而不进行排序(ls会默认以文件名排序) |
-F | 根据文件,目录等信息给与附加数据结构。(*代表可执行文件,/代表目录 |
-h | 将文件容量以人类易读的方式(例如GB,KB) |
-i | 列出inode号码 |
-n | 列出UID于GID,而非用户与用户组名称 |
-r | 将排序结果反向输出 |
-R | 连通子目录内容一起列出来 |
-S | 以文件容量大小排序,而不是文件名 |
-t | 以时间排序 |
-full-time | 以完整时间模式(包含年月日输出) |
–color=auto | 让系统自行依据设置来判断是否给与颜色 |
解释一下参数-i列出的inode号码。
inode的内容主要记录文件的属性以及该文件实际数据是放在那几号block内。记录的文件数据包括有文件的访问模式,该文件的所有者与组,文件大小,创建或状态改变时间,最近一次读取,修改时间,内容指向等等。
-
复制删除与移动
在Linux系统中,传统的Ctrl+c和Ctrl+v已经不管用了~
复制文件:cp(copy)命令,还可以创建快捷方式
删除:rm
移动:mv(move缩写) -
复制文件或目录——cp
cp [参数] 源文件 目标文件
cp [options] source1 source2 ,,,,,,directory
参数:
-a:相当于-pdr的意思。
-d:复制链接文件
-f:为强制的意思,若目标文件存在且无法开启,则删除后再开启一次。
-l:进行硬连接的连接文件创建,而非复制文件本身
-p:连通文件的属性一同复制过去,而非使用默认属性。
-r:递归持续复制。用于目录的复制行为(hen常用),但文件目录权限可能会被改变。
-s:复制成为符号链接文件,即快捷方式文件(软连接)。
注意的是,cp这个命令非常重要,不同身份者执行这个命令会有不同的结果产生。一般来说去复制别人的数据,希望复制过来是自己的,前提是权限允许。所以,在默认条件下,cp的源文件与目的文件的权限是不同的,目的文件的所有者通常会是命令操作者本身。
正因为这个特性,我们在面对密码文件等特殊文件,就不能直接用cp来复制,必须加上-a或-p等可以完整复制文件权限的参数才行。
- rm(移动文件或目录)
命令行:
rm 参数 文件或目录
参数:
-f:忽略不存在的文件,不会出现警告信息
-i:互动模式,在删除前会询问用户是否操作
-r:递归删除。(慎用!!)
- mv(移动文件与目录,或更名)
命令行:
mv 参数 source destination
参数:
-f:如果目标文件已经存在,不询问,直接覆盖。//类似于复制一个图片或文件到一个地方,但有同名文件存在,不会询问是否替换或跳过
-i:会询问是否覆盖
-u:若目标文件已经存在,且source比较新,才会更新