Below you will find pages that utilize the taxonomy term “Shell”
November 30, 2022
shell终端配置
"\u003cp\u003e\u003ca href=\"%5Bhttps://ohmyz.sh%5D(https://link.zhihu.com/?target=https%3A//ohmyz.sh/)\"\u003eoh-my-zsh\u003c/a\u003e 是一款非常不错的shell配置,最近几年一直是重度用户。由于一些原因经常登录一些服务器,这里根据自己的习惯做一个笔记,以后不用每一次都要重新从各个地方找安装脚本了。\u003c/p\u003e\n\u003ch1 id=\"安装-zsh\"\u003e安装 zsh\u003c/h1\u003e\n\u003ch2 id=\"安装zsh\"\u003e安装zsh\u003c/h2\u003e\n\u003cp\u003e一般系统默认的都是\u003ccode\u003ebash\u003c/code\u003e,所以我们先安装 \u003ccode\u003ezsh\u003c/code\u003e。如果不清楚当前使用的哪一类shell的,可通过以下命令查看\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ cat $SHELL\n/bin/bash\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e我这里使用的默认shell。根据平台选择相应的安装zsh命令, 我这里是Ubuntu系统。\u003c/p\u003e\n\u003cp\u003eLinux、Debian平台\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo apt install -y zsh\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003emacOS\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ebrew install zsh\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eCentos/RHE\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo yum update \u0026amp;\u0026amp; sudo yum -y install zsh\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"确认版本\"\u003e确认版本\u003c/h2\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ zsh --version\nzsh 5.8.1 (aarch64-unknown-linux-gnu)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e查看 \u003ccode\u003e/etc/shell\u003c/code\u003e 看是否存在zsh\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ cat /etc/shells\n/bin/sh\n/bin/bash\n/usr/bin/bash\n/bin/rbash …\u003c/code\u003e\u003c/pre\u003e"
October 30, 2011
一个自动检测服务器网络状态的脚本
"\u003cp\u003e最近服务器总是莫明奇妙的网络不通。我在上一篇文章里写了一个自动检测网卡状态的脚本: \u003ca href=\"http://blog.haohtml.com/archives/11827\"\u003ehttp://blog.haohtml.com/archives/11827\u003c/a\u003e.但发现服务器仍然出现此问题.但服务器内部运行正常.这里基本可以确认是与外网不通的原因.就写了一个脚本,用来检测网络状态,在不通的情况就重启服务器了.此解决办法相当的变态.最好不要使用.\u003c/p\u003e\n\u003cp\u003e1.创建新文件 /data/check_net_status.sh,内容如下\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#!/bin/bash\nif [ $# -ne 1 ]\nthen\necho \u0026#39;ip address not defined!\u0026#39;\nexit\nfi\n\nip=$1\nlog_file=\u0026#34;$(date +%Y%m%d).log\u0026#34;\n\nret=`ping -c 10 $ip | grep ttl | wc -l`\nif [ $ret -lt 2 ]; then\necho \u0026#34;$(date +%H:%M:%S) ===== reboot\u0026#34; \u0026gt;\u0026gt; $log_file\nshutdown -r now\nfi …\u003c/code\u003e\u003c/pre\u003e"
July 22, 2011
使用sed处理php-fpm.conf和nginx.conf文本里的注释信息
"\u003cp\u003e默认系统环境安装教程: \u003ca href=\"http://blog.haohtml.com/archives/6051\"\u003ehttp://blog.haohtml.com/archives/6051\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ephp-fpm.conf:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e想自己搞一个自动修改php-fpm.conf的shell脚本.刚安装的php,默认的是nobody用户运行的,这里修改为了www,并去掉了两边的注释符\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003esed ‘63,66s/|–\u0026gt;//g’ php-fpm.conf | sed ‘s/nobody/www/g’\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e上面将”“和”–\u0026gt;“两个字符串全部删除了.多个之间用”|“符号隔开\u003c/p\u003e\n\u003cp\u003es前面的63,66为处理的行号,如果为一行的话,直接指定一个行号就可以了.这里使用了从63行到66行中间的数据,包括这两行.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003enginx.conf\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e下面的命令是用来配置nginx.conf文件的\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esed \u0026#39;2s/nobody/www/\u0026#39; /usr/local/nginx/conf/nginx.conf.default | sed \u0026#39;2s/#//g\u0026#39;| sed \u0026#39;64,71s/#//g\u0026#39; | sed …\u003c/code\u003e\u003c/pre\u003e"
July 22, 2011
用shell和php脚本实现定时检测服务器情况
"\u003cp\u003e实现原理,利用 cron来定时执行一个shell脚本,如果发现服务器不通或者上次故障后恢复正常,则发送邮件.否则不用发送邮件. 目前此Shell在FreeBSD和Linux下均可以正常运行.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eping.sh\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#!/bin/bash\nif [ $# -ne 1 ]\nthen\necho \u0026#39;must have one param,must be ip address format!\u0026#39;\nexit\nfi\n\nip=$1\ntmpfile=/tmp/$ip.txt\nif [ -f $tmpfile ]; then\nlastmsg=`cat $tmpfile`\nelse\nlastmsg=\u0026#39;YES\u0026#39;\nfi\n\nret=`ping -c 3 $ip | grep ttl | wc -l`\nif [ $ret -lt 2 ]; then\necho \u0026#39;NO\u0026#39; \u0026gt; $tmpfile\n/usr/local/bin/php /data/haohtml.com/www/ping.php $ip \u0026gt; /dev/null 2\u0026gt;\u0026amp;1\nelif [ …\u003c/code\u003e\u003c/pre\u003e"
July 21, 2011
一个简单的ping检测服务器状态的shell脚本
"\u003cp\u003e这个脚本特别的简单的,一次只能检测一个ip地址,可以放在crontab里定时检测.可以用来检测服务器状态情况.特别的实用的,如果有多个ip地址的话,可能必定一下,循环一下就可以了.\u003c/p\u003e\n\u003cp\u003e只有当不通或者宕机后恢复正常的时候才发送指定消息.\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#!/bin/bash\nif [ $# -ne 1 ]\nthen\necho \u0026#39;must have one params ip address format!\u0026#39;\nexit\nfi\n\nip=$1\ntmpfile=$ip.txt\nif [ -f $tmpfile ]; then\nlastmsg=`cat $tmpfile`\nelse\nlastmsg=\u0026#39;YES\u0026#39;\nfi\n\nret=`ping -c 3 $ip | grep ttl | wc -l`\nif [ $ret -lt 2 ]; then\necho \u0026#39;NO\u0026#39; \u0026gt; $tmpfile\necho \u0026#39;send waring message!\u0026#39;\n//这里可以执行php脚本,用来 发送邮件信息\nelif [ $lastmsg = …\u003c/code\u003e\u003c/pre\u003e"
July 21, 2011
linux中的shell重定向
"\u003cp\u003e下面的shell 可不可以详细解释一下呀?\n(ls you no 2\u0026gt;\u0026amp;1;ls yes 2\u0026gt;\u0026amp;1) 2\u0026gt;\u0026amp;1|egrep * \u0026gt;file\n(ls you no 2\u0026gt;\u0026amp;1;ls yes 2\u0026gt;\u0026amp;1)|egrep * \u0026gt;file\n(ls you no;ls yes) 2\u0026gt;\u0026amp;1|egrep * \u0026gt;file\u003c/p\u003e\n\u003cp\u003e2\u0026gt;\u0026amp;1又是什么意思呀??\n在 shell中 \u0026gt;代表输出重定向\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e0表示标准输入\n1表示标准输出(默认值)\n2表示标准错误输出\n2\u0026gt;\u0026amp;1意思是:把 标准错误输出 重定向到 标准输出.\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003els xxx \u0026gt;out.txt 2\u0026gt;\u0026amp;1, 实际上可换成 ls xxx \u003cstrong\u003e1\u003c/strong\u003e\u0026gt;out.txt 2\u0026gt;\u0026amp;1;重定向符号\u0026gt;默认是1,错误和输出都传到out.txt了。\u003c/p\u003e\n\u003cp\u003e|:是管道,例子:\ncmd1 | cmd2 意思是:命令cmd1的标准输出座位cmd2的标准输入.\u003c/p\u003e\n\u003cp\u003e详细解释第三个命令行,(ls you no;ls yes) …\u003c/p\u003e"
December 16, 2010
Freebsd下安装bash
"\u003cp\u003eFreeBSD下默认的shell为CSH,可以通过命令\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eecho $SHELL\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e来查看系统默认的shell是哪一个的。\u003c/p\u003e\n\u003cp\u003e想知道FreeBSD都支持哪些shell,可以用下面的命令进行查看的\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e#cat /etc/shells\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e默认只支持\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e/bin/sh\u003c/p\u003e\n\u003cp\u003e/bin/csh\u003c/p\u003e\n\u003cp\u003e/bin/tcsh\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e这三种shell的,平时我们经常用bash 来写shell脚本,特别是对于那些从linux转过来的用户来说,bash可能说无所不在的.但freebsd默认情况下并不支持bash的,我们可以手动安装一下bash的,命令如下:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1.安装bash\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ecd /usr/ports/shells/bash\u003c/p\u003e\n\u003cp\u003emake install clean\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e2. 在/bin目录下面做一个符号连接。\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eln -s /usr/local/bin/bash /bin/bash\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e3.加入bash\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eecho ‘/bin/bash’ \u0026raquo; /etc/shells\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e4.更改用户shell\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003echsh -s /bin/bash root\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e5.配置\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003evi ~/.profile\u003c/p\u003e\n\u003cp\u003ealias ls=’ls -G’ # …\u003c/p\u003e\u003c/blockquote\u003e"
November 19, 2010
shell中的test表达式
"\u003cp\u003e摘自:UNIX Shell编程24学时编程\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e10.1.2 使用test\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e更常见的情况是,提供给if语句的清单是一个或更多个test命令,它们通过调用test命令而被激活,语法如下:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003etest expression\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e这里,expression为test命令构造的表达式,该表达式的构造使用了特殊选项之一.在计算完表达式的值后,test命令或者返回0(真)或者返回1(假).\u003c/p\u003e\n\u003cp\u003e可用”[“命令对test命令进行缩写:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[ expression ]\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e这里expression是test命令可以理解的任何有效表达式,该简化格式将是读者可能会踫见的最常用格式.\u003c/p\u003e\n\u003cp\u003etest可理解的表达式类型分为三类:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e文件测试.\n字符串比较.\n数字比较.\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e读者将逐步学业习这三类,另外,还会学习到复合表达式.\u003c/p\u003e\n\u003cp\u003e注意:在使用”[“简写test时,左中括号后面的空格和右括号前面的空格是必需的,如果没有空格,Shell不可能辨别表达式何时开始何时结束.\u003c/p\u003e\n\u003cp\u003e选项\u003c/p\u003e\n\u003cp\u003e描述\u003c/p\u003e\n\u003cp\u003e-b file\u003c/p\u003e\n\u003cp\u003e若文件存在且是一个块特殊文件,则为真\u003c/p\u003e\n\u003cp\u003e-c file\u003c/p\u003e\n\u003cp\u003e若文件存在且是一个字符特殊文件,则为真\u003c/p\u003e\n\u003cp\u003e-d file\u003c/p\u003e\n\u003cp\u003e若文件存在且是一个目录,则为真\u003c/p\u003e\n\u003cp\u003e-e …\u003c/p\u003e"
November 19, 2010
Shell中变量基础
"\u003cp\u003eshell中的只读变量:使用readonly关键字,后面加上变量名即可,如\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e#name=’sxf’\u003c/p\u003e\n\u003cp\u003e#readonly name\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e即可.如果后面修改name的值,如\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e#name=’tom’\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e会提示\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e"-bash: name: readonly variable"\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e错误信息.\u003c/p\u003e\n\u003cp\u003e在shell中删除变量只要用\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eunset variable\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e即可.但不能删除只读变量.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eshell中环境变量分三种:局部变量,环境变量,Shell变量\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e局部变量(local variable)是只在当前shell实例中存在的变量,而由其他Shel启动的程序不能使用该变量.\u003c/p\u003e\n\u003cp\u003e环境变量(environment variable)是Shell的任何子进程都能使用的变量,许多程序要正确运行都需要使用环境变量.通常Shell脚本只定义程序运行时所需要的环境变量.\u003c/p\u003e\n\u003cp\u003eShell变量(Shell variable)是Shell变量的特殊变量,也是Shell正确运行所必需的,这些变量有些是环境变量而有些是局部变量.\u003c/p\u003e\n\u003cp\u003e通常,为清楚地表示该变量是环境变量,一般将赋值语句和导出语句写在同一行,这可以帮助下一个维护该脚本的程序员快速 …\u003c/p\u003e"
November 16, 2010
shell test操作运算符
"\u003cp\u003e\u003cstrong\u003e4.4 控制结构\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e在shell脚本中,使用控制结构就可以控制Linux命令的执行。使用控制结构,可以重复执行命令,或者选择特定的命令。控制结构包含两个主要的组件:测试操作(test)和命令。如果测试操作成功,则命令就会执行。这样的话,就可以使用控制结构来决定是否执行选定的命令。\u003c/p\u003e\n\u003cp\u003e存在两种不同类型的控制结构:循环和条件。循环结构会重复执行命令,而条件结构会在特定条件满足时执行命令。\u003c/p\u003e\n\u003cp\u003eBASH Shell有三种循环控制结构:while、for和for-in,两种条件控制结构:if和case。控制结构把Linux命令执行结果作为测试。\u003c/p\u003e\n\u003cp\u003e所有的Linux命令在执行结束后都会返回一个退出状态。如果某命令成功执行,退出状态将是0。如果因为某种原因该命令执行失败,则退出状态是表示失败类型的一个正值。控制结构会检查Linux命令的退出状态是0,还是其他值。对于if和while控制结构,如果退出状态是0,则说明该命令被成功执行,控制结构会继续。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e4.4.1 test操作\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e借助于test命令,可以比较\u003cstrong\u003e整数\u003c/strong\u003e、\u003cstrong\u003e字符串\u003c/strong\u003e,甚至执行\u003cstrong\u003e逻辑操作\u003c/strong\u003e。命令由关键字test,以及被比较值组成;被比较数值之间使用一个选项分隔开, …\u003c/p\u003e"
July 3, 2010
FreeBSD 修改默认SHELL
"\u003cp\u003eFreeBSD下默认的shell为CSH,可以通过命令 echo $SHELL来查看系统默认的shell是哪一个的。\u003c/p\u003e\n\u003cp\u003e显示自己所使用的SHEEL命令:\nps或echo $SHELL\n修改默认SHELL为csh\nname:是指你登陆的名称\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003epw usermod -n name -s csh\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e查看所有支持的shell\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003efreebsd# cat /etc/shells\n/bin/sh\n/bin/csh\n/bin/tcsh\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e到于bash的安装请参考:\u003c/p\u003e"