rcp

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 。

2024-08-08    
read

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示例

2024-08-08    
readelf

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 <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选项载入。 

实例

先给出如下例子:

2024-08-08    
readonly

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",输入如下命令:

2024-08-08    
reboot

reboot

重新启动正在运行的Linux操作系统

补充说明

reboot命令 用来重新启动正在运行的Linux操作系统。

语法

reboot(选项)

选项

-d:重新开机时不把数据写入记录文件/var/tmp/wtmp。本参数具有“-n”参数效果;
-f:强制重新开机,不调用shutdown指令的功能;
-i:在重开机之前,先关闭所有网络界面;
-n:重开机之前不检查是否有未结束的程序;
-w:仅做测试,并不真正将系统重新开机,只会把重开机的数据写入/var/log目录下的wtmp记录文件。

实例

reboot        //重开机。
reboot -w     //做个重开机的模拟(只有纪录并不会真的重开机)。
2024-08-08    
reject

reject

指示打印系统拒绝发往指定目标打印机的打印任务

补充说明

reject命令 属于CUPS套件,用于指示打印系统拒绝发往指定目标打印机的打印任务。

语法

reject(选项)(参数)

选项

-E:当连接到服务器时强制使用加密;
-U:指定连接服务器时使用的用户名;
-h:指定连接服务器名和端口号;
-r:指定拒绝打印任务的原因。

参数

目标:指定目标打印机。

2024-08-08    
rename

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

2024-08-08    
renice

renice

修改正在运行的进程的调度优先级

补充说明

renice命令 可以修改正在运行的进程的调度优先级。预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权。只有系统管理者可以改变其他用户程序的优先权,也仅有系统管理者可以设置负数等级。

语法

renice(选项)(参数)

选项

-g:指定进程组id;
-p<程序识别码>:改变该程序的优先权等级,此参数为预设值。
-u:指定开启进程的用户名。

参数

进程号:指定要修改优先级的进程。

实例

将行程id为987及32的行程与行程拥有者为daemon及root的优先序号码加1:

renice 1 987 -u daemon root -p 32

注意:每一个行程都有一个唯一的id。

2024-08-08    
repquota

repquota

报表的格式输出磁盘空间限制的状态

补充说明

repquota命令 以报表的格式输出指定分区,或者文件系统的磁盘配额信息。

语法

repquota(选项)(参数)

选项

-a:列出在/etc/fstab文件里,有加入quota设置的分区的使用状况,包括用户和群组;
-g:列出所有群组的磁盘空间限制;
-u:列出所有用户的磁盘空间限制;
-v:显示该用户或群组的所有空间限制。

参数

文件系统:要打印报表的文件系统或者对应的设备文件名。

实例

显示所有文件系统的磁盘使用情况

repquota -a
2024-08-08    
resize

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
2024-08-08