1.终端仿真器terminal
2.启动终端仿真器,出现shell提示符。显示格式: 用户名@主机名当前工作目录$
注:如果shell提示符的最后一个字符是#,而不是$, 那么这个终端会话就有超级用户权限。这意味着我们以root用户的身份登录,提供超级用户的权限。
3.shell(命令行): 它是一个程序,接受从键盘输入的指令,然后把命令依次传递给操作系统去执行。
4.如果按上下键,会看到之前看到的指令。这称为命令历史,默认保存最后输入的500个命令。
5.移动光标:使用左右键,把光标定位到命令行的任意位置。
6.关于鼠标和光标: 按下鼠标左键,沿着文本拖动鼠标或者双击某个单词相当于高亮的文本就被复制了。然后按下鼠标中键,就已经粘帖了。
7.运行简单指令
date:显示系统当期的时间和日期
cal:显示当前月份的日历
df: 查看磁盘剩余空间的数量
free: 显示空闲的内存的数量
exit:结束终端会话
启动虚拟控制台: ctrl+Alt+F1~F6进行访问,登录前要输入用户名和密码
pwd:打印当前工作目录名(我们所在的目录),首次启动终端仿真器会话后,当前的工作目录是我们的家目录。每个用户都有自己的家目录。当用户以普通用户的身份操作系统时,家目录是唯一允许用户对文件进行写入的地方。
cd:更改当前工作目录
路径名有两种方式来指定,一种是绝对路径,一种是相对路径。实际使用时,选择输入量最少的方法。
绝对路径:开始于根目录,紧跟着目录数的一个个分支,一直到达所期望的目录或者文件。
相对路径:开始于工作目录,在文件系统中用一对特殊符号来表示相对位置。.符号:表示当前目录 ..符号:表示工作目录的父目录
ls:列出目录的内容
ls -l:改变输出格式,以长模式输出,显示更多细节
ls -lt:按文件修改时间的先后来排序,以长模式输出
ls -lt --reverse:结果以相反的顺序输出
确定文件类型: file 文件名 file指令会打印文件内容的简单描述
8.有用的快捷键
cd:更改当前工作目录到家目录
cd -:更改当前工作目录到先前的工作目录
cd ~用户名:更改当前工作目录到用户的家目录
9.文件系统树
linux以分层目录结构来组织所有文件,所有文件组成了一颗树型目录。
文件系统的第一级目录称为根目录,根目录包含文件和子目录,子目录包含多个的文件和子目录。
文件名的重要规则:以.开头的文件名是隐藏文件,用ls无法显示,必须使用ls -a指令显示他们;文件名和指令名是大小写敏感的。
10.深入研究长格式输出
-rw-r--r-- 1 root root 3576296 2007-04-03 11:05 Experience ubuntu.ogg
-rw-r--r--:第一个字符指明文件类型。开头的-说明是一个普通文件如果是d表明是一个目录;rw-三个字符是文件所有者的访问权限,r--三个字符是文件所属组中成员的访问权限;最后三个字符r--是其他所有人的访问权限。
1:文件的硬链接数目
root:文件属于的用户名字
root:文件所属用户组的名字
3276296:以字节数表示的文件大小
2007-04-03 11:05:上次修改的文件时间和日期
Experience ubuntu.ogg:文件名
11.用less浏览文件内容
less命令是一个用来浏览文本文件的程序。
less 文件名(此时可以浏览文件的内容,按q退出less程序)
12.软链接
符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
13.硬链接
硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
实例测试:
touch f1 #创建一个测试文件f1
ln f1 f2 #创建f1的一个硬连接文件f2
ln -s f1 f3 #创建f1的一个符号连接文件f3
ls -li # -i参数显示文件的inode节点信息
显示结果:
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f1
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f2
9797649 lrwxrwxrwx 1 oracle oinstall 2 Apr 21 08:11 f3 -> f1
注意:从上面的结果中可以看出,硬连接文件f2与原文件f1的inode节点相同,均为9797648,然而符号连接文件的inode节点不同
echo "I am f1 file" >>f1 # 向f1文件中写入数据 I am f1 file
cat f1 # 显示f1中的内容 I am f1 file
cat f2 # 显示f2中的内容 I am f1 file
cat f3 # 显示f3中的内容 I am f1 file
rm -f f1 # 删除原始文件f1
cat f2 # 硬连接f2不受影响,显示f2中的内容 I am f1 file
cat f3 # 符号连接f1文件无效,显示 No such file or directory
14.操作文件和目录
cp:复制文件和目录------------用法: cp 文件1 文件2
mv:移动/重命名文件和目录---------用法:mv 文件1 文件2
mkdir:创建目录---------用法: mkdir 文件目录名...(当有三个圆点跟在一个命令的参数后面,这意味着那个参数可以重复)
mkdir d1 d2 d3(同时创建三个文件目录)
rm:删除文件和目录
ln:创建硬链接和符号链接------用法:ln 文件名 硬链接文件名 ln -s 文件名 软链接文件名
实战应用
mkdir palyground
cd playground
mkdir d1 d2
cp /etc/passwd . 从/etc 目录复制 passwd 文件到当前工作目录下
mv passwd fun “passwd” 这个名字,看起来不怎么有趣,这是个游戏场,所以我们给它改个名字
mv fun d1 把 fun 文件移动目录d1中
mv d1/fun d2 再把 fun 文件从d1移到目录d2
mv d2/fun . 最后,再把 fun 文件带回到当前工作目录
mv fun d1 先移动我们的数据文件到 d1 目录
mv d1 d2 然后移动d1到d2目录
mv d2/d1 .
mv d1/fun .
cd
rm -r playground 删除目录playground及目录下的所有内容
15.使用命令
命令可以是下面四种形式之一:
1. 是一个可执行程序,就像我们所看到的位于目录/usr/bin 中的文件一样。属于这一类的程序,可以编译成二进制文件,ls就是一个可执行程序
2. 是一个内建于shell自身的命令。bash支持若干指令,内部叫做shell内部指令。例如,cd 命令,就是一个shell内部命令
3. 是一个shell函数,这些是小规模的shell脚本,它们混合到环境变量中
4. 是一个命令别名。我们可以定义自己的命令,建立在其它命令之上
type 命令名 ----显示命令的类型
type命令是shell内部命令,它会显示指令的类型,给出一个特定的命令名作为参数。
which 可执行程序指令名 ------显示一个(可执行程序)的位置
在大型服务器中,一个操作系统中不只安装了可执行程序的一个版本,为了确定所给的可执行程序的准确位置,使用which命令
help shell内部的命令名 -------得到shell内部命令的帮助文档 help cd
可执行程序指令名 --help -------显示用法信息,如: mkdir --help
man 要浏览的指令名 ------显示程序手册页
手册文档的格式,一般包括一个标题,命令语法的纲要,命令用途的说明,和命令选项列表及每个选项的说明。但是,手册文档不包含实例
man所显示的参考手册,被分成几个章节,手册的布局如下:
1 用户指令
2 程序接口内核系统调用
3 C库函数程序接口
4 特殊文件,如设备结点和驱动程序
5 文件格式
6 游戏娱乐,如屏幕保护程序
7 其他方面
8 系统管理员命令
man 指定章节号 搜索的信息 -------有时候,我们需要查看参考手册的特定章节,从而找到我们需要的信息。如果查找的是一种文件格式,同时它也是一个命令名
例如:man 5 passwd 与 man passwd
apropos 关键字 ---------显示适当的命令,基于关键字的匹配项 如: apropos floppy
apropos 关键字 等价于 man -k 关键字
whatis 关键字 ----------显示非常简洁的命令说明
whatis程序显示匹配特定关键字的手册的名字和一行命令说明
info 程序名 -------显示程序Info条目 输入“info”,接着输入程序名称,启动 info
GNU项目提供一个程序命令手册页的替代物,称为info。info内容可以通过info阅读器程序读取,info页是超链接形式的文本,类似于网页。
info程序读取info文件,info文件是树型结构,分化为各个结点,每一个包含一个题目,info文件包含超链接,可以让你从一个结点跳到另一个结点
zless .gz结尾的压缩文件 ---------可以显示由gzip压缩的文本文件的内容即.gz结尾的压缩文件
alias 自定义别名='字符串' -----------用别名创建自己的命令。如: alias foo='cd /usr; ls; cd -'
注: 将多行命令放在同一行时,命令之间使用;进行分割开。如: cd /usr;ls;cd -
先使用type test测试test命令有没有已经存在在系统中,避免使用已经存在的命令名来作为我们的别名
命令结构: alias 自定义别名='字符串' 例如:alias foo='cd /usr; ls; cd -'
删除alias自定义命令: unalias foo
查看已经在系统环境中定义的别名,使用不带参数的alias指令
在命令行中自定义别名,当shell会话结束后,别名将会消失作用,一般将别名添加到文件中
16.重定向
I/O代表输入/输出,通过这个工具,可以重定向命令的输入输出,命令的输入来自文件,而输出也存到文件,可以把多个命令连接起来组成一个强大的命令管道。
到目前为止,许多程序都会产生某种输出。输出一般由两种类型组成,即程序运行结果和得到的状态和错误信息。linux的主题“一切都是文件”,例如ls实际把他们的运行结果输送到一个标准
输出的特殊文件,它们的状态信息则送到另一个标准错误文件。默认情况下,标准输出和标准错误都连接到屏幕,而不是保存到磁盘文件。此外,许多程序从一个叫标准输入的设备得到输入,默认情况下标准输入
连接到键盘。I/O重定向可以更改输出走向和输入来向。一般输入来自键盘,输出送到屏幕;但是通过I/O重定向,我们可以改变输入输出方向。
(1) 重定向标准输出: 将一个命令的结果存储到一个文件中,使用重定向符>
I/O重定向允许我们来重定义标准输出到哪里,将一个命令的运行结果存储到一个文件中
例如: ls -l /usr/bin > ls-output.txt 将ls -l /usr/bin命令的结果原本显示在屏幕上,现在保存到ls-output.txt文件中,由文件代替屏幕
删除一个文件内容(或者创建一个新的空文件),可以使用这样的技巧: > ls-output.txt
将重定向的结果追加到文件内容后面,而不是从头开始重写文件,则使用>>重定向符,如: ls -l /usr/bin >> ls-output.txt ls -l ls-output.txt
使用>>操作符,将导致输出结果添加到文件内容之后,如果文件不存在,文件会被创建,就如同使用了>操作符
重复执行ls -l /usr/bin >> ls-output.txt命令三次,导致输出文件大小是原来的3倍
(2) 重定向标准错误
重定向标准错误缺乏专用的重定向操作符。重定向标准错误,我们必须参考它的文件描述符。一个程序可以在几个编号的文件流中的任一个上产生输出。然而我们必须把这些文件流的前三个看作标准输入,输出和错误,shell内部参考它们为文件描述符0,1和2
shell提供一种表示法来重定向文件,使用文件描述符。因为标准错误和文件描述符2一样,故用这种表示法来重定向标准错误:ls -l /bin/usr 2> ls-error.txt
(3) 重定向标准输出和错误到同一个文件
希望捕捉一个命令的所有输出到一个文件,同时使用重定向标准输出和标准错误,有两个方法完成
方法1: ls -l /bin/usr > ls-output.txt 2>&1
注: 注意重定向的顺序安排非常重要。标准错误的重定向必须总是出现在标准输出重定向之后,要不然它不起作用
方法2: ls -l /bin/usr &> ls-output.txt
(4) 处理不需要的输出
我们不想要一个命令的输出结果,只想将它们扔掉,这种情况适合于错误和状态信息。通过重定向输出结果到一个特殊的叫做/dev/null的文件,此文件叫做位存储桶
ls -l /bin/usr 2> /dev/null
(5)cat 文件名 -----连接文件(cat经常被用来显示简短的文本文件,cat也可以把多个小文件连接在一起)
cat命令用来读取一个或者多个文件,然后复制他们到标准输出
如果cat没有给出任何参数,它会从标准输入读入数据,因为默认情况下,标准输入连接到键盘
cat
The quick brown fox jumped over the lazy dog.
下一步,输入 Ctrl-d(按住 Ctrl 键同时按下 “d”),来告诉 cat,在标准输入中,它已经到达文件末尾(EOF)
我们可以使用这种行为来创建简短的文本文件。比方说,我们想创建一个叫做 “lazy dog.txt” 的文件,这个文件中包含例子中的文本
cat > lazy_dog.txt
输入命令,其后输入要放入文件中的文本。记住,最后输入 Ctrl-d
我们使用cat来复制文件内容到标准输出: cat lazy_dog.txt
(6)重定向标准输入
使用“<”重定向操作符,我们把标准输入源从键盘改到文件lazy dog.txt,将一个文件作为标准输入源。例如:cat < lazy_dog.txt
17.管道线
命令可以从标准输入读取数据,然后再把数据输送到标准输出,命令的这种能力被一个shell特性所利用,这个特性叫做管道线
使用管道操作符 “|”(竖杠),一个命令的标准输出可以管道到另一个命令的标准输入:命令1 | 命令2
less命令接收标准输入,用less来一页一页显示任何命令的输出,命令把它的运行结果输出到标准输出
ls -l /usr/bin | less
18. 过滤器
管道线经常用来对数据完成复杂的操作。有可能会把几个命令放在一起组成一个管道线。通常,以这种方式使用的命令被称为过滤器。过滤器接收输入,以某种方式改变它,然后输出它。
将目录/bin和/usr/bin中的可执行程序都联合在一起,再把它们排序,然后浏览结果。通过在管道线中包含sort,我们改变输出数据,从而产生一个有序列表。
ls /bin /usr/bin | sort | less
19.uniq --------报道或忽略重复行
uniq 命令经常和 sort 命令结合在一起使用,uniq 从标准输入或单个文件名参数接受数据有序列表(详情查看 uniq 手册页),默认情况下,从数据列表中删除任何重复行。
ls /bin /usr/bin | sort | uniq | less
如果我们想看到重复的数据列表,让 uniq 命令带上 “-d” 选项:
ls /bin /usr/bin | sort | uniq -d | less
20.wc -----------打印行,字和字节数
wc(字计数)命令是用来显示文件所包含的行,字和字节数,例如:wc ls-output.txt
-l选项限制命令输出只能打印行数,将其添加到管道线中: ls /bin /usr/bin | sort | uniq | wc -l
21. grep --------打印匹配行
grep 是个很强大的程序,用来找到文件中的匹配文本,用法: grep pattern [file...]
当 grep 遇到一个文件中的匹配 “模式”,它会打印出包含这个类型的行
比如说,我们想在我们的程序列表中,找到文件名中包含单词 “zip” 的所有文件,这样一个搜索,可能让我们了解系统中的一些程序与文件压缩有关系。这样做:ls /bin /usr/bin | sort | uniq | grep zip
注意:grep 有一对方便的选项:“-i”使得忽略大小写执行搜索,“-v” 选项会告诉 grep 只打印不匹配的行。
ls /bin /usr/bin | sort | uniq | grep zip -i或者-v
22.head / tail ---------打印文件开头部分/结尾部分
head命令默认打印文件的前十行,而tail命令默认打印文件的后十行。默认情况下,两个命令都打印十行文本,但是可以通过 “-n” 选项来调整命令打印的行数.
head -n 5 ls-output.txt
tail -n 5 ls-output.txt
它们也能用在管道线中: ls /usr/bin | tail -n 5
tail有一个选项参数允许你实时浏览文件,一般在观察日志文件的进展时,很有用。例如tail -f /var/log/messages
23.tee ---------从 Stdin 读取数据,并同时输出到 Stdout 和文件
tee 程序从标准输入读入数据,并且同时复制数据到标准输出(允许数据继续随着管道线流动)和一个或多个文件.当在某个中间处理阶段来捕捉一个管道线的内容时,很有用。
ls /usr/bin | tee ls.txt | grep zip
###########################################从shell眼中看世界#####################################
1.字符展开
echo是一个shell内部命令,它在标准输出中打印出它的文本参数,传递到echo命令的任意一个参数都会在屏幕上显示出来。
例如:echo this is a test
2.路径展开 -----------通配符工作机制展开的方法
echo *s
echo D*
隐藏文件:以.开头的文件名
echo * 不显示隐藏文件
echo .* 显示隐藏文件
ls -d .[!.]?* 更精确的模型等价于ls -A
3.波浪线展开
波浪线用在一个单词的开头,会展开成指定用户的家目录,不指定用户名时,则是当前用户的家目录
echo ~foo
echo ~
4.算术表达式展开
shell允许算术表达式通过展开来执行,允许把shell当作计算器使用
echo $((算术表达式,只支持整数算术运算)) 例如: echo $((2+2))
可以实现嵌套 echo $(($((5**2))*3))等价于echo $(((5**2)*3))
5.花括号展开