linux文件和目录
来源:互联网 发布:大脚插件mac更新 编辑:程序博客网 时间:2024/05/21 08:42
绝对路径和相对路径
在Linux中什么是一个文件的路径呢,说白了就是这个文件存在的地方,例如在上一章提到的 /root/.ssh/authorized_keys
这就是一个文件的路径。如果你告诉系统这个文件的路径,那么系统就可以找到这个文件。在Linux的世界中,存在着绝对路径和相对路径。
绝对路径:路径的写法一定由根目录 ‘/’写起,例如/usr/local/mysql
这就是绝对路径。
相对路径:路径的写法不是由根目录 ‘/’写起,例如,首先用户进入到/, 然后再进入到home ,命令为cd/home
然后cd test
此时用户所在的路径为/home/test
第一个cd命令后跟 ‘/home’ 第二个cd命令后跟 ‘test’, 并没有斜杠,这个 ‘test’ 是相对于 ‘/home’ 目录来讲的,所以叫做相对路径。
命令:cd
这个命令是用来变更用户所在目录的,后面如果什么都不跟,就会直接到当前用户的根目录下,我们做实验用的是 ‘root’ 账户,所以运行cd
后,会进入root账户的根目录 ‘/root’. 后面跟目录名,则会直接切换到指定目录下:
[root@localhost ~]# cd /tmp/[root@localhost tmp]# pwd/tmp[root@localhost tmp]# cd[root@localhost ~]# pwd/root
pwd
这个命令打印出当前所在目录,cd
后面只能是目录名,而不能是文件名,如果跟了文件名会报错:
[root@localhost ~]# cd /etc/passwd-bash: cd: /etc/passwd: 不是目录
./
表示当前目录,../
表示当前目录的上一级目录:
[root@localhost ~]# cd /usr/local/lib/[root@localhost lib]# pwd/usr/local/lib[root@localhost lib]# cd ./[root@localhost lib]# pwd/usr/local/lib[root@localhost lib]# cd ../[root@localhost local]# pwd/usr/local
上例中,首先进入到 /usr/local/lib/
目录下,然后再进入./
其实还是进入到当前目录下,用pwd
查看当前目录,并没有发生变化,然后再进入../
则是进入到了/usr/local/
目录下,即/usr/local/lib
目录的上一级目录。
命令:mkdir
用来创建目录的,这个命令在上一章节中用到过。 ‘mkdir’ 其实就是make directory的缩写。其语法为 mkdir [-mp] [目录名称] ,其中-m, -p为其选项, ‘-m’ 这个选项用来指定要创建目录的权限,不常用,阿铭不做重点解释。 ‘-p’ 这个选项很管用,先来做个试验,你会一目了然的:
[root@localhost ~]# mkdir /tmp/test/123mkdir: 无法创建目录 '/tmp/test/123': 没有那个文件或目录[root@localhost ~]# mkdir -p /tmp/test/123[root@localhost ~]# ls /tmp/test123
当我们想创建 /tmp/test/123
目录,可是提示不能创建,原因是/tmp/test
目录不存在,你会说,这个Linux怎么这样傻,/tmp/test
目录不存在就自动创建不就OK了嘛,的确Linux确实很傻,如果它发现要创建的目录的上一级目录不存在就会报错。然而Linux并不是那么傻,因为它也为我们想好了解决办法,即 ‘-p’ 选项,这个选项可以帮我们创建一大串级联目录,这个选项还有一个好处,那就是当你创建一个已经存在的目录时,不会报错:
[root@localhost ~]# ls -ld /tmp/test/123drwxr-xr-x. 2 root root 4096 5月 9 19:10 /tmp/test/123[root@localhost ~]# mkdir /tmp/test/123mkdir: 无法创建目录 '/tmp/test/123': 文件已存在[root@localhost ~]# mkdir -p /tmp/test/123[root@localhost ~]# ls -ld /tmp/test/123drwxr-xr-x. 2 root root 4096 5月 9 19:10 /tmp/test/123
在上一章节里,阿铭已经介绍过 ls
命令,但是并没有向你介绍它的 ‘-d’ 选项,这个选项是针对目录的,通常都是和 ‘-l’ 同时使用写成 ‘-ld’. 它可以查看指定目录的属性,比如在本例中,它可以查看 ‘/tmp/test/123’ 目录的创建时间。mkdir-p
后面跟一个已经存在的目录名时,它不会做任何事情,只是不报错而已。
命令:rmdir
用来删除空目录,后面可以是一个也可以是多少,多个的话用空格分隔。该命令阿铭很少使用,因为它只能删除目录,不能删除文件,还有一个命令rm
既可以删除目录又可以删除文件,阿铭用的比较多。rmdir 有一个和mkdir一样的选项 ‘-p’, 同样可以级联删除一大串目录,但是级联的目录中其中一个目录里还有目录或者文件时就不好用了。
[root@localhost ~]# ls /tmp/test123[root@localhost ~]# rmdir /tmp/test/rmdir: 删除 '/tmp/test/' 失败: 目录非空[root@localhost ~]# rmdir /tmp/test/123[root@localhost ~]# ls /tmp/test[root@localhost ~]#
所以,得出的结论是, ‘rmdir’ 只能删除空目录,即使加上 ‘-p’ 选项也只能删除一串的空目录,可见这个命令有很大的局限性,偶尔用下还可以。
命令:rm
这个命令是最常用的, ‘rm’ 同样也有很多选项。你可以通过 man rm
来获得详细帮助信息。在这里阿铭只介绍最常用的两个选项。
‘-r’ : 删除目录用的选项,等同于rmdir.
[root@localhost ~]# mkdir -p /tmp/test/123[root@localhost ~]# rm -r /tmp/test/123rm:是否删除目录 '/tmp/test/123'? y
但是和rmdir不同的是,使用 rm-r
删除目录时,会问一下是否删除,如果输入 ‘y’ 则会删除,输入 ‘n’ 则不删除。当然rm-r
也不会向rmdir不能删除非空目录,它是可以删除非空目录的。
‘-f’ : 表示强制删除,不再提示是否要删除,而是直接就删除了,而后面跟一个不存在的文件或者目录时,也不会报错,如果不加 ‘-f’ 选项会报错。
[root@localhost ~]# rm /tmp/test/123/123rm: 无法删除 '/tmp/test/123/123': 没有那个文件或目录[root@localhost ~]# rm -f /tmp/test/123/123
要删除一个目录时,即使加上 ‘-f’ 选项也会报错,所以删除目录一定要加 ‘-r’ 选项。
[root@localhost ~]# rm -f /tmp/test/123rm: 无法删除 '/tmp/test/123': 是一个目录[root@localhost ~]# rm -rf /tmp/test/123
关于rm,阿铭使用最多便是 ‘-rf’ 两个选项合用了。不管删除文件还是目录都可以。但是方便的同时也要多注意,万一你的手太快后边跟了/那样就会把你的系统文件全部删除的,切记切记。
环境变量PATH
在讲环境变量之前阿铭先介绍一个命令 which
, 它用来查找某个命令的绝对路径。
[root@localhost ~]# which rmdir/bin/rmdir[root@localhost ~]# which rmalias rm='rm -i' /bin/rm[root@localhost ~]# which lsalias ls='ls --color=auto' /bin/ls
‘rm’ 和 ‘ls’ 是两个特殊的命令,使用 alias
命令做了别名。我们用的 ‘rm’ 实际上是 ‘rm -i’ 加上 ‘-i’ 选项后,删除文件或者命令时都会问一下是否确定要删除,这样做比较安全。 ‘alias’ 可以设置命令的别名也可以设置文件的别名,阿铭会在以后章节中详细介绍。 ‘which’ 这个命令阿铭平时只用来查询某个命令的绝对路径,不常使用。
上边提到了alias,也提到了绝对路径的/bin/rm ,然后你意识到没有,为什么我们输入很多命令时是直接打出了命令,而没有去使用这些命令的绝对路径?这是因为环境变量PATH在起作用了。请输入 echo $PATH,这里的echo其实就是打印的意思,而PATH前面的$表示后面接的是变量。
[root@localhost ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
因为/bin 在PATH的设定中,所以自然就可以找到ls了。如果你将 ls 移动到 /root 底下的话,然后你自己本身也在 /root 底下,但是当你执行 ls 的时候,他就是不理你?怎么办?这是因为 PATH 没有 /root 这个目录,而你又将 ls 移动到 /root 底下了,自然系统就找不到可执行文件了,因此就会告诉你 ‘command not found!’
[root@localhost ~]# mv /bin/ls /root/[root@localhost ~]# ls-bash: /bin/ls: 没有那个文件或目录
‘mv’ 用来移动目录或者文件,还可以重命名,稍后讲解。
那么该怎么克服这种问题呢?有两个方法,一种方法是直接将 /root 的路径加入 $PATH 当中!如何增加?可以使用命令PATH=$PATH:/root
:
[root@localhost ~]# PATH=$PATH:/root[root@localhost ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root[root@localhost ~]# lsanaconda-ks.cfg install.log install.log.syslog ls
另一种方法就是使用绝对路径:
[root@localhost ~]# /root/lsanaconda-ks.cfg install.log install.log.syslog ls
命令: cp
copy的简写,即拷贝。格式为 cp [选项] [来源文件][目的文件]
,例如我想把test1 拷贝成test2 ,这样即可 cp test1 test2,以下介绍几个常用的选项:
-r : 如果你要拷贝一个目录,必须要加-r选项,否则你是拷贝不了目录的, 和 ‘rm’ 类似。
[root@localhost ~]# mkdir 123[root@localhost ~]# cp 123 456cp: 略过目录'123'[root@localhost ~]# cp -r 123 456[root@localhost ~]# ls -l总用量 44drwxr-xr-x. 2 root root 4096 5月 10 04:05 123drwxr-xr-x. 2 root root 4096 5月 10 04:05 456
-i : 安全选项,和 ‘rm’ 类似,如果遇到一个存在的文件,会问是否覆盖。在Redhat/CentOS系统中,我们使用的cp其实是cp -i
[root@localhost ~]# which cpalias cp='cp -i' /bin/cp
下面简单做一个小试验,很快你就会明白-i 选项的作用了。
[root@localhost ~]# cd 123[root@localhost 123]# ls[root@localhost 123]# touch 111[root@localhost 123]# touch 222[root@localhost 123]# cp -i 111 222cp:是否覆盖 '222'? n[root@localhost 123]# echo 'abc' > 111[root@localhost 123]# echo 'def' > 222[root@localhost 123]# cat 111 222abcdef[root@localhost 123]# /bin/cp 111 222[root@localhost 123]# cat 111abc[root@localhost 123]# cat 222abc
例子中的 ‘touch’ 看字面意思就是 ‘摸一下’,没错,如果有这个文件,则会改变文件的访问时间,如果没有这个文件就会创建这个文件。前面说过 ‘echo’ 用来打印,在这里所echo的内容 ‘abc’ 和 ‘def’ 并没有显示在屏幕上,而是分别写进了文件 111和222, 其写入作用的就是这个大于号 ‘>’ 在linux中这叫做重定向,即把前面产生的输出写入到后面的文件中。在以后的章节中会做详细介绍,这里你要明白它的含义即可。而 ‘cat’ 命令则是读一个文件,并把读出的内容打印到当前屏幕上。该命令也会在后续章节中详细介绍。
命令: mv
‘mv’ 是move的简写。格式为 mv [ 选项][源文件][目标文件]
下面介绍几个常用的选项。
-i : 和cp的-i 一样,当目标文件存在时会问用户是否要覆盖。在Redhat/CentOS系统中,我们使用的mv其实是mv -i
该命令有几种情况:
1) 目标文件是目录,而且目标文件不存在;
2) 目标文件是目录,而且目标文件存在;
3) 目标文件不是目录不存在;
4) 目标文件不是目录存在;
目标文件是目录,存在和不存在,移动的结果是不一样的,如果存在,则会把源文件移动到目标文件目录中。否则,就直接移动了,相当于重命名。这样说也许你会觉得有点不好理解,看例子吧。
[root@localhost ~]# mkdir dira dirb[root@localhost ~]# lsanaconda-ks.cfg dira dirb install.log install.log.syslog[root@localhost ~]# mv dira dirc[root@localhost ~]# lsanaconda-ks.cfg dirb dirc install.log install.log.syslog
目标文件为目录,并且目标目录不存在,相当于把 ‘dira’ 重命名为 ‘dirc’.
[root@localhost ~]# mv dirc dirb[root@localhost ~]# lsanaconda-ks.cfg dirb install.log install.log.syslog[root@localhost ~]# ls dirbdirc
目标文件为目录,且目标目录存在,则会把 ‘dirc’ 移动到 ‘dirb’ 目录里。
[root@localhost ~]# touch filed[root@localhost ~]# lsanaconda-ks.cfg dirb filed install.log install.log.syslog[root@localhost ~]# mv filed filee[root@localhost ~]# lsanaconda-ks.cfg dirb filee install.log install.log.syslog[root@localhost ~]# mv filee dirb[root@localhost ~]# lsanaconda-ks.cfg dirb install.log install.log.syslog[root@localhost ~]# ls dirbdirc filee
目标文件不是目录,且不存在,则会重命名文件。
几个和文档相关的命令
命令: cat
比较常用的一个命令,即查看一个文件的内容并显示在屏幕上, 后面可以不加任何选项直接跟文件名,阿铭介绍两个常用的选项:
-n : 查看文件时,把行号也显示到屏幕上。
[root@localhost ~]# echo '111111111' > dirb/filee[root@localhost ~]# echo '222222222' >> dirb/filee[root@localhost ~]# cat dirb/filee111111111222222222[root@localhost ~]# cat -n dirb/filee 1 111111111 2 222222222
上例中出现了一个 ‘>>’ 这个符号跟前面介绍的 ‘>’ 的作用都是重定向,即把前面输出的东西输入到后边的文件中,只是 ‘>>’ 是追加的意思,而用 ‘>’ 如果文件中有内容则会删除文件中内容,而 ‘>>’ 则不会。
-A : 显示所有东西出来,包括特殊字符
[root@localhost ~]# cat -A dirb/filee111111111$222222222$
命令: tac
和 ‘cat’ 一样,用来把文件的内容显示在屏幕上,只不过是先显示最后一行,然后是倒数第二行,最后显示的是第一行。
[root@localhost ~]# tac dirb/filee222222222111111111
命令: more
也是用来查看一个文件的内容,后面直接跟文件名,当文件内容太多,一屏幕不能占下,而你用 ‘cat’ 肯定是看不前面的内容的,那么使用 ‘more’ 就可以解决这个问题了。当看完一屏后按空格键继续看下一屏。但看完所有内容后就会退出。如果你想提前退出,只需按 ‘q’ 键即可。
命令: less
作用跟more一样,后面直接跟文件名,但比more好在可以上翻,下翻。空格键同样可以翻页,而按 ‘j’ 键可以向下移动(按一下就向下移动一行),按 ‘k’ 键向上移动。在使用more和less查看某个文件时,你可以按一下 ‘/’ 键,然后输入一个word回车,这样就可以查找这个word了。如果是多个该word可以按 ‘n’ 键显示下一个。另外你也可以不按 ‘/’ 而是按 ‘?’ 后边同样跟word来搜索这个word,唯一不同的是, ‘/’ 是在当前行向下搜索,而 ‘?’ 是在当前行向上搜索。
命令: head
‘head’后直接跟文件名,则显示文件的前十行。如果加 -n 选项则显示文件前n行。
[root@localhost ~]# head /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin[root@localhost ~]# head -n 1 /etc/passwdroot:x:0:0:root:/root:/bin/bash[root@localhost ~]# head -n2 /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin
‘-n’后可以有空格也可以无空格。
命令: tail
和head一样,后面直接跟文件名,则显示文件最后十行。如果加-n 选项则显示文件最后n行。
[root@localhost ~]# head -n2 /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin[root@localhost ~]# tail /etc/passwdnobody:x:99:99:Nobody:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinvcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologinhaldaemon:x:68:68:HAL daemon:/:/sbin/nologinntp:x:38:38::/etc/ntp:/sbin/nologinsaslauth:x:499:76:'Saslauthd user':/var/empty/saslauth:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinabrt:x:173:173::/etc/abrt:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologintcpdump:x:72:72::/:/sbin/nologin[root@localhost ~]# tail -n2 /etc/passwdsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologintcpdump:x:72:72::/:/sbin/nologin
-f : 动态显示文件的最后十行,如果文件是不断增加的,则用-f 选项。如:tail-f/var/log/messages
该选项特别特别常用,请熟记。
- Linux 文件和目录
- linux文件和目录
- 【Linux】文件和目录
- linux文件和目录
- linux 文件和目录
- linux文件和目录管理
- linux的文件和目录
- Linux文件和目录管理
- linux常用命令--文件和目录
- Linux文件和目录简介
- linux文件和目录操作
- linux文件和目录管理
- Linux文件和目录限制
- linux-文件和目录操作
- Linux文件和目录管理
- linux文件和目录权限
- linux文件和目录操作
- linux文件和目录权限
- CDH5.8 HBase安装Phoenix
- 树莓派(debian)系统开机后自动启动chromium浏览器
- sqlserver 无法在服务器上访问指定的路径或文件 解决方法
- react -redux之provider作用小析
- mac & liunx ssh 自动登录
- linux文件和目录
- 高性能MySQL(四)—Schema与数据类型优化(2)
- 局域网内,ping IP可以ping的通,ping主机名ping不通解决办法
- linux部署web项目问题
- SAP S/4 HANA的SMARTFORMS如何切换到非word编辑器
- easyUI 获取tabs
- 网页设计% jQuery 分享真的牛的响应式灯箱特效FANCYBOX
- 中介者模式(行为类)
- oracle 某个字段重复的记录,选其中随便一条。