linux shell脚本执行命令详解在Linux下,如果你需要执行shell脚本,那么应该使用那个命令呢?下面由我为大家整理了linux shell脚本执行命令的相关知识,希望对大家有帮助!
linux shell脚本执行
linux shell脚本执行方法一: 切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:
cd /data/shell
./hello.sh
./的意思是说在当前的工作目录下执行hello.sh 。如果不加上./ , bash可能会响应找到不到hello.sh的错误信息 。因为目前的工作目录(/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中 。查看PATH的内容可用 echo $PASH 命令 。现在的/data/shell就不在环境变量PASH中的 , 所以必须加上./才可执行 。
linux shell脚本执行方法二: 以绝对路径的方式去执行bash shell脚本:
/data/shell/hello.sh
linux shell脚本执行方法三: 直接使用bash 或sh 来执行bash shell脚本:
cd /data/shell
bash hello.sh
或
cd /data/shell
sh hello.sh
注意,若是以方法三的方式来执行 , 那么 , 可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径) 。因为方法三是将hello.sh作为参数传给sh(bash)命令来执行的 。这时不是hello.sh自己来执行,而是被人家调用执行,所以不要执行权限 。那么不用指定bash路径自然也好理解了啊 。
linux shell脚本执行方法四: 在当前的shell环境中执行bash shell脚本:
cd /data/shell
. hello.sh
或
cd /data/shell
source hello.sh
前三种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境 , 此shell脚本就在这个子shell环境中执行 。shell脚本执行完后子shell环境随即关闭 , 然后又回到父shell中 。而方法四则是在当前shell中执行的 。
linux时间同步命令linux时间同步命令的方法:
可以使用ntpdate命令 。ntpdate命令使用网络时间协议(NTP)设置日期和时间 , 通过轮询指定的确定正确时间的NTP服务器来设置本地日期和时间 。它从指定的每个服务器获得了一些样本,并应用标准NTP时钟过滤器和选择算法来选择最好的样本 。命令格式:ntpdate时间服务器 。
LINUX系统时间怎么设置同步脚本或命令使用crontab定时任务crontab-e进入编辑基本格式:*****command分时日月周命令第1列表示分钟1~59每分钟用*或者*/1表示第2列表示小时1~23(0表示0点)第3列表示日期1~31第4列表示月份1~12第5列标识号星期0~6(0表示星期天)第6列要运行的命令crontab文件的一些例子:3021***/usr/local/etc/rc.d/lighttpdrestart上面的例子表示每晚的21:30重启apache 。4541,10,22**/usr/local/etc/rc.d/lighttpdrestart上面的例子表示每月1、10、22日的4:45重启apache 。101**6,0/usr/local/etc/rc.d/lighttpdrestart上面的例子表示每周六、周日的1:10重启apache 。0,3018-23***/usr/local/etc/rc.d/lighttpdrestart上面的例子表示在每天18:00至23:00之间每隔30分钟重启apache 。023**6/usr/local/etc/rc.d/lighttpdrestart上面的例子表示每星期六的11:00pm重启apache 。**/1***/usr/local/etc/rc.d/lighttpdrestart每一小时重启apache*23-7/1***/usr/local/etc/rc.d/lighttpdrestart晚上11点到早上7点之间,每隔一小时重启apache0114*mon-wed/usr/local/etc/rc.d/lighttpdrestart每月的4号与每周一到周三的11点重启apache041jan*/usr/local/etc/rc.d/lighttpdrestart一月一号的4点重启apache名称:crontab使用权限:所有使用者使用方式:crontabfile[-uuser]-用指定的文件替代目前的crontab 。crontab-[-uuser]-用标准输入替代目前的crontab.crontab-1[user]-列出用户目前的crontab.crontab-e[user]-编辑用户目前的crontab.crontab-d[user]-删除用户目前的crontab.crontab-cdir-指定crontab的目录 。crontab文件的格式:MHDmdcmd.M:分钟(0-59) 。H:小时(0-23) 。D:天(1-31) 。m:月(1-12) 。d:一星期内的天(0~6,0为星期天) 。cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量说明:crontab是用来让使用者在固定时间或固定间隔执行程序之用,换句话说 , 也就是类似使用者的时程表 。-uuser是指设定指定user的时程表,这个前提是你必须要有其权限(比如说是root)才能够指定他人的时程表 。如果不使用-uuser的话,就是表示设定自己的时程表 。参数:crontab-e:执行文字编辑器来设定时程表,内定的文字编辑器是VI,如果你想用别的文字编辑器,则请先设定VISUAL环境变数来指定使用那个文字编辑器(比如说setenvVISUALjoe)crontab-r:删除目前的时程表crontab-l:列出目前的时程表crontabfile[-uuser]-用指定的文件替代目前的crontab 。时程表的格式如下:f1f2f3f4f5program其中f1是表示分钟,f2表示小时,f3表示一个月份中的第几日 , f4表示月份,f5表示一个星期中的第几天 。program表示要执行的程序 。当f1为*时表示每分钟都要执行program , f2为*时表示每小时都要执行程序,其馀类推当f1为a-b时表示从第a分钟到第b分钟这段时间内要执行,f2为a-b时表示从第a到第b小时都要执行 , 其馀类推当f1为*/n时表示每n分钟个时间间隔执行一次,f2为*/n表示每n小时个时间间隔执行一次 , 其馀类推当f1为a,b,c,时表示第a , b,c , 分钟要执行,f2为a,b,c,时表示第a,b , c个小时要执行,其馀类推使用者也可以将所有的设定先存放在档案file中,用crontabfile的方式来设定时程表 。例子:#每天早上7点执行一次/bin/ls:07***/bin/ls在12月内,每天的早上6点到12点中,每隔3个小时执行一次/usr/bin/backup:06-12/3*12*/usr/bin/backup周一到周五每天下午5:00寄一封信给alex@domain.name:017**1-5mail-s"hi"alex@domain.name/dev/null21即可例子2:#每天早上6点10分106***date#每两个小时0*/2***date#晚上11点到早上8点之间每两个小时,早上8点023-7/2,8***date#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点0114*mon-weddate#1月份日早上4点041jan*date范例$crontab-l列出用户目前的crontab 。
Linux命令 快照功能:记录当前的硬盘的状态 。刚建快照时快照占用内存为0 , 标记了当前硬盘的存储状态 。当虚拟机对快照标记的内容改写时,会将改写的内容存储进快照 , 与未改写的部分整合得到完整的快照 。当快照标记的部分被完全改写,那么快照存储空间完整记录了当时拍摄时的内存状态 。
参数形式
第一种:参数用一横的说明后面的参数是字符形式 。
第二种:参数用两横的说明后面的参数是单词形式 。
第三种:参数前有横的是 System V风格 。
第四种:参数前没有横的是 BSD风格 。
cat、more、less、head、tail命令的比较:
cat命令可以一次显示整个文件,如果文件比较大,使用不是很方便;
more命令可以让屏幕在显示满一屏幕时暂停 , 按空格往前翻页,按b往后翻页 。
less命令也可以分页显示文件,和more命令的区别就在于: 支持上下键卷动屏幕、查找;不需要在一开始就读取整个文件 , 打开大文件时比more、vim更快 。
head命令用于查看文件的前n行 。
tail命令用于查看文件的后n行,加上-f命令,查看在线日志非常方便 , 可以打印最新增加的日志 。
一般模式:
编辑模式:
命令模式:
编码
多行操作(列编辑模式)
插入:ctrl v进入列编辑模式,上下移动光标选择需要插入的位置,然后输入大写I,输入需要文本 , 最后按esc键退出,就会发现文本会在选择的多行中插入 。
删除:ctrl v进入列编辑模式 , 上下移动光标选中需要删除的部分,然后按d,就会删除选中的内容 。
①head:显示文件头部内容
②tail:输出文件尾部内容
注意:用vim和vi修改内容会删除源文件并生成新文件 , 所以tail -f会失效 。需要用到
追加和覆盖语句(或),才能被tail -f监视到 。
一般用于查看小文件
查看压缩文件中的文本内容
例:
①more:文件内容分屏查看器
②less:分屏显示文件内容 , 效率比more高
1、简单读取
运行脚本如下
测试结果为:
2、-p 参数,允许在 read 命令行中直接指定一个提示 。
运行脚本如下
测试结果为:
echo [选项] [输出内容](输出内容到控制台)
输出给定文本的sha256加密后的内容
①显示当前时间信息
②显示当前时间年月日
③显示当前时间年月日时分秒
④显示昨天
⑤显示明天时间
⑥显示上个月时间
需要注意的是取下个月的命令存在bug , 执行如下命令会得到21-10 , 但是正常应该得到21-09 , 需要注意
date -d "2021-08-311 month"%y-%m
⑦修改系统时间
⑧获取当前时间戳
获取秒时间戳:date%s
获取毫秒时间戳:$[ (date%s%N) /1000000]
查看日历
(1)查看当前月的日历
(2)查看2017年的日历
例:
对比gzip/gunzip,zip/unzip可以压缩文件和目录且保留源文件 。
①zip:压缩
②unzip:解压缩
只能压缩文件不能压缩目录 , 不保留原来的文件 。
gzip 文件 (只能将文件压缩为*.gz文件)
gunzip 文件.gz(解压缩文件命令)
例: crontab -e
(1)进入crontab编辑界面 。会打开vim编辑你的工作 。
(2)每隔1分钟,向/root/bailongma.txt文件中添加一个11的数字
*/1 * * * * /bin/echo ”11”/root/bailongma.txt
(3)可以用tail-f目标文件来实施监控追加的内容
查看日志
可以用tail -f /var/log/cron.log观察
Cron表达式见文章:
ls [选项] [目录或是文件]
cd[参数]
例: cd-P$(dirname $p1) ; pwd先跳转到文件的所在目录,再打印$p1文件的实际路径
概述
①cp(copy):只能在本机中复制
②scp(secure copy):可以复制文件给远程主机
scp-rtest.shhxr@hadoop102:/root
③rsync(remote sync):功能与scp相同,但是不会改文件属性
rsync-avtest.shtest.shhxr@hadoop102:/root
④nc(netcat):监听端口,可以实现机器之间传输文件 。
nc -lk 7777 (-l表示listen,-k表示keep)
强制覆盖不提示的方法:\cp
例:scp-rtest.shhxr@bigdata1:/root
例:rsync-avtest.shhxr@bigdata1:/root
例:
nc -lp 10000nc_test.txt
nc -w 1 hadoop102nc_test.txt
远程登录时默认使用的私钥为~/.ssh/id_rsa
生成密钥对
将公钥发送到本机
将密钥发送到需要登录到本机的服务器上
修改密钥的权限
远程登陆
如果有多个节点需要远程登陆 , 可以在.ssh下创建config并输入
再次登陆
①正向代理:
②反向代理:
所谓“反向代理”就是让远端启动端口,把远端端口数据转发到本地 。
HostA 将自己可以访问的 HostB:PortB 暴露给外网服务器 HostC:PortC , 在 HostA 上运行:
那么链接 HostC:PortC 就相当于链接 HostB:PortB 。
使用时需修改 HostC 的 /etc/ssh/sshd_config 的一条配置如下,不然启动的进程监听的ip地址为127.0.0.1,即只有本机可以访问该端口 。
相当于内网穿透,比如 HostA 和 HostB 是同一个内网下的两台可以互相访问的机器,HostC是外网跳板机,HostC不能访问 HostA,但是 HostA 可以访问 HostC 。
那么通过在内网 HostA 上运行ssh -R告诉 HostC,创建 PortC 端口监听,把该端口所有数据转发给我(HostA),我会再转发给同一个内网下的 HostB:PortB 。
同内网下的 HostA/HostB 也可以是同一台机器,换句话说就是 内网 HostA 把自己可以访问的端口暴露给了外网 HostC 。
例: 比如在我的内网机192.168.32.244上有一个RabbitMQ的客户端,端口号为15672 。现在我希望在外网上访问固定ip的云服务器chenjie.asia的6009端口,通过跳板机192.168.32.243来转发请求到192.168.32.244:15672,从而实现在外网访问内网服务的功能,即内网穿透 。
①在192.168.32.244上启动RabbitMQ服务
②将chenjie.asia云服务器的私钥复制到跳板机192.168.32.243的~/.ssh下,并重命名为id_rsa 。通过如下命令看是否可以远程登陆到云服务,可以登陆则进行下一步 。
③修改chenjie.asia服务器的ssh配置文件 /etc/ssh/sshd_config , 允许其他节点访问
然后重启sshd服务
④在跳板机192.168.32.243启动ssh反向代理
这个进程在关闭session时会停止,可以添加启动参数-CPfN
【linux同步脚本命令 linux 同步】 例:
以 root 身份执行的程序有了所有特权,这会带来安全风险 。Kernel 从 2.2 版本开始 , 提供了 Capabilities 功能,它把特权划分成不同单元,可以只授权程序所需的权限,而非所有特权 。
例如:linux不允许非root账号只用1024以下的端口,使用root启动命令nginx,会导致nginx权限过高太危险 。所以用setcap命令
sudo setcap cap_net_bind_service= eip /bigdata/nginx/sbin/nginx
正确的关机流程为 :syncshutdownreboothalt
(1)sync(功能描述:将数据由内存同步到硬盘中)
(2)halt(功能描述:关闭系统,等同于shutdown -h now 和 poweroff)
(3)reboot(功能描述:就是重启,等同于 shutdown -r now)
(4)shutdown [选项] [时间]
安装
yum install -y telnet-server telnet
ls -i显示文件的节点号
find -inum 节点号 -delete删除指定的节点即可删除对应的文件
启动一个服务: systemctl start postfix.service
关闭一个服务: systemctl stop postfix.service
重启一个服务: systemctl restart postfix.service
显示一个服务的状态: systemctl status postfix.service
在开机时启用一个服务: systemctl enable postfix.service
在开机时禁用一个服务: systemctl disable postfix.service
注:在enable的时候会打印出来该启动文件的位置
列出所有已经安装的服务及状态:
systemctl list-units
systemctl list-unit-files
查看服务列表状态:
systemctl list-units --type=service
查看服务是否开机启动:systemctl is-enabled postfix.service
查看已启动的服务列表:systemctl list-unit-files | grep enabled
查看启动失败的服务列表:systemctl --failed
查看服务日志: journalctl -u postfix -n 10 -f
命令类似systemctl,用于操作native service 。
添加脚本为服务(需要指定启动级别和优先级): chkconfig --add [脚本]
删除服务: chkconfig --del [脚本]
单独查看某一服务是否开机启动的命令 : chkconfig --list [服务名]
单独开启某一服务的命令 : chkconfig [服务名] on
单独关闭某一服务的命令: chkconfig [服务名] off
查看某一服务的状态: /etc/intd.d/[服务名] status
启用服务就是在当前"runlevel"的配置文件目录/etc/systemd/system/multi-user.target.wants 里,建立 /usr/lib/systemd/system 里面对应服务配置文件的软链接;禁用服务就是删除此软链接,添加服务就是添加软连接 。
su 用户名称(切换用户,只能获得用户的执行权限 , 不能获得环境变量)
su - 用户名称(切换到用户并获得该用户的环境变量及执行权限)
echo$PATH打印环境变量
设置普通用户具有root权限
修改 /etc/sudoers 文件,找到下面一行(91行),在root下面添加一行,如下所示:
或者配置成采用sudo命令时,不需要输入密码
修改完毕 , 现在可以用hxr 帐号登录,然后用命令 sudo ,即可获得root权限进行操作 。
以azkaban用户执行引号中的命令
gpasswd -d [username] [groupname]将用户从组中删除
gpasswd -a [username] [groupname]将用户加入到组中
用户组的管理涉及用户组的添加、删除和修改 。组的增加、删除和修改实际上就是对/etc/group文件的更新 。
0首位表示类型- 代表文件d 代表目录l 链接文档(link file)
三种特殊权限suid、sgid、sticky
例子:
变更文件权限方式一
例:chmod u-x,o x houge.txt
变更文件权限方式二
例:chmod-R777/mnt/修改整个文件夹的文件权限
在linux中创建文件或者目录会有一个默认权限的 , 这个默认权限是由umask决定的(默认为0022) 。umask设置的是权限的“补码”,而我们常用chmod设置的是文件权限码 。一般在/etc/profile 、~/.bashprofile 或者 ~/.profile中设置umask值 。
umask计算
如root用户的默认umask为0022(第一个0 代表特殊权限位,这里先不考虑),创建的文件默认权限是644(即默认666掩上umask的022),创建的目录是755(即默认777掩上umask的022) 。
对于root用户的umask=022这个来说,777权限二进制码就是(111)(111)(111),022权限二进制码为(000)(010)(010) 。
上面就是一个umask的正常计算过程,但是这样实在是太麻烦了 。我们使用如下的简单的方法快速计算 。
上面的这个方法计算是非常方便的,为何得到奇数要 1呢?
文件的最大权限是666,都是偶数,你得到奇数,说明你的umask有奇数?。?读为4,写为2,都是偶数 , 说明你有执行权限的 。
就按照上面的umask=023为例,在计算其他用户权限的时候6-3=3 ,6是读写,3是写和执行,其实应该是读写权限减去读权限的得到写权限的,相当于我们多减去了一个执行权限 。所以结果加1 。
umask修改
如果想单独修改某个文件夹的新建文件的权限,可以使用setfacl命令 。
例:递归改变文件所有者和所有组 chown-Rhxr:hxr/mnt
例:
linux系统写一个脚本,使系统时间定期与硬件时间同步,每天同步一次这个不需要写很麻烦的脚本啊linux同步脚本命令 , 你只要简单写个shell脚本,
把 hwclock -w 命令写进去,将系统时钟同步到硬件时钟 。
然后设置一下cron,让linux同步脚本命令他每天执行这个脚本一次就行了 。
关于linux同步脚本命令和linux 同步的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- b站lol全球直播,bilibili英雄联盟赛事直播间
- 风变科技chatgpt,风变科技chat
- 注册公众号有危险吗,公众号注册有什么影响
- 跑酷赛车游戏,跑酷赛车游戏怎么玩
- 关于windows开发系统的信息
- js怎么链接html代码,js怎么链接html代码大全
- 全面经营游戏,全球经营游戏
- 怎么关闭mysql防火墙 关闭mysql命令
- 苹果怎么查看授权的小程序,苹果手机怎么看授权过的app