linux常用命令04

1、rz sz

(1)由于不知道yum要安装哪个包,因此尝试yum search rz

得到:lrzsz

(2)yum -y install lrzsz

 安装成功。

(3)保持习惯,每次安装完都使用which判断是否命令生效

which rz

which sz

(4)实用命令传输文件

rz     window------>linux

也可以使用winscp绿色版

sz    linux---------->window

由于xshell默认传输都是上一次结束的窗口,所以要自己在右键---->属性---->文件传输中修改默认的路径

                         默认在桌面。

总结:

当rz的时候,默认在window桌面寻找要传输到linux的文件;

当sz的时候,默认传输到window的桌面;

      

 2、作业调度

crontab -e:编辑

crontab -l:查看

--------------------------------------------------

(1)如何定时作业调度

1)简单的shell脚本:打印当前时间

建立一个.sh文件

vi date.sh

 2)文件首行固定输入:

#!/bin/bash

--------------shell源码---------------------

#!/bin/bash

echo "date:"

date

echo "    "

-------------------------------------

echo----打印"date:"

输出时间

echo-----打印空格

3)保存文件

4)对date.sh文件赋予所有用户都可以执行的权限:

chmod +x date.sh

5)执行date.sh

. /date.sh或者source date.sh

6)crontab -e

开始编写crontab任务:

每分钟打印

* * * * * /root/date.sh >> date.log

第一个*----分

第二个*----小时

第三个*----日

第四个*----月

第五个*----周

该crontab任务的意思:每分钟执行一次date.sh脚本并打印在date.log文件里,而该文件的路径在>>后定义,此处为root当前路径下。

问题:

我的问题是,为啥会执行date.sh。crontab里面没. /date.sh 或者source date.sh

解答:

.sh文件不需要. 或者source来执行,绝对路径就可以执行。说明在crontab里,绝对路径就是执行了,那样就会自动追加到date.log

--------------------------------------------------------------------------------

(2)如何每10秒执行一次date.sh

休眠sleep 10s

1)修改shell脚本(两种for循环格式)

#!/bin/bash

for ((i = 1 ; i <= 6 ; i++));

  do 

    date

    sleep 10s

  done

或者

#!/bin/bash

for i in 1 2 3 4 5 6

do

    date

    sleep 10s

  done

(3)如何用crontab编写5月29日9:11定时执行任务

15 09 29 05 * /root/date.sh>>date.log

(4)比较好用的在线crontab工具:https://tool.lu/crontab/

3、绝对路径和相对路径

cd /root/HBinz----绝对路径

cd ./HBinz----相对路径(./相当于当前路径)

或者

cd HBinz

4、后台执行命令

当执行./date.sh时,如果窗口关掉,则会停止执行。该情况不利于长时间执行某脚本,因此需要后台执行命令的方法。

 --->关闭重新连接终端窗口:

执行ps -ef |grep date只剩下grep date的进程了。

解决方案:

(1)&

,/date.sh &关闭当前窗口后,执行ps -ef |grep date仍有该进程

总结:&有个弊端: 会将内容打印在当前窗口,不是很方便因此用到nuhup

(2)nohup 

nohup ./date.sh

会将日志打印到nohup.out的日志文件里

 总结:nohup有个弊端

-------->

因此一般工作上是会结合& 和 nohup一起使用

nohup ./date.sh &

-------->

 又由于日志都打印在nohup.out上,日志归类不科学,因此生产上一般如下:

nohup ./date.sh > /tmp/date.log 2 >&1 & (2 >&1百度中的意思是将标准信息输出路径指定为错误信息输出路径(也就是都输出在一起))

-------->

 日志成功保存到/tmp/date.log

(3)screen

多人合作,后台会话,主要是下面几个参数:

1)-S sockname  Name this session <pid>.sockname instead of <pid>.<tty>.<host>.

建立一个新会话

screen -S HBinzData

ctrl+a+d 退出登陆

2)-r            Reattach to a detached screen process.

登陆会话,但需要会话状态是离线(detached)的才可以。

screen -r 1876

或者

screen -r HBinzData

会话状态:

1、detached:无人

2、attached:有人

退出会话,会话后台执行 :crtl+a+d

3)-list        or -ls. Do nothing, just list our SockDir.

把当前所有会话详细情况列出来

screen -list

5、weget  xxx链接(下载)

6、scp:将文件/文件夹 从A机器传到B机器

hadoop001:

scp xxx.log root@hadoop001: /tmp(需保证root用户确认存在于hadoop001,所以不确认的情况下建议使用ip)

(1)将hadoop001root目录下的data.log传送到hadoop002的/tmp目录下

scp date.log 192.168.137.128:/tmp

这里有个问题,传到/Desktop下无法生效,待后面有时间验证一下。

(2)将hadoop001root目录下的HBinz文件夹传送到hadoop002的/tmp目录下

scp -r HBinz 192.168.137.128:/tmp

HBinz文件夹里的文件也都传送到hadoop002的/tmp目录下

3)升级版

将对方的文件传送到本机

scp 192.168.137.128:/tmp/date.log /tmp

7、ssh

ssh hadoop001 登陆

ssh hadoop001 date 将命令date在hadoop001执行到当前机器

隐藏的文件夹:~/.ssh

ll -a .ssh/

打开文件夹(其中有两个.是隐藏文件):

删除.ssh文件,重新生成:

ssh-keygen

进入.ssh

所以研究ssh到这里,我们的目的是为了达到登陆别的机器不需输入密码,两台机器互相信任。

目前还不是互相信任的。

(1)本机对自己的IP进行ssh

ssh 192.168.137.130 date

1)由于该ip没加入到known hosts中,因此需要提示yes/no

2)由于没将自身公钥id_rsa.pub放到authorized_keys里,因此需要填密码

(2)将公钥文件放到authorized_keys文件中

cat id_rsa.pub >> authorized_keys

(3)重新ssh 192.168.137.130 date

可以不输入密码

8、将hadoop001对其他机器Hadoop002建立相互信任关系

(1)登陆hadoop002,将.ssh文件里的id_rsa.pub公钥文件传到hadoop001的.ssh文件里

scp id_rsa.pub 192.168.137.130:/root/.ssh/id_rsa.pub.hadoop002

命名规范复制的公钥文件带有原机器的后缀

(2)登陆hadoop001将id_rsa.pub.hadoop002追加到authorized.keys里

cat id_rsa.pub.hadoop002 >> authorized_keys

(3)将hadoop001的可信任文件authorized_keys传送到hadoop002的.ssh文件中

scp authorized_keys 192.168.137.128:/root/.ssh/

(4)执行ssh 192.168.137.128 date

总结:A访问B无秘,要将B的公钥放入A的信任文件,然后发给B。

猜你喜欢

转载自blog.csdn.net/Binbinhb/article/details/88106687