本文最后更新于:2021年10月25日 下午
1.引言
人们说,“图形用户界面让简单的任务更容易完成,而命令行界面使 完成复杂的任务成为可能”,到现在这句话仍然很正确。
2.什么是shell 2.1终端仿真器 shell 就是一个程序,它接受从键盘输入的命令,然后 把命令传递给操作系统去执行
当使用图形用户界面时,我们需要另一个和 shell 交互的叫做终端仿真器的程序。
2.2第一次按键 用户名 @ 主机 名,紧接着当前工作目录和一个美元符号
如果提示符的最后一个字符是“#”, 而不是“$”, 那么这个终端会话就有超级用户权限。 这意味着,我们或者是以 root 用户的身份登录,或者是我们选择的终端仿真器提供超级用户 (管理员)权限。
2.3命令历史 默认保存500
2.4简单命令 date cal // 显示月历 df // 显示磁盘剩余空间 free // 空闲内存exit // 终止会话
2.5幕后控制台
按下 Ctrl-Alt-F1 到 Ctrl-Alt-F6 访问
当一个会话被访问的时候,它会显示登录提示框,我们需要输入用户名和密码。
要从一 个虚拟控制台转换到另一个,按下 Alt 和 F1-F6(中的一个)。返回图形桌面,按下 Alt-F7
3.文件系统中跳转 3.1文件系统树
分层目录结构组织文件,所有文件组成一颗树型目录,倒置的树
总是只有一个单一的文件系统树,不管存储设备的连接(不像 Windows ,每个存储设备都有一个独自的文件系统)
3.2当前工作目录 pwd //print working directory显示当前目录ls // 列出一个目录包含的文件以及子目录ls -a
当我们首次登录系统(或者启动终端仿真器会话)后,当前工作目录是我们的家目录。每个d用户都有他自己的家目录,当用户以普通用户的身份操控系统时,家目录是唯一允许用户写入文件的地方。
以 “.” 字符开头的文件名是隐藏文件,用ls -a 命令
3.4更改当前工作目录 cd /usr/bin // 绝对路径cd .. // 相对路径回到usrcd ./bin // 相对路径进入bin也可以直接cd bin
绝对路径从根目录开始,直到它的目的地,而相对路径开始于工作目录
符号 “.” 指的是工作目录,”..” 指的是工作目录的父目录
==./是隐含的可以省略==
文件名和命令名是大小写敏感的
文件没有拓展名,文件名可能包含空格,标点符号,但标点符号仅限 使用“.”,“-”,下划线,但是不要使用空格
4.探究操作系统 4.1ls ls /usr // 指定别的目录ls ~ /usr // 指定多个目录(家目录和usr目录ls -l // 以长模式输出
4.2选项和参数
大多数命令使用的选项,是由一个中划线加上一个字符组成,例如,“-l”,但是许多命令, 包括来自于 GNU 项目的命令,也支持长选项,长选项由两个中划线加上一个字组成。
4.3长格式输出
4.4确定文件类型 file filename //file 命令打印文件内容的简单描述
4.5用less浏览文件内容
less filename less /etc/ passwd
按下q 键退出less程序
4.6浏览文件 目录文件概览
5.操作文件和目录 5.1通配符
5.2mkdir创建目录 mkdir directory... //三个点表示参数可重复mkdir dir1 dir2 dir3
5.3cp复制文件或目录 cp item1 item2 //复制单个文件或目录item1 到item2 cp item... directory //复制多个项目到一个目录下
5.4mv移动和重命名文件 mv item1 item2 mv item... directory
5.5rm删除文件和目录
5.6ln创建链接 ln file link ln -s item link
5.7硬链接
一个硬链接不能关联它所在文件系统之外的文件。
一个硬链接不能关联一个目录。
5.8符号链接(软链接/symlink)
类似于windows的快捷方式,其本身与其他符号链接几乎没有区别
向符号链接写入,写入相关联的文件,删除符号链接不会删除文件自身
坏链接为红色
5.9 playground练习(很重要)
cp命令至少两个地址(本地用.)
cp -v 看详细做了什么, -i 获得提示
mv要么两个地址(移动),要么改名字
ln创建链接 -s 符号链接 跟文件和目录
ls -li 可以看到文件索引结点
创建符号链接可以绝对路径也可以相对路径
6.使用命令 6.1命令四种形式
可执行程序,编程语言或脚本语言写成
内建于shell自身的命令,内建命令
shell函数 ,即小规模shell脚本,混合到环境变量中
命令别名 ,自定义命令建立在其他命令之上
6.2 type显示命令的类型
6.3 显示一个可执行程序的位置
这个命令只对可执行程序有效,不包括内建命令和命令别名,别名是真正的可执行程序的替代物
6.4 help得到shell内建命令的帮助文档
–help 显示用法信息
6.5 man显示程序手册页
man使用less显示参考手册,可以使用less命令进行浏览
man参考手册分成的章节:
如果不成功显示No manual entry for passwd in section 5
则需要yum install man-pages
6.6 apropos显示适当的命令 apropos floppy man -k floppy // 功能同上
输出结果每行的第一个字段是手册页的名字,第二个字段展示章节
6.7 whatis显示简洁的命令说明
相当于man -f
6.8 info显示程序info条目
info 文件是树型结构,包含超链接,可以从*号处跳转到另一个结点
6.9 README以及其他程序文档
6.10用别名(alias)创建命令 alias foo='cd /usr ; ls ; cd -'alias name='string' // 格式 type foounalias foo // 删除别名
在命令 “alias” 之后,输入“name”,紧接着(**没有空格 **)是一个等号,等号之后是一串用引 号引起的字符串,字符串的内容要赋值给 name。
通常经常使用的命令带有普遍用到的选项,例如 ls is aliased to `ls –color=auto’,使用不带参数的alias查看默认定义的别名
==在命令行中定义别名有点儿小问题。当你的 shell 会话结束时,它们会消失。==
7.I/O重定向 7.1标准输入输出和错误
默认情况下,标准输出stdout和标准错误都连接屏幕而不是磁盘文件。
标准输入stdin默认情况下连接键盘
I/O重定向 允许我们更改输出地点和输入来源
7.2标准输出重定向
ls -l /usr/ bin > ls-output.txt // 直接创建文件 less le-output.txt
当我们使用 “>” 重定向符来重定向输出结果时,目标文件总是 从开头被重写 (如果错误了就清空文件)
> ls-output.txt // 故意用重定向符来清空文件内容 ls -l /usr/ bin >> ls-output.txt
用 >> 操作符可以把输出结果加到文件内容之后,如果文件不存在则会被创建
7.3标准错误重定向
一一个程序可以在几个编号的文件流中的任一个上产生输出。前三个称作标准输入、输出和错误,shell 内部分别将其称为文件描述符 0、1 和 2
ls -l /bin/u sr 2 > ls-error.txt // 测试错误输出
7.4 重定向标准输出和错误到同一个文件
ls -l /bin/usr > ls-output.txt 2 >&1
完成两个重定向,首先重定向标准输出到文件,然后重定向标准错误到标准输出,用2>&1。
注意重定向的顺序安排非常重要。标准错误的重定向必须总是出现在标准输出重定向之后, 要不然它不起作用。
> ls-output.txt 2 >&1 2 >&1 > ls-output.txt
ls -l /bin/u sr &> ls-output.txt
用 &> 来重定向标准输出和错误到文件 ls-output.txt
7.5处理不需要的输出
不想要一个命令的输出结果,系统重定向输出结果到 /dev/null 的特殊文件
ls -l /bin/u sr 2 > /dev/ null
7.6 cat连接文件
cat 命令读取一个或多个文件,然后复制它们到标准输出
cat [file ] cate ls -output.txt cat -n textfile1 > textfile2
cat > lazy_dog.txt // 等待输入 wowowo. // ctrl d结束 cat lazy_dog.txt // 复制文件内容到标准输出 cat < lazy_dog.txt // 重定向标准输入,输入源为lazy_dog.txt
7.7管道线
管道线使得标准输入读取数据并输送到标准输出,一个命令的标准输出可以通过管道传到另一个命令的标准输入
command 1 | command 2ls -l /usr/bin | less // 不加less则直接输出到最后一行等待下一步命令,有less变成浏览文本文件
7.8过滤器
用来对数据完成复杂操作,把几个命令放在一起组成一个管道线,过滤器接受输入,以某种方式改变它,然后输出它。
ls /bin /usr/bin | sort | less // 产生两个目录的有序列表
7.9 uniq 报道或忽略重复行
uniq 经常和 sort 命令结合起来一起使用,默认情况下在数据列表中删除任何重复行
ls /bin /usr/bin | sort | uniq | lessls /bin /usr/bin | sort | uniq -d | less // 只看重复数据列表
7.10 wc 打印行数字数和字节数
wc(字计数)命令是用来显示文件所包含的行数、字数和字节数。
如果 wc 不带命令行参数,它接受标准输入。“-l” 选项限制命令输出只能报道行数。添加 wc 到管道线来统计数据,是个很便利的方法。查看我们的有序列表中程序个数
wc ls-output.txt ls /bin /usr/bin | sort | uniq | wc -l
7.11 grep打印匹配行
grep pattern [file ...] ls /bin /u sr/bin | sort |uniq | grep zip / /找到文件名中包含单词zip的所有文件
grep -i 忽略大小写 -v 只打印不匹配的行
7.12 head/tail打印文件开头部分/结尾部分 head -n 5 ls-output.txt tail -n 10 ls-output.txt ls -l /usr/ bin | tail -n 5 // 用于管道线中 tail -f /var/ log/messages / /循环读取,跟踪增长情况
7.13 tee从stdin读取数据,并同时输出到stdout和文件
tee 程序从标准输入读入数据,并且同时复制数据到标准输出(允许数据继续随着管道线流动和一个或多个文件。当在某个中间处理阶段来捕捉一个管道线的内容时,这很有帮助。
ls /usr/ bin | tee ls.txt | grep zip
在 grep 过滤 管道线的内容之前,来捕捉整个目录列表到文件 ls.txt
8.从shell眼中看世界 8.1 (字符)展开
echo this is a test // 测试echo echo * // 观察*的展开,打印了所有文件
shell 中 * 会被展开,当回车键被按下时,shell 在命令被执行前在命令行上自动展开任何符合条件的字符,所以 echo 命令的实际参数并不是 “*”,而 是它展开后的结果。
8.2 路径名展开
echo .* // 隐藏文件均以原点开头,但是输出包含 '.' 和 '..' ls -d .* | less // -d表示只显示当前目录文件,展开正确
8.3波浪线展开
用在一个单词开头时,它会展开成指定用户的家目录名,如果没有指定用户名,则展开成当前用户的家目录
8.4 算术表达式展开 echo $((expression))echo 5+$((9 -8 ))
8.5 花括号展开
花括号展开模式可能包含一个开头部分叫做报头 ,一个结尾部分叫做附言 。花括号表达式 本身可能包含一个由逗号分开 的字符串列表,或者一个整数区间 ,或者单个的字符的区间。这 种模式不能嵌入空白字符
echo Number {1..5 }echo {Z..A }
花括号展开可以嵌套 ,最常见的应用是,创建一系列的文件或目录列表
mkdir Picscd Picsmkdir {2007 ..2019 }-0 {1 ..9 } {2007 ..2019 }-{10 ..12 }ls
8.6 命令替换
命令替换允许我们把一个命令的输出作为一个展开模式来使用
不只限制于简单命令,也可以使用整个管道 线
ls -l $(which cd ) file $(ls / usr / bin / * | grep zip )
8.7 引用
双引号 把文本放在双引号中,shell 使用的特殊字 符,都失去它们的特殊含义,被当作普通字符来看待
在双引号中,参数展开 、算术表达式展开和命令替换仍然有效
ls -l "two words.txt" // 防止单词分割echo $(cal) echo "$(cal)" // 在第一个实例中,没有引用的命令替换导致命令行包含38 个参数。在第二个例子中,命令行只有一个参数,参数中包括嵌入的空格和换行符。
echo text ~/*.txt {a,b} $(echo foo) $((2 +2 )) $USER echo "text ~/*.txt {a,b} $(echo foo) $((2+2) ) $USER " echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'
8.8 转义字符
\ 作为转义字符,阻止展开 、消除特殊含义字符 (比如$)
在文件名包含特殊字符时起作用
echo "The balance for user $USER is: \$5.00" echo "The balance for user $USER is: $5 .00"
9 键盘高级操作 9.1 移动光标
9.2 修改文本
9.3 剪切和粘贴文本
9.4 自动补全
按下tab,自动补全路径名 、对变量补全 、用户名 、命令 、主机名
9.5 利用历史命令
history | less // 浏览历史列表的内容 history | grep /usr/ bin !88 // 展开历史列表中88 行的内容
9.8 历史命令展开
10 权限 10.1 拥有者、组成员和其他人
用户帐户定义在/etc/passwd 文件里面,用户组定义在/etc/group
10.2 读取写入和执行
剩下的九个字符叫做文件模式,代表着文件所有者、文件组所有者和其他人的读、写和执 行权限。
owner
group
world
rwx
rwx
rwx
属性
文件
目录
r
允许打开并 读取文件内 容
允许列出目录中的内容,前提是目录必须设置了可执 行属性(x)
w
允许写入文 件内容或截 断文件。但 是 不允 许 对文件进行重命名或删 除,重命名 或删除是由 目录的属性 决定的
允许在目录下新建、删除或重命名文件,前提是目录 必须设置了可执行属性(x)
x
允许将文件 作为程序来 执行,使用 脚本语言编 写的程序必 须设置为可 读才能被执 行。
允许进入目录,例如:cd directory
10.3 chomod更改文件模式 分为八进制表示法和符号表示法两种
八进制对应3个二进制数字,正好用于映射存储文件模式所使用的方案
chomod 600 foo.txt
常见映射7 (rwx),6 (rw-),5 (r-x),4 (r–),和 0 (—)
符号表示法
操作内容
u+x
为文件所有者添加可执行权限
u-x
为文件所有者添加可执行权限
+x
为文件所有者,用户组,和其他所有人添加可执行权限。等 价于 a+x
o-rw
除了文件所有者和用户组,删除其他人的读权限和写权限
go=rw
给文件所属的组和文件所属者/组以外的人读写权限。如果 文件所属组或其他人已经拥有执行的权限,执行权限将被移 除
u+x,go=rw
给文件拥有者执行权限并给组和其他人读和执行的权限。 多种设定可以用逗号分开
10.4 借助GUI来设置文件模式
10.5 umask设置默认权限
umask值
权限
0000
-rw-rw-rw-
0002
-rw-rw-r–
有二进制数字1的位置属性被删除
umask // 得到掩码值 umask 0000 // 设置掩码值
setuid、setgid、sticky位特殊权限
chmod u+s program // 授予一个程序 setuid 权限 chmod g+s dir // 授予一个目录 setgid 权限 chmod +t dir // 授予一个目录 sticky 权限
属性
结果
具有 setuid 属性的程序
-rw**s **r-xr-x
具有 setgid 属性的目录
drwxrw**s **r-x
设置了 sticky 位的目录
drwxrwxrwt
10.6 更改身份
注销系统并以其他用户身份重新登录系统。
使用 su 命令
使用 sudo 命令
10.7 su命令
su -c 'command' // 格式 su -c 'ls -l /root/*'
传递命令command到新的shell中执行,而不启动这个shell,引号防止命令展开
10.8 sudo命令
sudo 命令不要求超级用户的密码,使用 sudo 命令时,用户 使用他/她自己的密码来认证
管理员能够配置 sudo 命令,从而允许一个普通用户以不同的身份(通常是超级用户),通过一种非常可控的方式来执行命令
su 和 sudo 之间的一个重要区别是 sudo 不会重新启动一个 shell,也不会加载 另一个用户的 shell 运行环境
10.9 chown更改文件所有者和用户组
[janet@linuxbox ~] $ sudo cp myfile.txt ~tony Password:[janet@linuxbox ~] $ sudo ls -l ~tony/myfile.txt -rw-r--r-- 1 root root 8031 2008 -03 -20 14 :30 /home/tony/myfile.txt [janet@linuxbox ~] $ sudo chown tony: ~tony/myfile.txt [janet@linuxbox ~] $ sudo ls -l ~tony/myfile.txt -rw-r--r-- 1 tony tony 8031 2008 -03 -20 14 :30 /home/tony/myfile.txt
可能存在的问题:
10.10 更改用户密码
如果你具有超级用户权限,你可以指定一个用户名作为 passwd 命令的参数,这样可以设置 另一个用户的密码。还有其它的 passwd 命令选项对超级用户有效,允许帐号锁定,密码失效,详细内容参考 passwd 命令的手册页
还有一系列的命令行程序,可以用来创建和维护用户和用户组:
11 进程 11.1 ps查看进程 ps ps x // 显示所有进程 ps aux // 显示所有进程并获得详细信息
11.1 top查看进程
11.2信号 kill命令可以像进程发送信号,默认是term
注意,信号既可以用号码,也可以用名字来 指定,包括在前面加上字母“SIG”的名字
kill -signal PIDkill -1 13546
11.3 killall向多个进程发送信号 killall [-u user] [-signal] name...
10.4 关闭系统 4种方式
halt poweroff reboot shutdown
sudo reboot sudo shutdown -h now sudo shutdown -r now
12 环境 12.1检查环境 printenv | less printenv USER // 列出指定环境变量的值 set | less echo $HOME // 用echo命令查看变量内容
环境中的别名无法使用set命令和printenv命令显示,想要查看别名,可以使用不包含参数的alias
查找用/ ,区分大小写
12.2 值得注意的环境变量
12.3 如何建立环境
非登录 shell 会话也会继承它们父进程的环境设置,通常是一 个登录 shell
12.4 启动文件
当我们 输入 ls 后,shell 不会查找整个计算机系统来找到 /bin/ls(ls 命令的全路径名),相反,它查找 一个目录列表,这些目录包含在 PATH 变量中
PATH=$PATH :$HOME /bin / /修改 PATH 变量,添加目录 $HOME/ bin 到目录列表的末尾
12.5 修改环境、使用文本编辑器
添加目录到你的 PATH 变量或者是定义额外的环境变量,要把这些更改放置 到.bash_profile 文件中
gedit some_file // 如果所输入的文件名不存在,编辑器则会假定你想要创建一个新文件
当我们编辑一个重要的配置文件时 ,首先创建一个这个文件的备份总是一个不错的主意 。这样能避免我们在编辑文件时弄乱文件
我们对于文件.bashrc 的修改不会生效,直到我们关闭终端会话,再重新启动一个新的会话,因 为.bashrc 文件只是在刚开始启动终端会话时读取。然而,我们可以强迫 bash 重新读取修改过 的.bashrc 文件,用命令
13 vi入门 13.1 启动和退出 vi // 启动vi :q // 退出vi :q! // 强制退出(一般是修改没保存)// 连按两下esc可以回到命令模式
13.2 编辑模式
13.3 光标移动
G是大写,要配合shift
vi命令都可以加上数字前缀,5j 可以使光标下移5行
13.4 基本编辑 追加
insert命令做不到
a 命令,在当前光标后追加(进入插入模式)
A命令,在当前行末尾追加(进入插入模式)
新建
删除
剪切复制和粘贴
d 命令不仅删除文本,它还“剪切”文本 。每次我们使用 d 命令,删除的部分被复制到一 个粘贴缓冲区中(看作剪切板)
y命令复制文本
命令
功能
p
粘贴至下一行(无论光标在这一行的哪里)
P
粘贴至上一行(无论光标在这一行的哪里)
合并
13.5 搜索和替换 搜索
行内搜索 用 fa 命令;按 ; 继续行内搜索
搜索整个文件 /
,重复搜索n
即可
全局搜索和替换 :%s/Line /line /g :1,$s /Line /line /g :%s/line /Line /gv
13.6 编辑多个文件 vim file1 file2 file3... // 用vi会出现问题(可能vi不支持) :bn // 切换到下一个文件(强制切换加上!) :bp // 切换到上一个文件 :buffers // 显示缓冲区 :buffer 1
将一个文件的内容复制到另一个文件: 用yy复制buffer切换p粘贴即可
将整个文件插入另一个文件(注意是在光标位置之后 )
:r foo.txt // 在光标位置之后将文件读入并
13.7 保存工作
在命令模式下输入 ZZ 即可
输入:w
另存为 :w foo1.txt
(注意这样是另存为foo1,现在仍在编辑foo )
14. 定制提示符 14.1 分解提示符
14.2 换一种提示符 ps1_old="$PS1" // 首先备份现有的提示符 PS1="$ps1_old" // 恢复原有的提示符 PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\]" // 前一个使输出系统信息为红色,后一个使输入文字信息为黑色
背景颜色
PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]<\u@\h \W>\$"
使用上面的编码,我们将构建一个提示符,每次当这个提示符出现的时候,会在屏幕的上方 画出一个包含时钟(由黄色文本渲染)的红色长条
14.3 保存提示符
PS1="\[ \0 33[s\0 33[0;0H\0 33[0;41m\0 33[K\0 33[1;33m\t \0 33[0m\0 33[u\] <\u @\h \W >\$ " export PS1
15 软件包管理 15.1 打包系统
15.2 软件包的工作方式
Linux系统中几乎所有的软件都可以在互联网上找到。其中大多数软件由发行商以包文件的形式提供,剩下的则以源码形式存在,可以手动安装。
在包管理系统中软件的基本单元是包文件。包文件是一个构成软件包的文件压缩集合。一个软件包可能由大量程序以及支持这些程序的数据文件组成。
系统发行版的用户可以在一个中心资源库中得到这些软件包,这个资 源库可能包含了成千上万个软件包,每一个软件包都是专门为这个系统发行版建立和维护的。
程序很少独立工作;他们需要依靠其他程序的组件来完成他们的工作。现代的软件包管理系统都提供了一些依赖项解析方法,以确保安装软 件包时,其所有的依赖也被安装。
15.3 常见的软件包管理任务 查找
安装
卸载
更新
列出
确认是否安装
显示安装包信息
查找安装了某个文件的包
16 存储介质 16.1存储设备的挂载与卸载
若有光盘:
umount /dev/ hdc // 卸载CDROM(需要root权限) mkdir /mnt/ cdrom // 建立新目录 mount -t iso9660 /dev/ hdc /mnt/ cdrom // 将CDROM挂载到新的挂载点,-t指定文件系统类型
16.2 确定设备名称
tail -f /var/log/messages
对操作系统实时监测,插入设备观察设备名称 ,知道设备名称之后挂载设备
挂载之后设备只要不拔下来,并且系统不重启,设备名称就不会发生变化
用df
命令显示目前在 Linux 系统上的文件系统磁盘使用情况统计
16.3 创建新文件系统 用fdisk修改文件系统 sudo umount /dev/ sdb1 sudo fdisk /dev/ sdb Command (m for help):m // 显示菜单 Command (m for help):p // 显示设备分区表 Command (m for help):l // 显示可能的文件系统列表及对应的id Command (m for help):t // 修改 Hex code (type L to list codes): 83 Command (m for help):w // 保存
使用mkfs创建新的文件系统 make file system
sudo mkfs -t ext3 /dev/ sdb1 // 指定ext4为文件系统类型 sudo mkfs -t vfat /dev/ sdb1 // 指定vfat为文件系统类型
16.4 文件系统的检查与修复
sudo fsck /dev/sdb1
修复损坏的文件系统
已修复的文件会存放在各个文件系统根目录下的lost+found 目录里面
16.5 设备之间直接移动数据
dd if =input_file of=output_file [bs=block_size [count=blocks]] dd if =/dev/ sdb of=/dev/ sdc // 如果连接两个设备到计算机上,它们各自被分配到设备/dev/ sdb和/dev/ sdc 上把第一个驱动器中的所有数据复制到第二个驱动器中 dd if =/dev/ sdb of=flash_drive.img // 如果只有第一个驱动器被连接到计算机上,我们可以把它的内容复制到一个普通文件 中供以后恢复或复制数据
==注意==:
dd命令的功能非常强大,起名取自“data definition”(数据定义),然而有时候也会被成为“destory disk”(摧毁磁盘),因为用户经常不小心输错if 或者of 说明。在Enter之前,一定要检查一遍if of说明 !
向可刻录CD写入数据 写入一个可记录的 CD-ROM(一个 CD-R 或者是 CD-RW)由两步组成
首先,构建一个 iso 映像文件,这就是一个 CD-ROM 的文件系统映像
第二步,把这个映像文件写入到 CD-ROM 媒介中。
创建iso映像文件 dd if =/dev/cdrom of=ubuntu.iso genisoimage -o cd-rom.iso -R -J ~/cd-rom-files
写入CD-ROM中
mkdir /mnt/i so_image // 创建挂载点 mount -t iso9660 -o loop image.iso /mnt/i so_image // 使用mount命令的-o loop选项、指定文件系统类型的-t iso9660选项,将iso映像文件当作设备挂载到文件系统树(可以把它当作真实的CD使用) md5sum image.iso // 使用md5sum命令产生十六进制书校验文件(检查完整性) md5sum /dev/ cdrom
擦除可刻录CD、刻录映像文件
17 联网 17.1 网络检查与监控 ping
traceroute
traceroute程序完整过程:首先它发送一份TTL字段为1的IP数据包给目的主机,处理这个数据包的第一个路由器将TTL值减1,然后丢弃该数据报,并给源主机发送一个ICMP报文(“超时”信息,这个报文包含了路由器的IP地址,这样就得到了第一个路由器的地址),然后traceroute发送一个TTL为2的数据报来得到第二个路由器的IP地址,继续这个过程,直至这个数据报到达目的主机
输出结果中会列出网络流量从本地系统到指定主机的所有跳(hop)数 ,其中没有提供标识信息的路由器用*号表示
ip
ip a
检查系统的网络接口和路由表
当执行日常网络诊断时,要查看的重要信息是每个网络接口第四行开头出现的单词“UP ”, 说明这个网络接口已经生效,还要查看第二行中 inet字段出现的有效 IP 地址。
netstat
netstat
t 程序被用来检查各种各样的网络设置和统计数据。通过此命令的许多选项,我们可以看 看网络设置中的各种特性
使用“-ie”选项,我们能够查看系统中的网络接口
“-r”选项能够显示内核的网络路由表,从中能够看出分组时如何在网络之间传送的
17.2 通过网络来传输文件 ftp
命令
功能
ftp fileserver
连接名叫fileserver的ftp服务器
cd pub/
在大多数匿名的 FTP 服务器中,支持公共 下载的文件都能在目录 pub 下找到
lcd Desktop
将本地目录改为 ~/Desktop,ftp程序工作目录默认在 ~/Desktop下
get …iso
将远程系统文件传至本地,即~/Desktop
bye
登出远程服务器
lftp-更好的ftp:包括多协议支持(包括 HTTP),若下载失败会自动地重新下载, 后台处理,用 tab 按键来补全路径名
wget
wget http://linuxcommand.org/index.php
17.3 与远程主机的通信
ssh(Secure Shell)
SSH 由两部分组成。 (必须都要安装 )
1.SSH服务端运行在远端主机上,在端口 22 上监听收到的外部连接
2.SSH客户端用在本地系统中,用来和远端服务器通信
命令
功能
ssh bob@remote-sys
以用户bob的身份连接远程主机
ssh remote-sys free
在远程主机上运行free命令并在本地显示结果
ssh remote-sys 'ls *' > dirlist.txt
输出到本地主机文件(ls命令用单引号括起来防止在本地展开)
ssh remote-sys 'ls * > dirlist.txt'
输出到远程主机(注意单引号位置)
ssh -X remote-sys;xload
在远程主机上运行xload窗口出现在本地主机(-X传界面)
scp与sftp scp
scp(安全复制)被用来复制文件,与熟悉的 cp 程序非常相似。最显著的区别就是 源或者目标 路径名要以远端主机的名字,后跟一个冒号字符开头
scp bob@remote -sys:document .txt
sftp
18 查找文件 18.1 locate查找文件
18.2 find-复杂的文件的查找方法
测试条件 find ~ -type d | wc -l find ~ -type f | wc -l find ~ -type f -name "*.JPG" -size +1 M | wc -l
操作符
查找权限不为0600的文件和权限不为0700的目录
find ~ \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \)
注意默认使用and 以及括号组合字符
对于被分隔的表达式,不一定默认求值 expr1 -operator expr2
预定义操作
find ~ -type f -name '*.bak' -print //先筛选再print find ~ -print -type f -name '*.bak' //先print 再筛选
在使用delete
命令之前,先用print检查输出,确保万无一失
自定义操作
find的-exec选项
command是命令名, {} 是代表当前路径名的符号, ; 作为分隔符,表示命令结束(需要转义,用\ 和 ‘’ 都可以)
-exec command {} ; find ~ -type f -name '.*' -exec ls -l '{}' ';' find ~ -type f -name '.*' -ok ls -l '{}' ';'
提高效率 (使用xargs 或者find命令自身新特性)
将结尾的分号改成加号,就能让find命令将查找结果组合成参数列表,共指定的命令一次性使用
find ~ -type f -name '.*' -exec ls -l '{}' +
虽然得到一样的结果,但是只执行了一次ls命令
xargs
从标注输入接受输入,将其转换为指定命令的参数列表
命令参数数量不是无限制的,超出shell支持的最大参数xargs会重复使用最大参数直至完成
find ~ -type f -name '.*' -print | xargs ls -l //find 命令的输出结果通过管道传给了xargs命令,后者构造ls 命令的参数列表,然后执行该命令find ~ -type f -name '.*' -print | xargs --show-limits ls -l //执行xargs 时加入--show-limits显示最大支持参数(注意是在xargs命令后面加入)
18.3 实战演练
mkdir -p
命令创建指定路径的父目录以及子目录
touch
命令通常被用来设置或更新文件的访问,更改,和修改时间 。如果一个文件名参数是一个不存在的文件,则会创建一个空文件 。
[me@linuxbox ~]$ mkdir -p playground/dir-{00 {1. .9 },0 {10. .99 },100 } [me@linuxbox ~]$ touch playground/dir-{00 {1. .9 },0 {10. .99 },100 }/file-{A..Z} [me@linuxbox ~]$ find playground -type f -name 'file-A' | wc -l [me@linuxbox ~]$ touch playground/timestamp [me@linuxbox ~]$ stat playground/timestamp [me@linuxbox ~]$ touch playground/timestamp [me@linuxbox ~]$ stat playground/timestamp [me@linuxbox ~]$ find playground -type f -name 'file-B' -exec touch '{}' ';' [me@linuxbox ~]$ find playground -type f -newer playground/timestamp [me@linuxbox ~]$ find playground \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \) [me@linuxbox ~]$ find playground \( -type f -not -perm 0600 -exec chmod 0600 '{}' ';' \) -or \( -type d -not -perm 0711 -exec chmod 0700 '{}' ';' \)
18.4 find命令选项
19 归档与备份 19.1 文件压缩 gzip gzip foo.txt gzip -tv foo.txt.gz // 没有v只验证完整性不输出结果 gunzip foo.txt // 解压,不用带.gz 的后缀名ls -l /etc | gzip > foo.txt.gz // 输出直接压缩成文件(加上后缀表名是压缩过的) gunzip -c foo.txt.gz | less // 只查看压缩文件的文本内容(注意-c后缀的作用) zcat foo.txt.gz | less // 等同于-c的gzip
bzip2
用法与gzip差不多
扩展名为.bz2
牺牲压缩速度实现了更高的压缩率
二次压缩
二次压缩并不会节省空间,所有压缩技术都涉及额外信息,用来描述压缩过程
尝试压缩不包含任何冗余信息的文件,省下来的空间不足以抵消额外信息使用的空间
19.2 文件归档
文件归档:收集多个文件将其组合成一个大文件(可以同时压缩)
tar
f选项指定名称,是必须的,“-”不是必须的
v选项获得详细清单
tar命令从归档中提取出来的文件所有权属于执行提取操作的用户,而非原先的用户(超级用户操作除外)
tar命令归档、提取都是 相对路径
归档tar,归档压缩tgz、tbz
tar mode[options] pathname tar cf playground.tar playground tar tvf playground.tar
sudo tar cf /media/ BigDisk/home.tar / home // 硬盘自动挂载在/media目录下// 卸载硬盘接入另一台计算机 cd / / /提取归档是相对路径,不进入根目录就会出现/ home/usr/ home... sudo tar xf /media/ BigDisk/home.tar
tar xf archive.tar pathname // 只提取指定文件,可多指定 tar xf ../playground2.tar --wildcards 'home/ playground/dir-*/ file-A' //提取所有的fileA,--wildcards加入对通配符的支持
find playground -name 'file-A' -exec tar rvf playground.tar '{}' '+'
可以通过find查找更新的文件,创建上一次归档之后出现的那些文件的归档
find playground -name 'file-A' | tar cvf - --files-from =- | gzip > playground.tgz find playground -name 'file-A' | tar czf playground.tgz -T -
ssh remote-sys 'tar cf - Documents' | tar xf - // 在远程主机上执行tar命令,标准输出传到本地主机,本地主机把标准输出提取(x命令)
zip
zip既能压缩也能归档(gzip、bzip2在linux上才是主流)
zip与tar不同之处在于,如果内容已存在(同名),zip是添加新文件并且替换 ,而tar是直接替换
zip options zipfile file zip -r playground.zip playground unzip playground.zip unzip -l playground.zip playground/dir -087/file -Z
zip 的标准输入输出(unzip不接受标准输入)
find playground -name "file-A" | zip -@ file -A.zip ls -l /etc/ | zip ls -etc.zip - unzip -p ls -etc.zip | less
19.3 同步文件与目录
rsync 远程更新协议
这里 source 和 destination 是下列选项之一: • 一个本地文件或目录 • 一个远端文件或目录,以 [user@]host:path的形式存在 • 一个远端 rsync 服务器,由rsync://[user@]host[:port]/path指定
rsync options source destination rsync -av playground foo rsync source / destination / /source下的所有文件不包括自身被同步,只复制目录不复制目录本身
mkdir /media/BigDisk/backup sudo rsync -av --delete /etc /home /usr/local /media/BigDisk/bcakup // 添加--delete 选项,用于删除存在于备份设备而原设备不存在的文件// alias backup='sudo rsync -av --delete /etc /home /usr/local /media/BigDisk/bcakup ' 定义别名备份更方便
sudo rsync -av --delete --rsh=ssh /etc /home /usr/local remote-sys:/backup // 加入--rsh=ssh 选项,用于指示rsync用远程shell备份
20.正则表达式 https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md
21. 文本处理