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 [email protected]: /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-******
进入.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