linux脚本

30个经典shell脚本上

戏子无情 提交于 2019-11-29 12:05:37
注:转自https://weibo.com/linuxprobe?topnav=1&wvr=6&topsug=1&is_hot=1(刘遄老师的Linux就该这样学) 先了解下编写Shell过程中注意事项: 开头加解释器:#!/bin/bash 语法缩进,使用四个空格;多加注释说明。 命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。 默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域。 有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。 写脚本一定先测试再到生产上。 1、获取随机字符串或数字 获取随机8位字符串: 方法1: # echo $RANDOM |md5sum |cut -c 1-8 471b94f2 方法2: # openssl rand -base64 4 vg3BEg== 方法3: # cat /proc/sys/kernel/random/uuid |cut -c 1-8 ed9e032c 获取随机8位数字: 方法1: # echo $RANDOM |cksum |cut -c 1-8 23648321 方法2: # openssl rand -base64 4 |cksum |cut -c 1-8 38571131 方法3: # date +%N |cut -c 1-8

python脚本避免启动多个副本程序

橙三吉。 提交于 2019-11-29 11:31:20
在linux系统中,当写好一个python脚本,需要定时启动,但是要保证系统中只有该程序的一个进程在运行,不 允许出现多个副本程序运行, Linux下的许多程序都是按此原理实现的, 可以看到/var/run/*.pid文件。 解决此问题的思路,利用程序对文件锁的状态下,只能有一个进程获得锁,当脚本启动时候,检查文件锁的状态,就可以保证不会出现多个相同进程在运行。 实现代码如下, import fcntl import sys lock_filename = '/tmp/sample-locking.lock' lock_file = open(lock_filename, 'w') try: fcntl.lockf(lock_file, fcntl.LOCK_EX | fcntl.LOCK_NB) except IOError: print('Cannot lock: ' + lock_filename) sys.exit(1) print('Locked! Running code...') quit = False while quit is not True: quit = input('Press q to quit ') quit = str(quit) == 'q' print('Bye!') PS:如果使用此代码在类里面实现,记得要将打开的文件lock

linux 远程执行本地脚本的命令

允我心安 提交于 2019-11-29 09:34:28
背景: 公司远程N台机器需要执行同一脚本,确认脚本对所有需要执行的机器都有效安全,可以使用如下命令。 ch_sudo.sh为需要执行的脚本名称 ssh root@服务器IP地址 "bash" < ch_sudo.sh 如果机器很多,可以写一个循环脚本,对所有IP地址的机器循环执行。 ssh test@ip sh /root/test.sh 参考:http://blog.csdn.net/shangzhiliang_2008/article/details/8602756 ssh的-t参数 -t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty. 中文翻译一下:就是可以提供一个远程服务器的虚拟tty终端,加上这个参数我们就可以在远程服务器的虚拟终端上输入自己的提权密码了,非常安全 命令格式 ssh -t -p $port $user@$ip 'cmd'

开发监控Linux 内存 Shell 脚本

旧城冷巷雨未停 提交于 2019-11-29 09:30:40
问题场景: 开发Shell 脚本判断系统剩余内存的大小,如果低于100MB,就邮件报警给系统管理员,并且将脚本加入系统定时任务,即每3分钟执行一次检查。 分两步: 第一步: 编写脚本 脚本memory_mon.sh如下: #!/bin/bash FreeMem=`free -m|awk 'NR==3 {print $NF}'` #获取系统当前的内存值,赋给变量FreeMem CHARS="Current memory is$FreeMem." #定义字符串CHARS变量,作为输出及供邮件正文使用 if [ $FreeMem -lt 100 ] then echo $CHARS|tee /tmp/messages.txt #屏幕输出提示,并写入文件 mail -s "`date +%F-%T`$CHARS"chenjt5@mail2.sysu.edu.cn</tmp/messages.txt fi 分析: free -m 是显示用兆作单位,NR==3表示第三行,$NF表示最后一列。具体free的各个参数的具体含义参考我的博文: Linux free 命令分析内存使用情况 。 tee 是既将echo $CHARS在标准输出设备输出,并将结果输出到文件中。 mail-s 的用法参考我的博文: Linux 对外发送邮件功能 。 第二步: 定时任务crontab */3 * * * *

shell 脚本命令 : 重定向

杀马特。学长 韩版系。学妹 提交于 2019-11-29 09:22:50
最近在看shell 脚本命令 : 重定向 :即重新改变输入输出的来源 希望想将在终端输出的信息保存到文件,直接在命令后面加上> filename即可 希望想将在终端输出的信息保存到文件,直接在命令后面加上> filename即可 echo “字符串” > test.txt echo “字符串” | tee test.txt Shell允许打开至多10个文件,文件描述符从0,1,2,…,9 文件描述符0,表示标准输入 文件描述符1,表示标准输出 文件描述符2,表示标准错误输出 在当前路径下 执行.sh 文件 ./test.sh 如果没有其权限: c h m o d + x [ 文 件 路 径 ] 查 看 当 前 目 录 结 构 c h m o d + x [ 文 件 路 径 ] 查 看 当 前 目 录 结 构 //--> tree 当前文件夹下的目录结构 如上图 在我们执行ls test.txt b.txt之后,一共有两种输出,其中ls: 无法访问b.txt: 没有那个文件或目录是错误输出,test.txt是标准输出。 在上述命令中,我们将原来的标准输出重定向到了out文件中,所以控制台只剩下了错误提示。 高级用法 我们来看 /dev/null 2>&1 这条命令其实分为两命令,一个是>/dev/null,另一个是2>&1。 - >/dev/null

centos7安装mysql5.6脚本

三世轮回 提交于 2019-11-29 08:15:20
#!/bin/bash cd /media tar -zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz cp mysql-5.6.35-linux-glibc2.5-x86_64/ /usr/local/mysql -r groupadd mysql useradd -r -g mysql mysql cd /usr/local/mysql chown -R mysql:mysql ./ ./scripts/mysql_install_db --user=mysql chown -R root:root ./ chown -R mysql:mysql data cd /usr/local/mysql cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld mkdir /var/log/mariadb touch /var/log/mariadb/mariadb.log chmod 777 /var/log/mariadb/mariadb.log chkconfig --add mysqld &&service mysqld start #cp support-files/mysql.server /etc/init.d/mysql #service mysql start ln -s

linux通用自动清理日志脚本

◇◆丶佛笑我妖孽 提交于 2019-11-29 07:36:42
1.本文是在做自动部署系统时精简的一个脚本,主要功能是清理所有目录的日志 2.根据给定日志目录,删除时间 结合crontab进行清理日志,清理完成后,后在/var/log/deltelog/ 生成按照月的清理日志 3.扩展,因为脚本采用mtime(最后修改时间)进行删除,所以可以适用于删除过期备份等,不受文件名称的限制 shell小窍门 find –type f –print 时会根据换行或者空格来输出查找的文件,在不同的sh下有不同的反应,如果不做处理结合xargs 进行删除 更改操作,会有影响 所以需要增加 –print0 用 null来 作为边界符号,才敢结婚 xargs –o 来格式化输入 使用find 的时候 遵循最小结果集原则,find解析式从左到右,所有确保你在最左边的过滤符号能够过滤最大数据 你可以根据你的需要增加到crontab中 shell脚本 #!/bin/sh ########################### #delete log # in_day_num: like 1 2 is delete 2day ago logs # in_log_path like tomcat log home ########################### in_log_path=${1} in_day_num=${2} tmp_delete_log=/var

linux下 MySQL5.7 搭建双主(互为主从)+ keepalived

眉间皱痕 提交于 2019-11-29 06:38:17
主从复制参考: https://blog.csdn.net/u013792404/article/details/91591585 修改其中部分即可 . 1、在2台主机(192.168.8.111,192.168.8.112)上都修改配置 , /etc/my.cnf ; 修改完成后重启MySQL [mysqld] port=3306 datadir=/usr/local/mysql/data socket=/usr/local/mysql/mysql.sock user=mysql max_connections=1024 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 lower_case_table_names=1 character-set-server=utf8 collation-server=utf8_general_ci # 配置主从 server-id=1 #服务器id (主从必须不一样) log-bin=mysql-bin #打开日志(主机需要打开) binlog_format=mixed # binlog日志格式,mysql默认采用statement,建议使用mixed relay-log=relay-bin

linux Shell(待学)

无人久伴 提交于 2019-11-29 05:04:24
2. Shell 2.1 简介 shell脚本执行方式Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。它类似于 DOS 下的 command 和后来的 cmd.exe。Shell 既是一种命令语言,又是一种程序设计语言。 Shell script 是一种为 shell 编写的脚本程序。Shell 编程一般指 shell脚本编程,不是指开发 shell 自身。 Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。 Linux 的 Shell 种类众多,一个系统可以存在多个 shell,可以通过 cat /etc/shells 命令查看系统中安装的 shell。 Bash 由于易用和免费,在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。 2.2快速入门 1 编写脚本 新建 /root/test/shell/01.sh 文件 #!/bin/bash​echo 'hello world' # !是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。 echo 命令用于向窗口输出文本。 2 解释器 java 需要 虚拟机解释器, 同理 shell脚本也需要 解析器 [root@node04 shells]# cat

GPT,LVM概念以及shell脚本基础

隐身守侯 提交于 2019-11-29 03:34:01
GPT,LVM概念以及shell脚本基础 描述GPT是什么,应该怎么使用 1.GPT的全称是Globally Unique Identifier Partition Table,意即GUID分区表,GUID 分区表 (GPT) 是作为 Extensible Firmware Interface (EFI) 计划的一部分引入的。相对于以往 PC 普遍使用的主引导记录 (MBR) 分区方案,GPT 提供了更加灵活的磁盘分区机制。分区指物理或逻辑磁盘上彼此连接的存储空间,但提供功能时就像物理上分隔的磁盘一样。对于系统固件和已安装的操作系统来说,分区是可见的。操作系统启动之前,对分区的访问由系统固件控制,操作系统启动后则由操作系统控制。 2.具有以下优点: (1)支持2TB以上的大硬盘; (2)每个磁盘的分区个数几乎没有限制(Windows系统最多只允许划分128个分区); (3)分区大小几乎没有限制。又是一个“几乎”。因为它用64位的整数表示扇区号,即 = 18,446,744,073,709,551,616; (4)分区表自带备份。在磁盘的首尾部分分别保存了一份相同的分区表,其中一份被破坏后,可以通过另一份恢复; (5)循环冗余检验值针对关键数据结构而计算,提高了数据崩溃的检测几率; (6)虽然MBR提供1字节分区类型代码,但GPT使用一个16字节的全局唯一标识符(GUID