Linux笔记3

1、Httpd服务
1、先检查本机的httpd服务是否开启,使用命令:
service --status-all | grep httpd

2、开启httpd服务
Service httpd start/stop/restart/status

为确保是否开启成功,请再重新检查一次

3、我们进入到/var/www/html目录下,新建一个huangbo.html文件,往文件里加入一个字符串”huangbo wangbaoqiang xuzheng”,然后保存
cd /var/www/html
vi huangbo.html

4、在windows系统中,打开浏览器,在url地址栏输入:http://192.168.123.202/huangbo.html
看看是不是能看到我们往里加入到文件当中的字符串:huangbo wangbaoqiang xuzheng,如果看到如下效果,则证明httpd服务使用成功

5、在我们进入到/var/www/html目录下,新建一个mingxing文件夹,往文件夹新建一个文件wangbaoqiang.jpg,然后保存,访问http://192.168.123.202/mingxing

2、系统管理
2.1、挂载外部设备
挂载是一个非常重要的功能,使用非常频繁。它指将一个设备(通常是存储设备,可以挂载光盘、硬盘、磁带、光盘镜像文件等)挂接到一个已存在的目录上(这个目录可以不为空,但挂载后这个目录下以前的内容将不可用)。

需要理解的是,Linux操作系统将所有的设备都看作文件,它将整个计算机的资源都整合成一个大的文件目录。我们要访问存储设备中的文件,必须将文件所在的分区挂载到一个已存在的目录上,然后通过访问这个目录来访问存储设备。

挂载需要有挂载源和挂载点

1、挂载光驱
在常用挂载目录/mnt下创建一个目录cdrom用来进行挂载:
mkdir /mnt/cdrom
将挂载源设备/dev/cdrom挂载到该挂载点(/mnt/cdrom)上:
mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/

注:-t:文件系统类型,iso9660表示光盘或者光盘镜像
-o:挂载方式,ro表示以只读方式,loop表示把挂载的设备当做一个磁盘分区

2、挂载光盘镜像文件(.iso文件)
我们准备一个镜像文件:CentOS-6.7-x86_64-bin-DVD1.iso
再准备一个挂载目录:mkdir /mnt/centos
mount -t iso9660 -o loop /root/CentOS-6.7-x86_64-bin-DVD1.iso /mnt/centos

3、挂载的资源在重启后即失效,需要重新挂载。要想自动挂载(永久挂载),可以将挂载信息设置到(vim修改) /etc/fstab配置文件中,如下:(见视频)
/dev/cdrom /mnt/cdrom iso9660 defaults 0 0
/root/CentOS-6.7-x86_64-bin-DVD1.iso /mnt/centos iso9660 defaults,ro,loop 0 0

第一列:/dev/cdrom:挂载源,要挂在的磁盘分区或者存储设备,或者文件系统
第二列:/mnt/cdrom:挂载点,挂载位置
第三列:iso9660:文件系统类型,ext4文件系统,swap表示交换分区,……
第四列:defaults:挂载参数
第五列:0:表示dump选项,dump工具通过这个选项位置上的数字来决定文件系统是否需要备份。如果是0,dump就会被忽略,事实上大多数的dump设置都是0
第六列:0:读取文件系统时候的检查顺序,允许的数字是0,1,2,根目录应当获得最高的优先权 1, 其它所有需要被检查的设备设置为2,0表示不检查

4、卸载,使用umount命令,会卸载永久挂载
umount /mnt/cdrom
2.2、统计文件或者文件夹大小
1、存储空间查看
df -h

2、统计指定路径下的所有子目录和文件的大小
du -sh /mnt/cdrom/packages

2.3、系统服务管理
1、跟服务相关的基本使用命令:
service --status-all # 查看系统所有的后台服务进程
service sshd status # 查看指定的后台服务进程的状态
service sshd stop # 停止
service sshd start # 开始
service sshd restart # 重启

2、配置后台服务进程的开机自启
chkconfig httpd on ## 让httpd服务开机自启
chkconfig httpd off ## 让httpd服务开机不要自启
[root@hadoop01 mnt]# chkconfig httpd off
[root@hadoop01 mnt]# chkconfig --list | grep httpd
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
打开3,5
[root@hadoop01 mnt]# chkconfig --level 35 httpd on
[root@hadoop01 mnt]# chkconfig --list | grep httpd
httpd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
2.4、修改系统时间
1、查看系统当前时间和时区
查看时间:date 能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下
[root@hadoop01 ~]# date -R
[root@hadoop01 ~]# date
[root@hadoop01 ~]# date ‘+%Y-%m-%d %H:%M:%S’

查看时区:cat /etc/sysconfig/clock

常见符号:
日期方面:
%a : 星期几 (Sun…Sat)
%A : 星期几 (Sunday…Saturday)
%b : 月份 (Jan…Dec)
%B : 月份 (January…December)
%c : 直接显示日期和时间
%d : 日 (01…31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001…366)
%m : 月份 (01…12)
%U : 一年中的第几周 (00…53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0…6)
%W : 一年中的第几周 (00…53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yyyy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000…9999)
时间方面:
%%: 打印出%
%n : 下一行
%t : 跳格
%H : 小时(00…23)
%k : 小时(0…23)
%l : 小时(1…12)
%M : 分钟(00…59)
%p : 显示本地AM或PM
%P : 显示本地am或pm
%r : 直接显示时间(12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00…61)
%T : 直接显示时间(24小时制)
%X : 相当于%H:%M:%S %p
%Z : 显示时区
若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss]
MM 为月份,
DD 为日,
hh 为小时,
mm 为分钟,
CC 为年份前两位数字,
YY 为年份后两位数字,
ss 为秒数

例子:date “050602032017.55”

2、CentOS中时区是以文件形式存在,当前正在使用的时区文件位于(cat 查看)
/etc/localtime
其他时区文件则位于
/usr/share/zoneinfo
其中中国时区使用
/usr/share/zoneinfo/Asia/Shanghai
则,更改时区的话,直接使用如下命令就OK
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

PS:如果没有Asia/Shanghai时区文件,请使用tzselect命令去生成时区文件,生成好的时区文件就在/usr/share/zoneinfo目录下

3、我们一般使用”date -s”命令来修改系统时间
[root@hadoop01 ~]# date -s 12/25/2016
[root@hadoop01 ~]# date -s 19:57:30
[root@hadoop01 ~]# date -s “2016-12-25 19:57:30”

4、每次都手动来修改,比较麻烦,这里教大家一个简单的方法,用来同步网络时间。使用命令:
[root@hadoop01 ~]# ntpdate time.nist.gov
[root@hadoop01 ~]# ntpdate cn.pool.ntp.org

5、现在告诉大家一个一劳永逸的方法

1、使用命令:crontab -e
[root@hadoop01 ~]# crontab -e
crontab的使用后面会有详细讲解

2、然后往里加入一行内容
*/10 * * * * ntpdate 202.120.2.101
上面的配置表示,每隔十分钟从202.120.2.101该时间服务器同步一次时间。
国家授时中心ntpdate cn.pool.ntp.org
阿里云 ntpdate ntp1.aliyun.com
3、保存退出即可

6、日期计算
有时候,我们操作日期时间,经常会要获取前几天或者后几天的时间,那么date命令也给我们提供了实现这个功能的可选项’-d’和’–date’,请看下面细细的例子
先看’-d’:
获取下一天的时间
[root@hadoop ~]# date -d next-day ‘+%Y-%m-%d %H:%M:%S’
[root@hadoop ~]# date -d ‘next day’ ‘+%Y-%m-%d %H:%M:%S’
另外一种写法:
[root@hadoop ~]# date ‘+%Y-%m-%d %H:%M:%S’ -d tomorrow

获取上一天的时间
[root@hadoop ~]# date -d last-day ‘+%Y-%m-%d %H:%M:%S’
另外一种写法:
[root@hadoop ~]# date ‘+%Y-%m-%d %H:%M:%S’ -d yesterday

获取下一月的时间
[root@hadoop ~]# date -d next-month ‘+%Y-%m-%d %H:%M:%S’

获取上一月的时间
[root@hadoop ~]# date -d last-month ‘+%Y-%m-%d %H:%M:%S’

获取下一年的时间
[root@hadoop ~]# date -d next-year ‘+%Y-%m-%d %H:%M:%S’

获取上一年的时间
[root@hadoop ~]# date -d last-year ‘+%Y-%m-%d %H:%M:%S’

获取上一周的日期时间:
[root@hadoop ~]# date -d next-week ‘+%Y-%m-%d %H:%M:%S’
[root@hadoop ~]# date -d next-monday ‘+%Y-%m-%d %H:%M:%S’
[root@hadoop ~]# date -d next-thursday ‘+%Y-%m-%d %H:%M:%S’
那么类似的,其实,last-year,last-month,last-day,last-week,last-hour,last-minute,last-second都有对应的实现。相反的,last对应next,自己可以根据实际情况灵活组织

接下来,我们来看’–date’,它帮我实现任意时间前后的计算,来看具体的例子:
获取一天以后的日期时间
[root@hadoop ~]# date ‘+%Y-%m-%d %H:%M:%S’ --date=‘1 day’
[root@hadoop ~]# date ‘+%Y-%m-%d %H:%M:%S’ --date=’-1 day ago’

获取一天以前的日期时间
[root@hadoop ~]# date ‘+%Y-%m-%d %H:%M:%S’ --date=’-1 day’
[root@hadoop ~]# date ‘+%Y-%m-%d %H:%M:%S’ --date=‘1 day ago’
上面的例子显示出来了使用的格式,使用精髓在于改变前面的字符串显示格式,改变数据,改变要操作的日期对应字段,除了天也有对应的其他实现:year,month,week,day,hour,minute,second,monday(星期,七天都可)
其他示例
获取相对某个日期前后的日期:
[root@hadoop ~]# date -d ‘may 14 -2 weeks’

把时间当中无用的0去掉,比如:01:02:25会变成1:2:25
[root@hadoop ~]# date ‘+%-H:%-M:%-S’

显示文件最后被更改的时间
[root@hadoop ~]# date “+%Y-%m-%d %H:%M:%S” -r bin/removeJDK.sh

求两个字符串日期之间相隔的天数
[root@hadoop ~]#
echo “( ( d a t e + (date +%s -d '2018-09-09')- (date+(date +%s -d ‘1998-08-08’))/86400” | bc

shell中加减指定间隔单位
[root@hadoop ~]# A=date +%Y-%m-%d
[root@hadoop ~]# B=date +%Y-%m-%d -d "$A +48 hours"

3、软件安装
1、二进制发布包
软件已经针对具体平台编译打包发布,只要解压,修改配置即可
演示过程见JDK安装文档”资料-jdk安装”
或者参考Linux系统中的Tomcat的安装

2、RPM发布包
软件已经按照RedHat(Redhat Package Manager)的包管理工具规范RPM进行打包发布,需要获取到相应的软件RPM发布包,然后用rpm命令进行安装
演示过程见MySQL安装文档”资料-MySQL安装”

常用命令:
1、安装包:rpm -ivh 包名
参数:
-i :安装的意思
-v :可视化
-h :显示安装进度
另外在安装一个rpm包时常用的附带参数有:
–force 强制安装,即使覆盖属于其他包的文件也要安装
–nodeps 当要安装的rpm包依赖其他包时,即使其他包没有安装,也要安装这个包

2、升级包:rpm -Uvh filename
-U 升级

3、卸载包rpm -e filename (这里的filename是通过rpm的查询功能所查询到的)

4、查询一个包是否安装:rpm -q 包名(这里的包名,是不带有平台信息以及后缀名的)

5.查询当前安装的所有rpm包:rpm -qa
查询当前安装的和sql相关的包:rpm -qa | grep ‘sql’
查询sqlite安装路径:rpm -ql sqlite

3、Yum在线安装
Yum(Yellow dog Updater, Modified)是一个在CentOS和RedHat以及SUSE中的Shell前端软件包管理器。比如软件已经以RPM规范打包,但发布在了网络上的一些服务器上,可用yum在线安装服务器上存在的rpm软件,并且会自动解决软件安装过程中的库依赖问题(注:类似于maven),yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记

yum仓库服务器本质上就是一台http服务器,服务器的目录中放置了rpm包,及rpm包的索引信息文件,即可为yum客户端提供rpm文件下载
安装示例:yum install nc

yum命令工具使用举例
yum update 升级系统
yum install ~ 安装指定软件包
yum update ~ 升级指定软件包
yum remove ~ 卸载指定软件

4、源码编译安装
软件以源码工程的形式发布,需要获取到源码工程后用相应开发工具进行编译打包部署
安装示例:资料-Redis的安装
4、配置本地YUM源
1、准备一个http服务器,这里我们已经配置好了httpd的服务,如果系统不自带,请自行安装,可以使用命令在线安装:
yum install -y httpd

2、安装好了,或者重新安装完成后,检查httpd的运行状态
service httpd status

3、在httpd服务的web目录中放入rpm库,
比如,将centos安装光盘中的rpm库放入:
mkdir /var/www/html/centos
cp -r /mnt/cdrom/* /var/www/html/centos/
注:上面这种方式比较浪费空间,可以不用拷贝,其实只要创建一个软连接即可
ln -s /mnt/cdrom /var/www/html/centos

4、用浏览器访问一下httpd服务,看看是不是能看到这些东西
地址:http://192.168.123.202/centos

5、配置yum客户端repo地址文件
将本地http服务器加入repo地址
首先,将内置的源全部disable掉
cd /etc/yum.repos.d/
rename .repo .repo.bak *
然后,新建一个repo源:
vi CentOS-Local.repo
[CentOS-Local]
name=CentOS-Local
baseurl=http://192.168.123.202/centos/cdrom0
http://192.168.123.202/centos/cdrom1
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

接下来,我们检查我们自定义的源是否生效,使用命令:yum repolist

6、再接下来,就可以使用yum像从公网安装软件一样在内网服务器上下载软件进行安装了
yum install -y 你要的软件

7、补充:
国内有名的Yum源:
网易:
CentOS5 :http://mirrors.163.com/.help/CentOS5-Base-163.repo
CentOS6 :http://mirrors.163.com/.help/CentOS6-Base-163.repo
CentOS7 :http://mirrors.163.com/.help/CentOS7-Base-163.repo

5、进程管理
5.1、进程概念
进程是操作系统中非常重要的一个概念,进程是程序的执行过程,相对于程序,进程是动态的,在linux系统中,它与用户权限相关,程序与进程并没有一一对应,一个程序可能对应多个进程

子进程与父进程:一个进程产生另外一个进程,产生的进程称为子进程,生成另外一个进程的进程称为父进程
5.2、进程状态
进程状态总体来看主要包括三种,分别是就绪状态、运行状态、等待状态,就绪状态指的是进程除了CPU资源,其他运行资源都已获得,当就就绪状态的进程得到CPU资源时,则进入进程进入运行状态,运行状态的进程在时间片用完后会重新转换成就绪状态,如果在运行时进程遇到IO等阻塞操作,则进程会进入等待状态,等待状态的进程当阻塞操作完成后,进程将进入就绪状态

5.3、进程管理常用操作
5.3.1、PS命令
ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
ps 命令常用选项包括:
1、a显示所有用户的进程
2、u显示用户名和启动时间
3、x显示所有进程,包括没有控制终端的进程
4、e显示所有进程,包括没有控制终端的进程,较x选项,信息更为简略
5、l显示进程详细信息,按长格式显示

常用组合
ps -au 显示所有用户进程,并给出用户名和启动时间等详细信息
ps -aux 显示所有用户进程,包括没有控制终端的进程,并给出用户和和启动埋单等详细信息
ps -el 按长格式显示进程详细信息

以上命令执行结果中可能出现的一个字段含义:
USER: 进程所有者
PID: 进程号
PPID: 进程的父进程ID
%CPU: CPU占用率
C: 进程的CPU占用率
%MEM: 内存占用率
VSZ: 表示如果一个程序完全驻留在内存的话需要占用多少内存空间;
RSS: 指明了当前实际占用了多少内存;
TTY: 终端的次要装置号码 (minor device number of tty)
F:进程的标志
S:进程的状态
STAT: 该进程程的状态,有以下值
D: 不可中断的静止
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的进程
N: 低优先序的进程
L: 有记忆体分页分配并锁在记忆体内
PRI:进程的优先权
NI:进程的Nice值
ADDR:进程的地址空间
SZ:进程占用内存的大小
WCHAN:进程当前是否在运行
TTY:进程所属终端
START: 进程开始时间
TIME: 执行的运行时间
COMMAND:所执行的指令
CMD:进程的命令
5.3.2、kill/pidof/pkill命令
有时候某个进程可能会长期占用CPU资源或无法正常执行或超出运行时间等,此时可能希望人工干预直接将进程杀死,这时候kill命令可以派上用场

1、kill pid 直接杀死进程,但不能保证一定能杀死
2、kill -9 pid 强制杀死进程

3、pidof命令用于查看某个进程的进程号(例如:pidof mysqld)

4、pkill命令可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉
5.3.3、进程切换
前台进程指的是进程在执行时会将命令行阻塞,直到进程执行完毕;后台进程指的是进程在执行时不会阻塞当前命令行,而是在系统后台执行

1、ctrl + c 终止进程
2、ctrl + z 挂起进程
3、fg命令将进程转换到前台执行
4、bg命令将进程转换到后台执行
5、jobs命令查看任务
5.3.4、top命令
Top 命令可以定期显示所有正在运行和实际运行并且更新到列表中,它显示出 CPU 的使用、内存的使用、交换内存、缓存大小、缓冲区大小、过程控制、用户和更多命令。它也会显示内存和 CPU 使用率过高的正在运行的进程。

按q键退出查看
5.3.5、pstree命令
将进程间的关系以树结构的形式展示,能清楚看各进程之间的父子关系
pstree :以树状形式显示进程

pstree -p : 以树状形式显示进程,并且显示进程号

5.3.6、JPS命令
JPS命令是JDK提供的一个检查系统是否启动了JVM进程的一个进程。不是linux系统自带的。主要任务就是用来检查java进程的。
6、计划任务
6.1、概念
计划任务在Linux的体现主要分为at和crontab,其中:

at:通过at命令安排任务在某一时刻执行一次

crontab:通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。
6.2、命令服务管理crontab
在CentOS系统上,crontab服务的名称叫做crond

1、安装
yum -y install crontabs

2、服务操作说明
service crond start ## 启动服务
service crond stop ## 关闭服务
service crond restart ## 重启服务
service crond reload ## 重新载入配置
service crond status ## 服务状态

查看crontab服务是否已设置为开机启动,执行命令:
chkconfig --list

加入开机自动启动:
chkconfig --level 35 crond on
6.3、crontab功能使用
1、命令格式
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]

参数说明:
-u user:用来设定某个用户的crontab服务,例如,”-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:删除定时任务配置,从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。

命令示例:
crontab file [-u user] ## 用指定的文件替代目前的crontab。

必须掌握:
crontab -l [-u user] ## 列出用户目前的crontab.
crontab -e [-u user] ## 编辑用户目前的crontab.

补充:通过crontab添加的计划任务都会存储在/var/spool/cron/目录里

2、配置说明
基本格式 :
*  *  *  *  *  command
分  时  日  月  周  命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时0~23(0表示0点) 7-9表示:8点到10点之间
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

3、配置示例
*/1 * * * * date >> /root/date.txt
上面的例子表示每分钟执行一次date命令

30 21 * * * /usr/local/etc/rc.d/httpd restart
上面的例子表示每晚的21:30重启apache

45 4 1,10,22 * * /usr/local/etc/rc.d/httpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache

10 1 * * 6,0 /usr/local/etc/rc.d/httpd restart
上面的例子表示每周六、周日的1 : 10重启apache

0,30 18-23 * * * /usr/local/etc/rc.d/httpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache

0 23 * * 6 /usr/local/etc/rc.d/httpd restart
上面的例子表示每星期六的11 : 00 pm重启apache

**/1 * * * /usr/local/etc/rc.d/httpd restart
上面的例子每一小时重启apache

*23-7/1 * * * /usr/local/etc/rc.d/httpd restart
上面的例子晚上11点到早上7点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/etc/rc.d/httpd restart
上面的例子每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/etc/rc.d/httpd restart
上面的例子一月一号的4点重启apache
7、克隆虚拟机
见文档”资料-vmware克隆虚拟机”
8、SSH免密登录配置
1、SSH概念
SSH为Secure Shell(安全外壳协议)的缩写,简单说,SSH只是一种网络协议,用于计算机之间的加密登录,很多ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而SSH就是专为远程登录会话和其他网络服务提供安全性的协议。

SSH是由客户端和服务端的软件组成的
服务端是一个守护进程(sshd),他在后台运行并响应来自客户端的连接请求。
客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。

2、SSH认证机制
从客户端来看,SSH提供两种级别的安全验证。

第一种级别(基于口令的安全验证)
只要你知道自己帐号和口令,就可以登录到远程主机。

第二种级别(基于密钥的安全验证)
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密”质询”(challenge)并把它发送给客户端软件。客户端软件收到”质询”之后就可以用你的私人密匙解密再把它发送给服务器。

原理图:

3、配置SSH认证机制
假如A要登录B:

在A上进行操作:
1、首先生成密钥对,使用命令:
ssh-keygen
或者
ssh-keygen -t rsa
上面一种是它的简写形式,提示要输入信息的时候不用输入任何东西,直接回车三次就OK
上述命令执行完成之后,会生成这么两个文件,其中id_rsa.pub是公钥

2、将A自己的公钥放置到授权列表文件authorized_keys中
cat id_rsa.pub > authorized_keys
或者
cp id_rsa.pub authorized_keys

3、将得到的authorized_keys发送给B机器对应的文件夹下
scp -r authorized_keys [email protected]:$PWD
或者
scp -r authorized_keys [email protected]:/root/.ssh/
这是一个远程拷贝命令,意思是把authorized_keys拷贝到192.168.123.202这台机器对应目录下

4、这样我们的机器A就能访问到机器B了。验证方法使用命令:
ssh 192.168.123.202

重点理解之处:A将公钥发给B,不是B可以访问A,而是A可以访问B,所以任何一台机器想要能访问其他机器,那么就把自己的公钥内容发送到别的机器的authorized_keys中去,记住,是追加,不是覆盖
9.grep(文本生成器)
grep是一种强大的文本搜索工具,他能使用正则表达式搜索文本,并把匹配的行统计出来

命令:grep [选项] [–color=auto] ”搜索字符串” filename
常用参数:
-c:统计符合条件的字符串出现的总行数。
-E:支持扩展正则表达式。
-i:忽略字符大小写。
-n:在显示匹配到的字符串前面加上行号。
-v:显示没有”搜索字符串”内容的那一行。
-l:列出文件内容中有搜索字符串的文件名称。
-o:只输出文件中匹配到的部分。
-color=auto:将匹配到的字符串高亮出来。

1、基本使用
查询包含hadoop的行
grep hadoop /etc/passwd
[root@localhost ~]# grep hadoop /etc/passwd
hadoop: x:500:504:hadoop01:/home/hadoop:/bin/bash

grep huangbo ./.txt ## 寻找当前路径下所有txt当中内容那些是带了huangbo字符串的
[root@localhost ~]# grep huangbo ./
.txt
./mazh.txt:my name is huangbo is is huangbo
./sutdent.txt:huangbo 18 jiangxi

2、先看一份数据:grep.txt
huangbo is shuaige
huangxiaoming is shuaige
liuyifei is meinv
hello world hello tom hello kitty

#how old are you
#one two three four five six seven eight nine ten

2.1、统计出现某个字符串的行的总行数
grep -c ‘hello’ grep.txt
grep -c ‘is’ grep.txt
[hadoop@hadoop04 ~]# grep -c ‘hello’ grep.txt
[hadoop@hadoop04 ~]# grep -c ‘is’ grep.txt

2.2、查询不包含is的行
grep -v ‘is’ grep.txt
[hadoop@hadoop04 ~]# grep -v ‘is’ grep.txt

2.3、正则表达包含huang
grep ‘.huang.’ grep.txt
[hadoop@hadoop04 ~]# grep ‘.huang.’ grep.txt

2.4、输出匹配行的前后N行(会包括匹配行)
使用-A参数输出匹配行的后一行:grep -A 1 “huangxiaoming” grep.txt
使用-B参数输出匹配行的前一行:grep -B 1 “huangxiaoming” grep.txt
使用-C参数输出匹配行的前后各一行:grep -C 1 “huangxiaoming” grep.txt

3、正则表达(点代表任意一个字符)
grep ‘h.*p’ /etc/passwd

4、正则表达以hadoop开头
grep ‘^hadoop’ /etc/passwd

5、正则表达以hadoop结尾
grep ‘hadoop$’ /etc/passwd

以h或r开头的
grep ‘1’ /etc/passwd

不是以h和r开头的
grep ‘[hr]’ /etc/passwd

不是以h到r开头的
grep ‘[h-r]’ /etc/passwd

正则表达式的简单规则:
. : 任意一个字符
a* : 任意多个a(零个或多个a)
a? : 零个或一个a
a+ : 一个或多个a
.* : 任意多个任意字符
. : 转义.
o{2} : o重复两次
[A-Z]
[ABC]

空行
Grep ‘^KaTeX parse error: Expected group after '^' at position 23: … 不是空行 Grep -v ‘^̲’ a.txt
查找不是以#开头的行
grep -v ‘^#’ grep.txt | grep -v ‘^$’
[root@localhost ~]# grep -v ‘^#’ grep.txt

[root@localhost ~]# grep -v ‘^#’ grep.txt | grep -v ‘^$’


  1. hr ↩︎

你可能感兴趣的:(Linux,linux,服务器,centos)