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 。
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示例
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文件:
- 可重定位文件:用户和其他目标文件一起创建可执行文件或者共享目标文件,例如lib*.a文件。
- 可执行文件:用于生成进程映像,载入内存执行,例如编译好的可执行文件a.out。
- 共享目标文件:用于和其他共享目标文件或者可重定位文件一起生成elf目标文件或者和执行文件一起创建进程映像,例如lib*.so文件。
ELF文件作用:
ELF文件参与程序的连接(建立一个程序)和程序的执行(运行一个程序),所以可以从不同的角度来看待elf格式的文件:
- 如果用于编译和链接(可重定位文件),则编译器和链接器将把elf文件看作是节头表描述的节的集合,程序头表可选。
- 如果用于加载执行(可执行文件),则加载器则将把elf文件看作是程序头表描述的段的集合,一个段可能包含多个节,节头表可选。
- 如果是共享文件,则两者都含有。
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 <number or name>
--hex-dump=<number or name> 以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选项载入。
实例
先给出如下例子:
readonly
标记shell变量或函数为只读
语法
readonly [-aAf] [name[=value] ...]
readonly -p
主要用途
- 定义一到多个变量并设置只读属性。
- 为已定义的一到多个变量设置只读属性。
- 显示全部包含只读属性的变量。
- 为已定义的一到多个函数设置只读属性。
- 显示全部包含只读属性的函数。
选项
-a:指向数组。
-A:指向关联数组。
-f:指向函数。
-p:显示全部只读变量。
--:在它之后的选项无效。
参数
name(可选):变量名或函数名
value(可选):变量的值
返回值
readonly返回true除非你提供了非法选项或非法名称。
例子
# 定义变量并增加只读属性
readonly var1=13 var2
readonly -a arr1=(1 2 3 4 5) arr2=('z' 'x' 'c')
# 必须有 '-A' 选项
readonly -A dict1=(['key1']='value1')
# 先定义变量、函数,然后再为它们添加只读属性
max=3
readonly max
# 数组定义时可以不加 `declare -a`
seasons=('spring' 'summer' 'autumn' 'winter')
# 为数组添加只读属性时可以不加 `-a` 选项
readonly seasons
declare -A man=(['age']=23 ['height']='190cm')
# 为关联数组添加只读属性时可以不加 `-A` 选项
readonly man
function foo(){ echo 'bar'; }
# 为函数添加只读属性时必须加 `-f` 选项
readonly -f foo
# 显示全部只读变量,以下两个命令的显示结果一样
readonly
readonly -p
# 显示全部拥有只读属性的数组
readonly -a
# 显示全部拥有只读属性的关联数组
readonly -A
# 显示全部拥有只读属性的函数
readonly -f
常见错误
对于只读变量而言,若用户对其值进行修改,则会立即报错。例如,使用该指令定义一个只读变量"test",并且将其值初始化为"ok",输入如下命令:
reboot
重新启动正在运行的Linux操作系统
补充说明
reboot命令 用来重新启动正在运行的Linux操作系统。
语法
reboot(选项)
选项
-d:重新开机时不把数据写入记录文件/var/tmp/wtmp。本参数具有“-n”参数效果;
-f:强制重新开机,不调用shutdown指令的功能;
-i:在重开机之前,先关闭所有网络界面;
-n:重开机之前不检查是否有未结束的程序;
-w:仅做测试,并不真正将系统重新开机,只会把重开机的数据写入/var/log目录下的wtmp记录文件。
实例
reboot //重开机。
reboot -w //做个重开机的模拟(只有纪录并不会真的重开机)。
reject
指示打印系统拒绝发往指定目标打印机的打印任务
补充说明
reject命令 属于CUPS套件,用于指示打印系统拒绝发往指定目标打印机的打印任务。
语法
reject(选项)(参数)
选项
-E:当连接到服务器时强制使用加密;
-U:指定连接服务器时使用的用户名;
-h:指定连接服务器名和端口号;
-r:指定拒绝打印任务的原因。
参数
目标:指定目标打印机。
rename
用字符串替换的方式批量改变文件名
补充说明
rename命令存在两个版本用法上有所区别
C语言版本, 支持通配符
[常用通配符说明]
? 表示一个任意字符
* 表示一个或一串任意字符
Perl版本, 支持正则表达式
[常用正则表达式符号说明]
^ 匹配输入的开始位置
$ 匹配输入的结尾
. 匹配除换行符外的任意字符
+ 匹配前一个字符一次或多次 例如,"zo+"可以匹配"zoo",但不匹配"z"
[a-z] 表示某个范围内的字符,例如,"[a-z]"匹配"a"与"z"之间的任何一个小写字母字符。
[^m-z] 否定的字符区间。与不在指定区间内的字符匹配。
区分方法: rename --version
如果返回结果中包含 util-linux , 说明是C语言版本, 反之是Perl版本
# Perl版本 | Ubuntu(18),Mint(20)默认的是Perl版本
$ rename --version
/usr/bin/rename using File::Rename version 1.10
# C语言版本 | Centos(7)默认的是C语言版本
$ rename --version
rename,来自 util-linux 2.23.2
语法
# Perl版本
rename [ -h|-m|-V ] [ -v ] [ -0 ] [ -n ] [ -f ] [ -d ] [ -e|-E perlexpr]*|perlexpr [ files ]
# C语言版本
rename [选项] 表达式 替换的字符 文件...
参数
# Perl版本
-v, --verbose
详细:成功重命名的文件的打印名称。
-0, --null
从STDIN读取时,请使用\0作为记录分隔符
-n, --nono
不执行任何操作:打印要重命名的文件名,但不重命名。
-f, --force
覆盖:允许覆盖现有文件
--path, --fullpath
重命名完整路径:包括任何目录组件。默认
-d, --filename, --nopath, --nofullpath
不重命名目录:仅重命名路径的文件名部分
-h, --help
帮助:打印提要和选项。
-m, --man
手册: 打印手册页.
-V, --version
版本: 显示版本号.
-e 表达: 作用于文件名的代码.
可以重复来构建代码(比如“perl-e”)。如果没有-e,则第一个参数用作代码。
-E 语句:对文件名执行操作的代码,如-e,但终止于 ';'.
# C语言版本
-v, --verbose
提供视觉反馈,其中重命名了哪些文件(如果有的话)
-V, --version
显示版本信息并退出。
-s, --symlink
在符号链接目标上执行重命名
-h, --help
显示帮助文本并退出
实例
Perl版本
将1.txt 2.txt重命名为1.log 2.log
renice
修改正在运行的进程的调度优先级
补充说明
renice命令 可以修改正在运行的进程的调度优先级。预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权。只有系统管理者可以改变其他用户程序的优先权,也仅有系统管理者可以设置负数等级。
语法
renice(选项)(参数)
选项
-g:指定进程组id;
-p<程序识别码>:改变该程序的优先权等级,此参数为预设值。
-u:指定开启进程的用户名。
参数
进程号:指定要修改优先级的进程。
实例
将行程id为987及32的行程与行程拥有者为daemon及root的优先序号码加1:
renice 1 987 -u daemon root -p 32
注意:每一个行程都有一个唯一的id。
repquota
报表的格式输出磁盘空间限制的状态
补充说明
repquota命令 以报表的格式输出指定分区,或者文件系统的磁盘配额信息。
语法
repquota(选项)(参数)
选项
-a:列出在/etc/fstab文件里,有加入quota设置的分区的使用状况,包括用户和群组;
-g:列出所有群组的磁盘空间限制;
-u:列出所有用户的磁盘空间限制;
-v:显示该用户或群组的所有空间限制。
参数
文件系统:要打印报表的文件系统或者对应的设备文件名。
实例
显示所有文件系统的磁盘使用情况
repquota -a
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