第一部分 学习shell
第一部分-学习shell
shell是一个接收由键盘输入的命令,并将其传递给操作系统来执行的程序。
第一章 什么是Shell
1.1终端仿真器
当使用图形用户界面时,需要另一种叫做终端仿真器(terminal emulator)的程序与shell进行交互。
1.2 第一次键盘输入
1.2.1命令历史记录
如果按下向上方向指示键,将会看到先前的命令kaekfjaeifj再一次出现在 提示符的后面,这称为命令历史记录。在默认情况下,大部分Linux发行 版本能够存储最近输入的500个命令。按下向下方向指示键,则先前的命令消失。
1.2.2光标移动
再次按下向上方向指示键,重新调用先前的命令,然后分别按下向左和向右方向指示键,看看如何将光标定位到命令行的任意位置。
1.3几个简单命令
系统时间和日期
1 |
|
当前月的日历
1 |
|
查看磁盘驱动器当前的可用空间
1 |
|
显示可用内存
1 |
|
1.4结束终端会话
第2章 导航
2.1文件系统树
类Unix操作系统使用分层目录结构的方式来组织文件。
文件系统的第一个目录叫做根目录,包含文件和子目录。
windows系统每个存储设备都有一个独立的文件系统树,但是在linux中,无论有多少驱动器和存储设备,通常只有一个文件树。
2.2当前工作目录
使用pwd显示当前工作目录
1 |
|
2.3列出目录内容
1 |
|
2.4更改当前工作目录
使用cd命令可以改变工作目录(即在文件系统树的位置);只需输入cd命令,然后再输入目标工作目录的路径名即可。
- 绝对路径
- 相对路径
2.4.1绝对路径名
1 |
|
2.4.2相对路径名
它通常使用一些特殊符号来表示文件系统树中的相对位置,这些特殊符号是“.”(点)和“..”(点点)。
“.” 代表工作目录,”..”代表工作目录的父目录
从/usr/bin回到父目录
1 |
|
从/usr到/usr/bin
1 |
|
2.4.3一些有用的快捷方式
快捷方式 | 结果 |
---|---|
cd | 回到主目录 |
cd - | 把工作目录改成先前的工作目录 |
cd ~username | 将工作目录改为username的主目录 |
第3章 操作系统
3.1 ls命令
指定要显示的目录
指定多个目录
展示更多细节
3.1.1 选项和参数
ls命令包含了两个选项;l选项产生长格式输出,而t选项则表示以文件修改时间的先后将结果进行排序。
以相反顺序输出
1 |
|
选项 | 长选项 | 含义 |
---|---|---|
-a | —all | 列出所有文件,包括以点号开头的文件,这些文件通常是不列出来的 |
-d | —directory | 通常,如果指定了一个目录,ls命令会列出目录中的内容而不是目录本 |
-F | —classify | 选项会在每个所列出的名字后面加上类型指示符(例如,如果名字是目录名,则会加上一个斜杠) |
-h | —human-readable | 以长格式列出,以人们可读的方式而不是字节数来显示文件大小 |
-l | 使用长格式显示结果 | |
-r | —reverse | 以相反的顺序显示结果。通常,ls命令按照字母升序排列显示结果 |
-S | 按文件大小对结果排序 | |
-t | 按照修改时间排序 |
3.1.2 进一步了解长列表格式
3.2 使用file命令确定文件类型
1 |
|
3.3 less命令查看文件内容
1 |
|
一旦less程序运行起来,我们就可查看文件内容。如果文件不止一页,可以上下滚动文件。按Q键可退出less程序。
命令 | 功能 |
---|---|
PAGE UP或b | 后翻一页 |
PAGE DOWN或 | 前翻一页 |
向上箭头键 | 向上一行 |
向下箭头键 | 向下一行 |
G | 跳转到文本文件的末尾 |
1G或g | 跳转到文本文件的开头 |
/charecters | 向前查找指定的字符串 |
n | 向前查找下一个出现的字符串,这个字符串是之前所指定查 |
h | 显示帮助屏幕 |
q | 退出less |
less命令属于“页面调度器(pagers)”程序类,这些程序允许通过一页一页的方式,轻松浏览很长的文本文档。而more程序只允许向前翻页,使用less命令既可以前后翻页,还具有很多其他的特性。
3.4 快速浏览
- 使用cd命令进入一个给定目录
- 使用ls -l命令列出目录内容
- 看到感兴趣的文件,使用file命令确定文件内容
- 如果文件看起来是一个文件,可以使用less命令浏览其内容
目录 | 内容 |
---|---|
/ | 根目录,一切从这里开始 |
/bin | 包含系统启动和运行必须的二进制文件 |
/boot | 包含Linux内核和最初的RAM磁盘映像(系统启动时,驱动程序会用到),以及启动加载程序。 有趣的文件: /boot/grub/grub.conf或menu.lst,用来配置启动加载程序 ; •/boot/vmlinuz,Linux内核 |
/dev | 这是一个包含设备节点的特殊目录。”把一切当作文件“也适用于设备。内核将它能够识别的设备存放在这个目录里。 |
/etc | /etc目录包含了所有系统层面的配置文件,同时含有一系列shell脚本,系统每次启动时,这些shell脚本都会打开每个系统服务。该目录中包含的内容都是可读的文本文件。 有趣的文件: /etc/crontab,定义了自动化任务运行的时间 /etc/fstab,存储设备以及相关挂载点的列表 /etc/password,用户账号列表 |
/home | 在通常的配置中,每个用户会在/home目录拥有一个属于自己的目录。普通用户只能在自己的主目录中创建文件,保护系统免遭错误的用户行为破坏。 |
/lib | 包含核心系统程序使用的共享文件库,与windows的DDL类似 |
/lost+found | 每个使用Linux文件系统的格式化分区或设备,例如ext3文件系统,都会有这个目录。当文件系统崩溃时,该目录用于恢复分区。除非系统真的发生很严重的问题,否则这个目录一直是空的 |
/media | /media 包含了可移除媒体设备的挂载点 |
/mnt | /mnt目录包含手动挂载的可移除设备的挂接点 |
/opt | /opt目录用来安装其他可选的软件。主要用来存放可能安装在系统中 |
/proc | /proc目录很特殊。从文件的角度来说,它不是存储在硬盘中的真正的文件系统,反而是一个Linux内核维护的虚拟文件系统。它包含的文件是内核的窥视孔。该文件是可读的,从中可以看到内核是如何监管计算机的。 |
/root | root账户的主目录 |
/sbin | 该目录放置“系统”二进制文件。这些程序执行重要的系统任务,这些任务通常是为超级用户预留的 |
/tmp | /tmp是供用户存放各类程序创建的临时文件的目录。某些配置使得每次系统重启时都会清空该目录 |
/usr | /usr目录可能是Linux系统中最大的目录树。它包含普通用户使用的所有程序和相关文件 |
/usr/bin | /usr/bin目录中放置了一些Linux发行版安装的可执行程序。该目录通常会存储成千上万个程序 |
/usr/lib | /usr/bin目录中的程序使用的共享库 |
/usr/local | 这个/usr/local目录是并非系统发行版自带,但却打算让系统使用的程序的安装目录。由源代码编译好的程序通常安装在/usr/local/bin中。在一个新安装的Linux系统中,就存在这一个目录,但却是空目录,直到系统管理员向其中添加内容 |
/usr/sbin | 包含更多的系统管理程序 |
/usr/share | /usr/share目录里包含了/usr/bin中的程序所使用的全部共享数据,这包括默认配置文件、图标、屏幕背景、音频文件等 |
/usr/share/doc | 安装在系统中的大部分程序包包含一些文档文件。在/usr/share/doc中,文档文件是按照软件包来组织分类的 |
/var | 除了/tmp和/home目录之外,目前看到的目录相对来说都是静态的;也就是说,其包含的内容是不变的。而那些可能改变的数据存储在/var目录树里。各种数据库、假脱机文件、用户邮件等都存储在这里 |
/var/log | /var/log目录包含的日志文件,记录了各种系统活动。这些文件非常重要,并且应该时不时地监控它们。其中最有用的文件是/var/log/messages。注意,为了安全起见,在一些系统里,必须是超级用户才能查看日志文件 |
3.5 符号链接
浏览过程中看到以下条目的目录信息
1 |
|
注意,该条目信息的第一个字母是l,而且看起来像是有两个文件名。这种特殊的文件叫做符号链接(又叫软链接或symlink)。protoc 指定为 arch_64 版本
在大多类UNIX系统中,一个文件很可能采用多个名字引用。
某个程序需要使用foo文件中的一个共享资源,文件名包含了版本号,但是foo的版本变化频繁,版本变化后,如果名称变化,就必须跟踪每个可能使用该共享资源的程序,安装了该资源的版本后,都要让使用该资源的程序去寻找新的资源名字。
创建一个符号链接foo指向foo-2.6,打开foo文件其实就是意味着打开foo-2.6。升级到2.7时,将文件添加到系统里,删除符号链接文件,创建指向新版本的符号链接即可。
解决了版本问题,还保存了原有的版本文件。
硬链接
允许文件有多个名字。
第4章 操作文件与目录
- cp:复制文件与目录
- mv:移动或重命名文件和目录
- mkdir:创建目录
- rm:移除文件和目录
- in:创建硬链接和符号链接
4.1 通配符
通配符
通配符 | 匹配项 |
---|---|
* | 匹配任意多个字符(包括0和1个) |
? | 匹配任意单个字符(不包括0) |
[characters] | 匹配任意一个属于字符集中的字符 |
[!characters] | 匹配任意一个不属于字符集中的字符 |
[[:class:]] | 匹配任意一个属于指定字符类中的字符 |
常用字符类
字符类 | 匹配项 |
---|---|
[:alnum:] | 匹配任意一个字母或数字 |
[:alpha:] | 匹配任意一个字母 |
[:digit] | 匹配任意一个数字 |
[:lower] | 匹配任意一个小写字母 |
[:upper:] | 匹配任意一个大写字母 |
通配符示例
模式 | 匹配项 |
---|---|
* | 所有文件 |
g* | 以g开头的所有文件 |
b*.txt | 以b开头的txt文件 |
Data??? | 以Data开头,后面跟3个字符的任一文件 |
[abc]* | 以abc任一开头的任一文件 |
BACKUP.[0-9][0-9][0-9] |
以BACKUP. 开头,后面紧跟3个数字的任一文件 |
[[:upper:]]* | 以大写字母开头的任一文件 |
[![:digit:]]* | 不以数载开头的任一文件 |
*[[:lower]123] | 以小写字母或数字1、2、3中的任一结尾的任一文件 |
字符范围
[a-z]和[A-Z]尽管还能用,但是难以确保不会发生意想不到的错误
通配符在GUI中也奏效
Nautilus:Edit->Select Pattern选择文件。输入通配符表示的文件选择模式,会显示匹配的文件
Dolphin和Konqueror:直接地址栏输入通配符,比如在
\usr\bin
目录下,输入u*
,可以显示匹配结果。
4.2 mkdir——创建目录
1 |
|
1 |
|
4.3 cp——复制文件和目录
复制文件
1 |
|
复制目录
1 |
|
cp常用选项
选项 | 含义 |
---|---|
-a —archive |
复制文件和目录及其属性,包括所有权和权限。通常来说,复制的文件具有用户操作文件的默认属性 |
-i —interactive |
在覆盖一个已存在的文件前,提升用户进行确认。如果没有指定该项,cp会默认覆盖文件 |
-r —recursive |
递归地复制目录及其内容。复制目录时需要使用这个选项(或者-a选项) |
-u —update |
当将文件从一个目录复制到另一个目录时,只会复制目标目录中没有的文件或者更新已有的文件 |
-v —verbose |
复制文件时,显示信息性消息(informative message) |
cp命令示例
命令 | 结果 |
---|---|
cp file1 file2 | 将file1复制到file2。如果file2存在,会被file1覆盖,不存在,会生成file2 |
cp -i file1 file2 | 同上,区别是覆盖前会通知用户确认 |
cp file1 file2 dir1 | 将file1和file2复制到dir1文件夹下,前提是dir1存在 |
cp dir/* dir2 | 将dir1中全部文件复制到dir2中,前提是dir2存在 |
cp -r dir1 dir2 | 将dir1目录(及其内容)复制到dir2中,如果dir2不存在,创建dir2 |
4.4 mv——移除和重命名文件
重命名
1 |
|
将item移入dir
1 |
|
mv选项
选项 | 含义 |
---|---|
-i —interactive |
覆盖一个已存在的文件之前,提示用户确认。如果没有指定该选项,mv会默认覆盖 |
-u —update |
把文件从一个目录移动到另一个目录,只移动没有的文件,或更新已有的文件 |
-v —verbose |
移动文件时显示信息性消息 |
mv示例
命令 | 结果 |
---|---|
mv file1 file2 | file1移动到file2,如果存在file2,会覆盖file2,不存在,会创建file2 |
mv -i file1 file2 | 同上,显示确认信息 |
mv file1 file2 dir | 移动file1和file2到dir下,dir必须存在 |
mv dir1 dir2 | 将dir1移动到dir2,删除原来位置的dir1,如果dir2不存在,创建dir2 |
4.5 rm——删除文件和目录
1 |
|
1 |
|
如果不小心多打了一个空格
1 |
|
rm 命令将会删除目录中所有文件,并提示说明目录中没有叫做.html的文件。
rm选项
选项 | 含义 |
---|---|
-i -interactive |
删除一个已经存在的文件时,提示用户确认 |
-r —recursive |
递归删除目录 |
-f —force |
忽视不存在的文件,无需提示确认,覆盖-i |
-v —verbose |
删除文件时显示信息性消息 |
rm实例
命令 | 结果 |
---|---|
rm file1 | 在不提示用户的情况下,删除file1 |
rm -i file1 | 删除file1前提示用户 |
rm -r file1 dir1 | 删除file1、dir1及它们的内容 |
rm -rf file1 dir1 | 即使file1和dir1不存在,也会继续删除 |
4.6 ln——创建链接
创建硬链接
1 |
|
创建符号链接
1 |
|
4.6.1 硬链接
默认情况下,每一个文件都有一个硬链接,该硬链接会给文件起名字。
当创建一个硬链接时,也会为这个文件创建一个额外的目录条目。
硬链接的局限性:
- 硬链接不能引用自身系统之外的文件,不在同一磁盘分区的无法引用
- 硬链接不能够引用目录
硬链接与文件本身无区别,但是包含硬链接的目标列表没有特别的链接指示说明。
当硬链接被删除时,只是删除了链接,文件本身还存在,除非删除文件的全部链接。
4.6.2 符号链接
克服硬链接的局限性。
符号链接通过创建特殊类型的文件起作用,该文件包含了指向引用文件或目录的文本指针。
向符号链接中写入东西,同样会写入引用文件,删除符号链接时,只会删除链接,不会删除文件本身。
坏链接:文件本身先被删除,符号链接仍然存在,不指向任何位置。
ls命令会显示坏链接,标红。
4.7 实战演练
创建目录
1 |
|
1 |
|
复制文件
1 |
|
查看文件
1 |
|
重复操作复制命令
1 |
|
加上交互信息
1 |
|
重命名
1 |
|
移动文件
1 |
|
1 |
|
1 |
|