echo命令
echo命令:用于在shell中打印shell变量的值,或者直接输出指定的字符串。
格式:
echo [SHORT-OPTION]... [STRING]...
echo LONG-OPTION
参数:
-e:激活转义字符。
使用-e选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
例子:
# 用echo命令打印带有色彩的文字:
# 文字色:
echo -e "\e[1;31mThis is red text\e[0m"
This is red text
\e[1;31m 将颜色设置为红色
\e[0m 将颜色重新置回
颜色码:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37
# 背景色:
echo -e "\e[1;42mGreed Background\e[0m"
Greed Background
# 颜色码:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47
# 文字闪动:
echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m"
# 红色数字处还有其他数字参数:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐
printf命令
printf命令:式化并输出结果到标准输出。
格式:
printf FORMAT [ARGUMENT]...
printf OPTION
参数:
格式替代符
%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位的八进制值字符
例子:
# 打印hello world
[root@xxx ~]# printf "hello world"
hello world[root@xxx ~]#
# 按照相应格式对齐
[root@xxx ~]# printf "%-5s %-10s %-4s\n" NO Name Mark
NO Name Mark
[root@xxx ~]# printf "%-5s %-10s %-4.2f\n" 01 Tom 90.3456
01 Tom 90.35
rpm命令
rpm命令:RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
格式:
QUERYING AND VERIFYING PACKAGES:
rpm {-q|--query} [select-options] [query-options]
rpm {-V|--verify} [select-options] [verify-options]
INSTALLING, UPGRADING, AND REMOVING PACKAGES:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
MISCELLANEOUS:
rpm {--querytags|--showrc}
rpm {--setperms|--setugids} PACKAGE_NAME ...
参数:
-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 --nodeps -i来忽略此信息,也就是说rpm -i --force --nodeps可以忽略所有依赖关系和文件问题,什么包都能安装上,但这种强制安装的软件包不能保证完全发挥功能。
[root@xxx ~]# rpm -ivh your-package.rpm
# 安装src.rpm软件包
# 方法1
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
# 方法2
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 proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
rpm -e proftpd
有时会出现一些错误或者警告:
... is needed by ...
这说明这个软件被其他软件需要,不能随便卸载,可以用rpm -e --nodeps强制卸载
查看系统安装的rpm包
[root@xxx ~]# rpm -qa | head -5
iwl2000-firmware-18.168.6.1-69.el7.noarch
libglvnd-glx-1.0.1-0.8.git5baa1e5.el7.x86_64
ustr-1.0.4-16.el7.x86_64
iwl7260-firmware-22.0.7.0-69.el7.noarch
mesa-libEGL-18.0.5-4.el7_6.x86_64
····
查看rpm安装的路径
[root@xxx ~]# rpm -ql mesa-libEGL-18.0.5-4.el7_6.x86_64
/usr/lib64/libEGL_mesa.so.0
/usr/lib64/libEGL_mesa.so.0.0.0
/usr/share/glvnd/egl_vendor.d/50_mesa.json
查看某个程序是哪个软件包安装的,或哪个软件包包含这个程序
# 返回软件的全名
[root@xxx ~]# rpm -qf `which ifconfig`
net-tools-2.0-0.24.20131004git.el7.x86_64
# 返回软件包的有关信息
[root@xxx ~]# rpm -qif `which ifconfig`
Name : net-tools
Version : 2.0
Release : 0.24.20131004git.el7
Architecture: x86_64
Install Date: Sun 07 Jul 2019 02:17:17 PM EDT
Group : System Environment/Base
Size : 939930
License : GPLv2+
Signature : RSA/SHA256, Mon 12 Nov 2018 09:41:01 AM EST, Key ID 24c6a8a7f4a80eb5
Source RPM : net-tools-2.0-0.24.20131004git.el7.src.rpm
Build Date : Tue 30 Oct 2018 12:40:50 PM EDT
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://sourceforge.net/projects/net-tools/
Summary : Basic networking tools
Description :
The net-tools package contains basic networking tools,
including ifconfig, netstat, route, and others.
Most of them are obsolete. For replacement check iproute package.
# 返回软件包的文件列表
[root@xxx ~]# rpm -qlf `which ifconfig`
/bin/netstat
/sbin/arp
/sbin/ether-wake
/sbin/ifconfig
····
查看某个文件是哪个软件包安装的,或者哪个软件包包含这个文件。
[root@xxx ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
[root@xxx ~]# rpm -qf /usr/bin/ls
coreutils-8.22-23.el7.x86_64
yum命令
yum命令:Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
格式:yum [options] [command] [package ...]
参数:
-h:显示帮助信息;
-y:对所有的提问都回答“yes”;
-c:指定配置文件;
-q:安静模式;
-v:详细模式;
-d:设置调试等级(0-10);
-e:设置错误等级(0-10);
-R:设置yum处理一个命令的最大等待时间;
-C:完全从缓存中运行,而不去下载或者更新任何头文件。
install:安装rpm软件包;
update:更新rpm软件包;
check-update:检查是否有可用的更新rpm软件包;
remove:删除指定的rpm软件包;
list:显示软件包的信息;
search:检查软件包的信息;
info:显示指定的rpm软件包的描述信息和概要信息;
clean:清理yum过期的缓存;
shell:进入yum的shell提示符;
resolvedep:显示rpm软件包的依赖关系;
localinstall:安装本地的rpm软件包;
localupdate:显示本地rpm软件包进行更新;
deplist:显示rpm软件包的所有依赖关系。
例子:
部分常用的命令包括:
- 自动搜索最快镜像插件:
yum install yum-fastestmirror
- 安装yum图形窗口插件:
yum install yumex
- 查看可能批量安装的列表:
yum grouplist
安装
yum install #全部安装
yum install package1 #安装指定的安装包package1
yum groupinsall group1 #安装程序组group1
更新和升级
yum update #全部更新
yum update package1 #更新指定程序包package1
yum check-update #检查可更新的程序
yum upgrade package1 #升级指定程序包package1
yum groupupdate group1 #升级程序组group1
查找和显示
yum info package1 #显示安装包信息package1
yum list #显示所有已经安装和可以安装的程序包
yum list package1 #显示指定程序包安装情况package1
yum groupinfo group1 #显示程序组group1信息yum search string 根据关键字string查找安装包
删除程序
yum remove | erase package1 #删除程序包package1
yum groupremove group1 #删除程序组group1
yum deplist package1 #查看程序package1依赖情况
清除缓存
yum clean packages #清除缓存目录下的软件包
yum clean headers #清除缓存目录下的 headers
yum clean oldheaders #清除缓存目录下旧的 headers
watch命令
watch命令:周期性的方式执行给定的指令,指令输出以全屏方式显示。
格式: watch [options] command
参数:
-n:指定指令执行的间隔时间(秒);
-d:高亮显示指令输出信息不同之处;
-t:不显示标题。
例子:
# 不显示标题
[root@xxx ~]# watch -t uptime
# 高亮显示指令输出信息不同之处
[root@xxx ~]# watch -d uptime
alias命令
alias命令:用来设置指令的别名。
格式:
alias 新的命令='原命令 -选项/参数'
例子:
# 查看alias别名
[root@xxx ~]# 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'
unalias命令
unalias命令:取消指令的别名
例子:
# 取消cp -i的别名
[root@xxx ~]# unalias cp
clear命令
clear命令:清除屏幕,简称清屏。
例子:
[root@xxx ~]# clear
history命令
history命令:显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。
参数
-c:清空当前历史命令;
-a:将历史命令缓冲区中命令写入历史命令文件中;
-r:将历史命令文件中的命令读入当前历史命令缓冲区;
-w:将当前历史命令缓冲区命令写入历史命令文件中。
例子:
# 显示最近的5条命令
[root@xxx ~]# history 5
691 man alias
692 alias
693 unalias cp
694 alias
695 history 5
eject命令
eject命令:用来退出抽取式设备。若设备已挂入,则eject命令会先将该设备卸除再退出。
参数:
-a<开关>或--auto<开关>:控制设备的自动退出功能;
-c<光驱编号>或--changerslut<光驱编号> 选择光驱柜中的光驱;
-d或--default:显示预设的设备,而不是实际执行动作;
-f或--floppy:退出抽取式磁盘;
-h或--help:显示帮助;
-n或--noop:显示指定的设备;
-q或--tape:退出磁带;
-r或--cdrom:退出光盘;
-s或--scsi:以SCSI指令来退出设备;
-t或--trayclose:关闭光盘的托盘;
-v或--verbose:执行时,显示详细的说明。
time命令
time命令:计算命令执行时间。
参数
-o:将执行时间写入到文件中
-a:追加信息
-f:格式化时间输出(centos7用不了?未确定)
-f
选项后的参数:
参数 | 描述 |
---|---|
%E | real时间,显示格式为[小时:]分钟:秒 |
%U | user时间。 |
%S | sys时间。 |
%C | 进行计时的命令名称和命令行参数。 |
%D | 进程非共享数据区域,以KB为单位。 |
%x | 命令退出状态。 |
%k | 进程接收到的信号数量。 |
%w | 进程被交换出主存的次数。 |
%Z | 系统的页面大小,这是一个系统常量,不用系统中常量值也不同。 |
%P | 进程所获取的CPU时间百分百,这个值等于user+system时间除以总共的运行时间。 |
%K | 进程的平均总内存使用量(data+stack+text),单位是KB。 |
%w | 进程主动进行上下文切换的次数,例如等待I/O操作完成。 |
%c | 进程被迫进行上下文切换的次数(由于时间片到期)。 |
例子:
参数分析:
- real时间是指挂钟时间,也就是命令开始执行到结束的时间。这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。
- user时间是指进程花费在用户模式中的CPU时间,这是唯一真正用于执行进程所花费的时间,其他进程和花费阻塞状态中的时间没有计算在内。
- sys时间是指花费在内核模式中的CPU时间,代表在内核中执系统调用所花费的时间,这也是真正由进程使用的CPU时间。
# 查看ls执行时间
[root@xxx ~]# time ls
1.txt etc.tar.gz sent test2
anaconda-ks.cfg mongodb-linux-x86_64-rhel70-4.0.10.tgz test test3
boy pwd test1 test6
real 0m0.002s
user 0m0.002s
sys 0m0.000s
nc命令
nc命令:功能强大的网络工具。
格式: ncat [OPTIONS...] [hostname] [port]
参数
-g<网关>:设置路由器跃程通信网关,最多设置8个;
-G<指向器数目>:设置来源路由指向器,其数值为4的倍数;
-h:在线帮助;
-i<延迟秒数>:设置时间间隔,以便传送信息及扫描通信端口;
-l:使用监听模式,监控传入的资料;
-n:直接使用ip地址,而不通过域名服务器;
-o<输出文件>:指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存;
-p<通信端口>:设置本地主机使用的通信端口;
-r:指定源端口和目的端口都进行随机的选择;
-s<来源位址>:设置本地主机送出数据包的IP地址;
-u:使用UDP传输协议;
-v:显示指令执行过程;
-w<超时秒数>:设置等待连线的时间;
-z:使用0输入/输出模式,只在扫描通信端口时使用。
例子:
远程拷贝文件
从server1拷贝文件到server2上。需要先在server2上,用nc激活监听。
server2上运行:
[root@localhost2 tmp]# nc -lp 1234 > install.log
server1上运行:
[root@localhost1 ~]# ll install.log
-rw-r–r– 1 root root 39693 12月 20 2007 install.log
[root@localhost1 ~]# nc -w 1 192.168.228.222 1234 < install.log
克隆硬盘或分区
操作与上面的拷贝是雷同的,只需要由dd获得硬盘或分区的数据,然后传输即可。克隆硬盘或分区的操作,不应在已经mount的的系统上进行。所以,需要使用安装光盘引导后,进入拯救模式(或使用Knoppix工 具光盘)启动系统后,在server2上进行类似的监听动作:
nc -l -p 1234 | dd of=/dev/sda
server1上执行传输,即可完成从server1克隆sda硬盘到server2的任务:
dd if=/dev/sda | nc 192.168.228.222 1234
完成上述工作的前提,是需要落实光盘的拯救模式支持服务器上的网卡,并正确配置IP。
端口扫描
nc -v -w 1 192.168.228.222 -z 1-1000
localhost2 [192.168.228.222] 22 (ssh) open
保存Web页面
while true; do
nc -l -p 80 -q 1 < somepage.html;
done
聊天
nc还可以作为简单的字符下聊天工具使用,同样的,server2上需要启动监听:
[root@localhost2 tmp]# nc -lp 1234
server1上传输:
[root@localhost1 ~]# nc 192.168.228.222 1234
这样,双方就可以相互交流了。使用Ctrl+D正常退出。
传输目录
从server1拷贝nginx-0.6.34目录内容到server2上。需要先在server2上,用nc激活监听,server2上运行:
[root@localhost2 tmp]# nc -l 1234 | tar xzvf -
server1上运行:
[root@localhost1 ~]# ll -d nginx-0.6.34
drwxr-xr-x 8 1000 1000 4096 12-23 17:25 nginx-0.6.34
[root@localhost1 ~]# tar czvf – nginx-0.6.34 | nc 192.168.228.222 1234
xargs命令
xargs命令:给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。
例子:
xargs用作替换工具,读取输入数据重新格式化后输出。
定义一个测试文件,内有多行文本数据:
cat test.txt
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z
多行输入单行输出:
cat test.txt | xargs
a b c d e f g h i j k l m n o p q r s t u v w x y z
-n选项多行输出:
cat test.txt | xargs -n3
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z
-d选项可以自定义一个定界符:
echo "nameXnameXnameXname" | xargs -dX
name name name name
结合-n选项使用:
echo "nameXnameXnameXname" | xargs -dX -n2
name name
name name
读取stdin,将格式化后的参数传递给命令
假设一个命令为 sk.sh 和一个保存参数的文件arg.txt:
#!/bin/bash
#sk.sh命令内容,打印出所有参数。
echo $*
arg.txt文件内容:
cat arg.txt
aaa
bbb
ccc
xargs的一个选项-I,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次:
cat arg.txt | xargs -I {} ./sk.sh -p {} -l
-p aaa -l
-p bbb -l
-p ccc -l
xargs结合find使用
用rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用xargs去避免这个问题:
find . -type f -name "*.log" -print0 | xargs -0 rm -f
xargs -0将\0作为定界符。
统计一个源代码目录中所有php文件的行数:
find . -type f -name "*.php" -print0 | xargs -0 wc -l
查找所有的jpg 文件,并且压缩它们:
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
xargs其他应用
假如你有一个文件包含了很多你希望下载的URL,你能够使用xargs下载所有链接:
cat url-list.txt | xargs wget -c
exec命令
exec命令:用于调用并执行指令的命令。exec命令通常用在shell脚本程序中,可以调用其他的命令。如果在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端。
格式:exec(选项)(参数)
参数:
-c:在空环境中执行指定的命令
例子:
[root@xxx ~]# echo "hello world"
hello world
[root@xxx ~]# exec -c echo "hello world"
hello world
export命令
export命令:用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。
参数:
-f:代表[变量名称]中为函数名称;
-n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中;
-p:列出所有的shell赋予程序的环境变量。
例子:
# 查看环境变量
[root@xxx ~]# export
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="xxx"
declare -x LANG="en_US.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
···
unset命令
unset命令:删除已定义的shell变量(包括环境变量)和shell函数。unset命令不能够删除具有只读属性的shell变量和环境变量。
参数:
-f:仅删除函数;
-v:仅删除变量。
例子:
[root@xxx ~]# unset -v xxx
type命令
type命令:用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令。
命令类型:
- alias:别名。
- keyword:关键字,Shell保留字。
- function:函数,Shell函数。
- builtin:内建命令,Shell内建命令。
- file:文件,磁盘文件,外部命令。
- unfound:没有找到。
参数
-t:输出“file”、“alias”或者“builtin”,分别表示给定的指令为“外部指令”、“命令别名”或者“内部指令”;
-p:如果给出的指令为外部指令,则显示其绝对路径;
-a:在环境变量“PATH”指定的路径中,显示给定指令的信息,包括命令别名。
例子:
# 显示命令别名和路径
[root@xxx ~]# type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
bc命令
bc命令:一种支持任意精度的交互执行的计算器语言。
参数
-i:强制进入交互式模式;
-l:定义使用的标准数学库;
-w:对POSIX bc的扩展给出警告信息;
-q:不打印正常的GNU bc环境信息;
-v:显示指令版本信息;
-h:显示指令的帮助信息。
例子:
[root@xxx ~]# echo "sqrt(100)" | bc
10