玩转Linux之目录和文件管理(一)
1、对 Linux 的操作并不是在图形桌面上完成的,我们需要打开一个终端,在终端上完成。Linux 的终端类似于 Windows 的 CMD一样,但是命令和功能比CMD强大的太多了。Linux有六个终端,切换方式的 Alt+F1 到 Alt+F6,还有一个 Alt+F7 就可以切换回我们的图形终端啦,之后我们输入用户名和密码就可以登陆进去了。下图为我在某一个终端,以 root用户的身份登陆进了系统。
2、等正常登录系统后会出现个以你的 用户名@主机名开头的提示符。如果你是以普通用户身份登陆的,在最末尾应该是 $ ,如果你像我一样用 root 用户登陆,那么最末尾会是 #。敲几下键盘我们发现可以输入进去字符,你会不会感觉无从下手呢?应该输入哪些字符才正确呢?脱离了桌面一时好不适应啊。但是对于Linux 来说一般用于服务器,服务器是不会安装桌面的,因为安装了桌面甚至会使服务器变得不安全,大都会选择远程终端连接的方式操纵服务器。所以大家要慢慢熟悉 Linux 终端下的操作,等熟悉了,你会发现在终端下工作的效率甚至比桌面还要高。下图为我远程连接了一台 Linux 后演示用户切换后 $ 与 # 的变化
3、我们咸犴孜稍先了解下Linux命令的格式: 命令 选项 参数命令一般都是我们要完成的工作的简称,比如列出当前目录中的文件及目录的命令 "造婷用痃ls ",就是 " list " 的简写。其中选项分短选项与长选项,短选项前面要添加一个"- ",长选项前面要添加一个" -- "。如果存在多个选项可以组合起来,比如: " -a -b = -ab "。短选项的意义是只有一个字母或数字的选项,长选项可以是几个字母或者一个单词。比如以长格式列出当前目录下的文件和目录:“ ls -l“ ,以长格式列出当前目录下的所有文件(包括以" . "开头的隐藏文件)和目录:" ls -l -a "或者" ls -la "。其中选项的位置并不是固定的,比如:" ls -al "和 " ls -la "的效果是相同的。参数就是命令的作用对象了。有些命令不需要参数就可以不写,比如“ ls ”这个命令,如果加了参数,比如:“ ls -l linux “,命令就会在当前目录下寻找有没有一个名字叫 " linux " 的文件或目录,然后列出它的详细信息。如果没有那个文件或目录,就会提醒你没有找到那个文件或目录。下图为 ls 命令的演示
4、接下来我们就好好看看 " ls " 这个命令一些常用参数的意义吧:ls -l:长格式(也就是列出更详细的信息) -h:做单位转换(一般要与 -l 一起用,文件的大小会以合适的形式输出。) -a: 显示以.开头的隐藏文件(Linux上把文件改名为" .XXX " 的就可以隐藏了,比如:" .linux ") -r: 逆序显示(默认排序是 a - z) -R: 递归显示(如果存在子目录,会把子目录的文件和目录都列出来)
5、我们不可能一直在当前目录转悠吧,当我们登陆系统时,默认会呆在自己的家目录。每一个用户都可以有自己的家目录,当然这个不是必须的。看看下一个命令 " cd " 。有使用过CMD命令提示符经验的应该都知道这个命令的作用了吧,没错 就是切换目录的命令。这个命令使用很简单,直接给它一个存在的相对路径或绝对路径,它就很听话的给你切换进去了。现在我们先了解一下 Linux系统是怎么管理硬盘上的文件的。
6、大家都知道Windows系统会对硬盘分区的显示为 "C:\" , "D:\" , "E:\" 等,就是所谓的C盘,D盘,E盘 喽。文件被组织到文件系统中,Linux不同的是不会区分这么多盘,它的文件管理是一个树状结构,Linux只有一个根目录 " / ", 也就是树状结构的最顶端。之后下面有其他文件和目录,目录中再分目录就形成了树的结构。当我们要在目录树中寻找一个文件时,从树的顶端 " / "开始寻找,比如定位到" /usr/local/file1 " ,这个路径就是绝对路径。如果我们刚好站到了 " /usr/local "这个文件夹中,我们寻找 file1 还需要从根找吗?眼前的就是。我们用 ". " 表示当前目录,".. " 表示父目录,也就是上一级目录。用相对路径怎么表示file1呢?那就是 " ./file1 "。如果file1在 " /usr/file1 "这个位置,相对路径就是 " ../file1 "。总结下,绝对路径就是从 " / "开始寻找文件的路径,相对路径就是从当前目录寻找文件的路径。对了,一个需要注意的地方是在Linux中是使用 "/"正斜杠来分隔目录的,不同于Windows的 " \ " 反斜杠。
7、我了 我们接着 cd 这个命令的话题。很简单,给它一个目录的路径就切换过去了。不如我们去目录树的顶端 " / " 中去看看。执行命令:" cd / ",然后再 " ls "一下看看吧,是不是情景大换样了呢
8、我们发现目录是用蓝色表示的,文件用黑色。我们还可以 " ls /bin ",直接芬简砝鬃看看bin这个目录中的文件,我们发现竟然大多都是绿色的文件。咦?仔细观看竟然发现了一个叫 "ls" 的文件。其实我们执行的命令都是Linux上的小程序,这些小程序都统一放到了一些目录中,bin目录只是其中的一个。Linux上可执行程序都要有可执行的权限(关于权限之类的以后会讲)。有可执行权限的都用绿色表示,就算是普通文件,如果赋予了可执行权限也会变成绿色的哦。那么这些颜色都是怎么来的呢?其实这是因为 ls 命令的一个长选项 " --color ",它会自动给不同的文件添加不同的颜色,目录也是一种特别的文件哦。我们在执行 " ls " 这个命令的时候其实系统默认就添加了"--color=auto "这个长选项,单纯的 " ls " 命令是没有颜色的。alias这条命令以后也会讲到。二图用 " alias "命令查看我们输入" ls " 命令的实际操作和用 " unalias "取消 " ls "的"--color=auto "之后的对比
9、我们看到了在根目录下有很多的文件夹,那么这些文件夹都有什么作用呢?/boot: 系统启动相关的文件,如内核、initrd,以及grub(bootloader)/dev: 设备文件(Linux上一切皆文件的原则,你的硬盘就是用 /dev/sda 这个文件表示了,这个文件也是你操作硬盘的接口,比如格式化硬盘就是对这个文件的操作)/etc:配置文件(系统和软件的一些配置文件)/home:用户的家目录,每一个用户的家目录通常默认为/home/USERNAME/root:管理员的家目录;/lib:库文件 静态库, .a 动态库, .dll, .so (shared object) /lib/modules:内核模块文件/media:挂载点目录,移动设备/mnt:挂载点目录,额外的临时文件系统/opt:可选目录,第三方程序的安装目录/proc:伪文件系统,内核映射文件(内核运行的一些参数)/sys:伪文件系统,跟硬件设备相关的属性映射文件/tmp:临时文件, /var/tmp/var:可变化的文件/bin: 可执行文件, 用户命令(就是我们的 "ls" 所在地)/sbin:管理命令(管理系统的一些命令,只有管理员能使用)
10、对了 刚才的那个 cd 命令存放在哪里呢?Linux 提供了一个专门用来查找其他命令的命令 " which "。我们想知道其他命令的位置,那么就which一下。# which lsalias ls='ls --color=auto'/bin/ls不仅把路径给我们了,把 ls 的别名也告诉我们了# which cd/usr/bin/which: no cd in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)它告我们没有在以下哪些目录中找到cd,开头顺便把自己的路径(/usr/bin/which)也告诉我们了那么我们输入的cd命令怎么会找不到呢?因为cd属于Linux的内建命令。
11、在Linux中的命令还区分内建命令和外部命令,内部命令是由 shell,也就是我们骈禄笫杳解析命令用的一个程序提供的,这个shell其实就是一种外部程序。我们登陆到系统后看到的命令提示符其实就是因为系统为我们打开了一个 shell 程序。我们与内核的交互其实就是通过这个 shell程序,shell负责接收用户输入的命令进行解析,然后将需要的操作传递给内核执行。Linux 上拥有着很多的 shell程序,比如 sh 、bash、csh、zsh等等。而我们系统默认使用的是bash这个免费又强大的shell程序。我们可以查看下这个bash在何处,发现也在/bin下。在/bin下我们又找到了三个提供的shell:bash, dash, sh。要切换这些shell也很简单,直接命令行输入要切换的shell名称就行了。首先试了下dash,只显示了一个 # ,果然好丑啊,exit命令退出当前shell,接着又试了试 sh 这个shell,好吧。。。也好看不到哪里去,继续退回我们的bash。那么还能不能继续进入一个 bash?当然可以,不过进入了几个 bash,就要用几个 exit 退出。那么如果只有当前的一个bash,再输入exit会怎么样?你会发现你退出登录了,又回到了输入用户名的界面,我就不测试了,呵呵( ̄▽ ̄)"。用type 命令可以查看其他命令类型是不是内建命令,用法和which差不多。我们看看这个exit# type exitpwd is a shell builtin# which exit/usr/bin/which: no exit in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)我们发现exit也没有路径。
12、接下来我们再看看其他的命令吧!如果我们 cd 了一个目录,又 cd 了一个目录,完了 像我这笨脑子已经迷失在Linux 的目录树中了,不可能 cd 到根去重新找吧。系统提供了一个 " pwd "命令来显示当前目录的绝对路径但并不是所有内建命令都没有路径,比如pwd也是个内建命令,但它有自己的文件路径。不信你可以which和type看看。
13、给大家介绍一个查看其他命令用法的命令:" man "。这个命令可以说之是Linux 系统命令的说明书。用法也很简单,比如我们看下 " ls " 命令的说明书:# man ls接着终端就会打开一个 ls 的说明书了,现在是全屏的,空格键下翻一页,b 键上翻一页,上下键为上翻一行和下翻行。我们也可以 " man man "看下自己的说明书,哈哈。这个说明书会记录命令的详细选项和用法,以后遇到记得不太熟的选项或命令记得交给" man "这个Linux系统的真男人帮忙哦~~o(^▽^)o看完后摁 q 键退出
14、如果不想看man这个重量级的说明书,大多数的程序都提供了" --help " 这个长选项来说明自己的使用方法。我们用"date --help"这个命令来看看显示系统时间的命令"date"的用法吧单输date它会列出系统的当前年月日小时分钟秒,我们也可以自己格式化输出这些时间,比如:以" / "分隔年月日,以" : "分隔小时分钟,他们之间再用空格分开#date +%Y/%m/%d" "%H:%M 2015/01/25 20:13是不是我们所想要的样子呢?我们也可以用data修改时间的哦,用法是直接跟月日小时分钟年,记得年要放后面,来 我们穿越到2016年吧!#date 012520182016Mon Jan 25 20:18:00 EST 2016再用自己的格式输出一下# date +%Y/%m/%d" "%H:%M2016/01/25 20:18是不是变成2016年了呢 哈哈
15、Linux的命令实在太多了,我们有时候没记住一个命令,比如"date",我只记住了一个"da",剩下的部分死活都记不住了,这该怎么办呢?Linux也提供了一个非常好用的方法 Tab 键自动补全!比如你命令只输入了一半,但是这一半已经能定位到这个命令了,也就是说前半部分没有和这个命令冲突的其他命令了,那么摁上下 Tab 键Linux就会自动对这个命令补全了,比如我输入dat,然后摁了下Tab,是不是date立马出现了呢。如果我们输入了da,摁Tab键发现没反应,那是因为不止一个前部分是da的其他命令,我们可以摁两次Tab,系统就会把所有匹配到的命令都列出来,看看 是不是前面说过的dash这个shell也被打印出来了呢。不仅命令可以补全,就连路径也可以补全的,不过命令是会被优先补全的。比如你在根目录下,输入一个h,Tab 两下会把 h 开头的命令都列出来,根目录下不是有个叫 home 的文件夹吗?怎么没有出现呢?不过你输入 hom 试试,当没有命令被匹配到时它才开始匹配文件夹或文件了,看看 是不是被匹配到了呢。
16、还有些Linux命令行的辅助操作:反斜杠 " \ " :如果一行命令内容太长了,输入到末尾系统会自动断行,这样很影响美观和阅读性,我们可以使用反斜杠强制断行,输入反斜杠后直接回车继续输入剩下的命令就可以了。快捷键 Ctrl+U:快速删除当前光标处之前的所有内容快捷键 Ctrl+K:快速删除当前光标处之后的所有内容快捷键 Ctrl+L:清除当前屏幕所有内容,相当于命令 "clear"快捷键 Ctrl+C:取消当前命令的编辑,也可以用来终止当前运行的程序或脚本
17、如果我们想把命令的帮助手册保存成一个文竭惮蚕斗件,然后自己写一本Linux命令说明大全,哈哈 会不会有什么办法呢?当然有了,那就是重定向输出。这个重定向输出是什么意思呢?意思就是原本命令执行完的结果是打印到屏幕上的,然们把这些结果重定向到一个文件,也就是不打印到屏幕啦,保存成一个文件得了。输出重定向:" > " 还有一个 " >> "" > "和" >> "唯一不同的是 若都重定向到一个已经有内容的文件 前者会清空这个文件,然后保存自己的内容,后者不会清空,而是叠加上去我们先把 ls 的输出保存成一个文件,然后用date的输出也覆盖上去,看看两种重定向符号的不同# ls > ls.txt我们用cat命令可以查看文本文件的内容,cat命令相当于Linux上的文本阅读器,用法也很简单,直接 cat filename 即可,使用 " -n "选项还可以输出行号# cat ls.txt哈哈 是不是 ls 命令的输出没有出现在屏幕上呢?当前目录也发现了一个新的文件 " ls.txt ",打开一看的确是当前目录下的内容,甚至连自己也包含进来了。
18、接下来我们就试试date的帮助信息也重定向上去把,首先我们先实验" >> "吧#date --help >> ls.txt# cat ls.txt是不是如图一所示都叠加起来了呢,接下来再试试" > "# date --help > ls.txt#cat ls.txt是不是如图二那样,只有date的帮助了呢所以" > "我们可以叫做覆盖重定向," >> " 叫做叠加重定向
19、原来我们输入的命令还能找到吗?当遇到一条命令要输好多次,怎么免去重新手打的痛苦呢?当然可以找到啦!我们试试摁下方向上键,是不是上一条命令出现了呢,继续上,哇还有,然后再上,是不是以前输入的都找出来了呢。方向键下就可以往下翻喽。默认可以保存1000条命令的,而且重启系统后还能找出来。其实这些命令是保存在当前登录用户的家目录中,root的家目录就是在 /root 喽,还有一个简单进入家目录的方法 " cd ~ ",然后pwd下看看,是不是回家了呢?哈哈 如果在 " ~ " 之后加其他用户的用户名还可以去其他用户的家哦,不过这是上帝般的用户root的特权,其他用户怎么可能让他们随便瞎晃呢?好好呆在他们自己的家目录就行了。默认输入的命令都被保存到了家目录中".bash_history "这个文件里,我们cat一下,是不是输过的命令都看到了呢。作为系统管理员,这个文件很敏感的,如果有黑客入侵了你的主机,你就可以查看黑客到底干了些什么,如果你是这名黑客,走的时候记得把这个文件清空哦,清空的方法很简单,直接覆盖重定向上去就行了。作为管理员的你也要记得时常清空这个文件,免得黑客看到你干了些什么。
20、再介绍些其他很实用的命令:uname -a 查看系统信息,包括是什么系统,主机名,系统内核版本等也可以 uname --help 查看更多选项哦cat /proc/cpuinfo 用cat命令查看cpu信息,忘记/proc这个文件夹的作用了吗?cat /proc/meminfo 查看内存使用情况当然也可以使用" free -m "这个命令以Mb的形式显示内存使用情况hostname 查看主机名,可以直接hostname后加新主机名来临时修改主机名哦,再开启个bash看看效果吧!不过重启后会消失的,以后会讲怎么永久修改主机名的halt 或者 poweroff 或者 shutdown -h now 用来关机的命令,只有root能用哦reboot 或者 shutdown -r now 用来重启,一样只有root用户能用是不是发现 shutdown 出现的频率好高,其实这是个很强大的命令,不仅可以关机、重启,还可以定时或者延时关机和重启,只用把后面的 now 改成其他就行了,具体请问" man "这个真男人吧,甚至可以假关机,用来恶作剧。哈哈 是不是很强大呢
21、du 统计目录及文件的空间使用情况 -a 统计所有文件包括目录的占用情况,子目录也会统计 -h 以人性化的方式显示统计结果,和 ls 的 -h 异曲同工哦 -s 只统计参数的占用大小,不会统计子目录注意个选项的搭配使用哦,一定要灵活
22、mkdir 创建目录,后面直接跟目录名即可# mkdir dir1# mkdir dir1/dir2如果abc不存在的话想在abc中创建123,默认是不允许的,可以使用 -p 选项,一次性全部创建# mkdir -p abc/123 也可以加 -v 选项查看创建过程# mkdir -pv apache/httpd
23、# touch filename 创建一个空文件,本来touch是用来修改文件的时间标记的,但生产环境中用来创建空文件了。我们可以用du命令来统计下这个文件的大小# du -sh filename是不是一个空文件呢
24、ln -s 源文件或目录 目标文件或目录ln命令是用来创建链接的,就像是Windows的快捷方式一样。但创建的链接有两种,软链接和硬链接,不加 -s 选项就是硬链接。他们的区别是软链接的源文件被删除,链接文件就不可用了,几乎就是Windows的快捷方式。而硬链接不同,即使源文件被删除,只要硬链接在就不会真的被删除,因为硬链接直接指向的是硬盘上储存文件的那块空间,这块空间可以由两个甚至多个路径去访问,就好像你知道去我家的路,他也知道去我家的路,只要你俩都没挂,去我家的路的方法就还流传在世间。不过硬链接不能作用于目录,也不能跨分区使用。他们总体效果都差不多,应用更多的还是软链接,记得加上 -s 选项哦我们试试把bash这个命令解释器链接到当前目录来,没忘记用 " . "来指定当前目录吧# ln -s /bin/bash .然后 ls 看一下,是不是有一个天蓝色的文件呢,链接文件以天蓝色来区分
25、cp 选项 源文件或目录 目标文件或目录 copy的意思嘛,当然是用于复制了 -f 强行复制过去,就算对面有相旎髂坑若同文件名的文件也不提醒 -r 复制目录必须使用这个选项,表示递归复制包括子文件夹中的所有文件复制文件或目录时需要注意的是,目标文件或目录都是自己写的,我们也可以选择复制过来的同时给它换个名字,比如把/etc下的passwd文件复制到家目录# cp /etc/passwd /root# cp /etc/passwd /root/pd第一条复制到/root中后文件名还是passwd,而第二条相当于你告诉它复制过来后 要把名字改成pd。如果正好目标文件夹有个重名的文件,他就会问你是否覆盖,输入 y 表示确定,你可以加 -f 选项,无论如何也要强制覆盖。第一条也相当与 cp /etc/passwd /root/passwd。接下来复制个文件夹试试,记得要添加 -r 选项,当然同理也可以给复制的文件夹重命名。# cp -r /bin /root/# cp -r /bin /root/binary如果 -rf 连用去复制,岂不是天下无敌的趋势(●ˇ∀ˇ●),对了,复制的源文件可以有多个哦,但是不能给文件重命名了,比如:# cp -rf /etc/passwd /bin /root它只取最后一个参数做目标,而且必须是个路径
26、rm 选项 文件或目录 -f 强行删除 -r 删除目录必须使用这个选项,表示递归删除包括子文件夹中的所有文件rm -rf 是个很危险的组合啊,如果你不小心作用于根上 " rm -rf / ",那么节哀顺变吧,你的系统已经挂了。所以删除文件的时候一定要三思啊。同样,rm 也是可以一次删除多个的# rm -rf /root/bin /root/pd /root/binary /root/passwd
27、mv 选项 源文件或路径 目标文件或路径mv 便是移动命令了,它有个 -f 选项比较常用,也是代表无论如何都要移动过去,也可以一次移动多个文件或目录。这个命令还有一个作用就是给文件或目录重命名哦,也就是移动过去改下名吗,如果源文件和目标文件都在同一目录下,不就是重命名了吗# mv oldfile newfile看看是否重命名成功了呢
28、如果文件多了想要根据某个特征,快速查找某个文件该怎么做呢find 查找范围 匹配标准 -name filename 按名称查找 -size { + | - }number{ k | M | G } 按文件尺寸查找,+ 或 - 代表大于或小于k M G代表查找的单位 -user root 按属主查找,查找属于root用户的文件 -type { f | d | c | d } 按类型查找,f 代表文件,d 代表目录查找范围是一个目录,也是你要在哪里查找的地方,find命令可以说是非常强大的,具体使用请慢慢阅读说明书,这里只讲几个简单常用的在 /etc 目录下,查找名字为 passwd 的文件# find /etc -name passwd在 /bin 下查找 大于100k的文件#find /bin -size +100k查找 /usr 目录中的其他目录# find /usr -type d查找文件或目录它会把子目录中符合要求的文件或目录都递归的打印出来
29、现在把本章出现的命令总结一些吧ls 列出文件或目录cd 切换到其他目录which 查找其他命鸡舍诽浓令路径bash 我们默认启动的shell程序type 查看其他命令类型pwd 打印当前目录的绝对路径man 查看其他命令的说明书date 查看时间或修改时间cat 文本阅读器uname 查看系统信息hostname 打印当前主机名或临时修改主机名halt | poweroff | shutdown -h now 都可以用来立即关机reboot | shutdown -r now 都可以用来立即重启du 统计目录及文件的空间使用情况mkdir 创建目录touch 创建一个空文件ln 为文件或目录创建链接cp 复制文件或目录rm 删除文件或命令mv 移动文件命令也可用来重命名find 强大的查找命令
30、好了 这章就先介绍到这吧,敬请观看下一篇:玩转Linux之目录和文件管理(二)注意!!一大批命令正在接近!