-
PowerShell 命令 集合操作【含义】命令打印工作目录【检查当前 所在位置】pwd【print working directory】查看 计算机 在网络中的名称?待填充创建目录【只能是文件夹】mkdir 新建文件夹名称【DOS 指令】列出 目录内容ls 【list】列出 目录内容dir【DOS 指令】更改目录cd 目录 /盘符 【change document】【盘符切换的格式:?待填充】返回 上一目录cd …【是两个 英文句号】【返回home :cd ~】cd ~【】推送 目录pushd弹出 目录popd删除 目录【这里 是 文件夹或者文件】rmdir 文件夹名称【remove document】复制 文件 或 文件夹cp更可靠的 复制命令robocopy移动文件 或者 目录mv逐页查看 文件more打印 整个 文件type清屏操作clear/cls寻找文件dir-r 【命令管道位置?】在一大堆文件上面运行一条命令forfiles阅读手册help打印一些参数echo导出/设定 一个新的 环境变量set成为超级用户root 【危险命令!】runas退出 shellexit创建任意空文件New-Item 新建空文件名.扩展名 -type file【挺好用的】shell 适合 移动文件 或者修改 文本数据使用shell 运行 Python 的方法在 自己创建 的文件的目录 下运行。确保事先 使用 cd命令 进入 这一层,之后再运行。输入格式python 文件名 .py进入 pythonpython让解释器 以 0状态码 退出在主窗口 输入 文件结束符:quit()或者 Ctlr + Z
-
通常在一个项目里,我们的规则是:1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。其实就是智能的识别哪些编译链接需要做,哪些不用做避免不必要的时间消耗只要我们的Makefile写得够好,我们只用一个make命令就可以完成,make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。target … : prerequisites …command……target:也就是一个目标文件,可以是ObjectFile,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,暂不叙述。prerequisites:要生成那个target所需要的文件或是目标。command:也就是make需要执行的命令。(任意的Shell命令)这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。hello_demo : hellospeak.o speak.o //由hellospeak.o speak.o链接成目标hello_demo gcc -o hello_demo hellospeak.o speak.o //执行下面的命令 hellospeak.o : hellospeak.c speak.h //如果一些hellospeak.c的函数声明是在头文件speak.h中那么也得在这后面加上 gcc -c hellospeak.c speak.o : speak.c speak.h gcc -c speak.c clean : rm hello_demo speak.o hellospeak.o //当执行make clean时就会执行这个语句 //speak.h#include<stdio.h>#include<stdlib.h>void helloSpeak();-------------------------------------------------------------- //speak.c#include"speak.h"void helloSpeak(){ printf("Hello Makefile\n");}-------------------------------------------------------------- //main.c#include"speak.h"int main(){ helloSpeak(); return 0;} --------------------------------------------------------------//MakefileHello: main.o speak.o gcc -o Hello main.o speak.omain.o: main.c speak.h gcc -c main.cspeak.o: speak.c speak.h gcc -c speak.cclean: rm Hello speak.o main.o ~
-
如何把SHELL 应用于LiteOS 的__CC_ARM 环境 keil编译器?官网上都是 linux环境下的menuconfig 去配置
-
Echo指令在shell编程中主要用在字符串的输出 也可以使用echo实现比较复杂的输出格式格式如下:、echo “string”/”字符串”如果用echo显示普通字符串echo +字符串echo i am a boy如何用echo显示转义字符串echo “\i am a boy”这是错的 必须左右同时添加转义斜杠,双引号可以省略如:echo “\i am a boy\”输出结果:i am a boy如何用echo 控制变量利用read命令来读取输入的信息并把输入的字符传递给shell变量如:Read Nameecho “$name is a boy”将上述代码保存为.sh文件name接收输入的字符变量输出结果为:Sh **.shXiannbenxian 标准的输入Xiannbenxian is a boy 输出 如何利用echo换行如果不适用换行符 俩个echo输出会在后面接着输出中间不会空一行Echo -e “iam a boy!\n”-e代表开启转义 有转义字符换行就得有-eecho “no”结果:iam a boyno如何利用echo不换行如何记住不换行 有换行就有不换行 不换行就\cEcho -e “iam a boy!\c”-e代表开启转义 \c代表不换行echo “no”结果:iam a boy!No正常的样子是俩个echo输出了会在第二行接着输出\n是中间空一行 \c是接着第一行的尾部继续输出第二行echo的内容如何用echo显示结果输出给文件如果将结果指向某个文件显示的话是什么格式呢?echo “iam a boy” > file >代表指向的意思指向file这个文件显示双引号里面的字符串内容这个输出结果需要看file文件才能来显示如何利用echo原样输出字符串echo ‘$name\”’用单引号这么写的格式不会进行任何一个转移或变量改变直接输出的结果为:$name\”显示当前时间Echo `date` 反引号里面加上date会显示当前系统的时间为多少比如现在2022/2/22/02:22 加倍爱你哦~ 为大家提供一个免费的网页版shell编程开发页面大家可以拿去练练手哦!链接:https://www.runoob.com/try/runcode.php?filename=helloworld&type=bash
-
前言*随着整个互联网的发展,产生了无数大大小小的网站,随之而来用户对网站UI和速度体验也在日益加强,对企业或者个人来说,赢得用户体验也就意味着赢得先机。那今天我们在这里针对网站速度这方面来一起交流,提高网站速度对于运维工程师、程序员来说变得至关重要。运维工程师首先得在日常网站运维中发现影响网站速度的各种因素得逐个推动然后解决。提高网站速度体验除了本身网站程序优化外,对于LinuxSA来说还有大量的工作要做,优化系统内核、调整WEB服务器的参数、优化数据库、增加网站架构缓存等等一系列的工作。对于网站缓存,目前主流的HTTP加速器主要有Varnish、Nginx_proxy、Squid等,随着Nginx WEB 高速反向代理被各大中型网站使用,其集成缓存的功能(Nginx_proxy)也日益强大,目前企业中也在大量使用。今天我们来研究一下Nginx_Proxy缓存如何有效的来清理。如下使用Shell脚本来自动化清理,直接上脚本如下:复制代码代码如下:#! /bin/sh#Auto Clean Nginx Cache Shell Scripts#2013-06-12 wugk#Define PathCACHE_DIR=/data/www/proxy_cache_dir/FILE="$*"#To determine whether the input script,If not, then exit 判断脚本是否有输入,没有输入然后退出if [ "$#" -eq "0" ];then echo "Please Insert clean Nginx cache File, Example: $0 index.html index.js" sleep 2 && exitfi echo "The file : $FILE to be clean nginx Cache ,please waiting ....."#Wrap processing for the input file, for grep lookup,对输入的文件进行换行处理,利于grep查找匹配相关内容for i in `echo $FILE |sed 's//\n/g'`do grep -ra $i ${CACHE_DIR}| awk -F':' '{print $1}' > /tmp/cache_list.txt for j in `cat/tmp/cache_list.txt` do rm -rf $j echo "$i $j is Deleted Success !" donedone#The Scripts exec success and exit 0如下为执行清除脚本后的截图:转载自https://www.jb51.net/article/59054.htm
-
一、脚本思路第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。第二步向nginx主进程发送USR1信号。nginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的用户作为日志文件的所有者。重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开的日志文件。工作进程立刻打开新的日志文件并关闭重名名的日志文件。然后你就可以处理旧的日志文件了。二、脚本实现nginx日志按日期自动切割脚本如下:12345678910111213#nginx日志切割脚本 #!/bin/bash#设置日志文件存放目录logs_path="/usr/local/nginx/logs/"#设置pid文件pid_path="/usr/local/nginx/nginx.pid" #重命名日志文件mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log #向nginx主进程发信号重新打开日志kill -USR1 `cat ${pid_path}`试验环境:12345# cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.3 (Tikanga) # /opt/nginx/nginx -vnginx version: nginx/1.6.2代码:123456789101112131415161718192021222324252627282930313233#!/bin/bash# ==============================================================================# chmod u+x /opt/nginx/cut_nginx_log.sh# crontab -e# 0 0 * * * /opt/nginx/cut_nginx_log.sh > /opt/nginx/logs/cut_nginx_log.log 2>&1# ============================================================================== LOGS_PATH="/opt/nginx/logs"ARCHIVE_YEAR=$(date -d "yesterday" "+%Y")ARCHIVE_MONTH=$(date -d "yesterday" "+%m")ARCHIVE_DATE=$(date -d "yesterday" "+%Y%m%d_%H%M%S")if [ -r /opt/nginx/nginx.pid ]; then mkdir -p "${LOGS_PATH}/${ARCHIVE_YEAR}/${ARCHIVE_MONTH}" mv "${LOGS_PATH}/access.log" "${LOGS_PATH}/${ARCHIVE_YEAR}/${ARCHIVE_MONTH}/access_${ARCHIVE_DATE}.log" kill -USR1 $(cat "/opt/nginx/nginx.pid") sleep 1 gzip "${LOGS_PATH}/${ARCHIVE_YEAR}/${ARCHIVE_MONTH}/access_${ARCHIVE_DATE}.log"else echo "Nginx might be down"fi # ==============================================================================# Clean up log files older than 100 days# ============================================================================== # Change HOUSEKEEPING=1 to enable clean upHOUSEKEEPING=0KEEP_DAYS=100if [ $HOUSEKEEPING == 1 ]; then if [ -d "${LOGS_PATH}" ]; then find "${LOGS_PATH}" -type f -name "access_*.log.gz" -mtime +${KEEP_DAYS} -exec rm -f {} \; fifi参考:http://wiki.nginx.org/LogRotation 保存以上脚本nginx_log.sh,并设置定时切割任务三、定时工作在crontab中设置作业复制代码代码如下:0 0 * * * bash /usr/local/nginx/nginx_log.sh这样就每天的0点0分把nginx日志重命名为日期格式,并重新生成今天的新日志文件。转载自https://www.jb51.net/article/47884.htm
-
1. 创建一个目录,用来存放脚本和安装包12345678[root@localhost nginx]# tree.├── install.sh└── packages └── nginx-1.20.1.tar.gz 1 directory, 2 files[root@localhost nginx]# 2. 下载好对应的安装包1234[root@localhost packages]# wget https://nginx.org/download/nginx-1.20.1.tar.gz[root@localhost packages]# lsnginx-1.20.1.tar.gz[root@localhost packages]# 3. 编写脚本1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162[root@localhost nginx]# cat install.sh #!/bin/bash log_dir=/var/loginstall_dir=/usr/local id nginx &>/dev/nullif [ $? -ne 0 ];then useradd -r -M -s /sbin/nologin nginxfi yum -y install pcre-devel pcre gcc gcc-c++ openssl-devel zlib zlib-devel make vim wget openssl openssl-devel gd-devel if [ ! -d $log_dir/nginx ];then mkdir -p $log_dir/nginx chown -R nginx.nginx $log_dir/nginxfi if [ ! -d $install_dir/nginx-1.20.1 ];then tar xf packages/nginx-1.20.1.tar.gz -C $install_dirfi cd $install_dir/nginx-1.20.1if [ ! -d $install_dir/nginx ];then ./configure --prefix=$install_dir/nginx \ --user=nginx \ --group=nginx \ --with-debug \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_image_filter_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --http-log-path=/var/log/nginx/access.log \ --error-log-path=/var/log/nginx/error.log make && make installfi echo "export PATH=$install_dir/nginx/sbin:$PATH" > /etc/profile.d/nginx.sh cat > /usr/lib/systemd/system/nginx.service <<EOF[Unit]Description=Nginx server daemonAfter=network.target [Service]Type=forkingExecStart=/usr/local/nginx/sbin/nginxExecStop=/usr/local/nginx/sbin/nginx -s quitExecReload=/bin/kill -HUP \$MAINPID [Install]WantedBy=multi-user.targetEOF systemctl daemon-reloadsystemctl enable --now nginx.service [root@localhost nginx]# 4. 验证效果12345678910111213141516171819202122232425262728293031323334353637383940[root@localhost nginx]# bash -x install.sh + log_dir=/var/log+ install_dir=/usr/local+ id nginx+ '[' 0 -ne 0 ']'+ yum -y install pcre-devel pcre gcc gcc-c++ openssl-devel zlib zlib-devel make vim wget openssl openssl-devel gd-develUpdating Subscription Management repositories.Unable to read consumer identityThis system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.上次元数据过期检查:1:03:20 前,执行于 2021年10月24日 星期日 20时57分26秒。软件包 pcre-devel-8.42-4.el8.x86_64 已安装。软件包 pcre-8.42-4.el8.x86_64 已安装。软件包 gcc-8.4.1-1.el8.x86_64 已安装。软件包 gcc-c++-8.4.1-1.el8.x86_64 已安装。软件包 openssl-devel-1:1.1.1g-15.el8_3.x86_64 已安装。软件包 zlib-1.2.11-17.el8.x86_64 已安装。软件包 zlib-devel-1.2.11-17.el8.x86_64 已安装。软件包 make-1:4.2.1-10.el8.x86_64 已安装。软件包 vim-enhanced-2:8.0.1763-15.el8.x86_64 已安装。软件包 wget-1.19.5-10.el8.x86_64 已安装。软件包 openssl-1:1.1.1g-15.el8_3.x86_64 已安装。软件包 gd-devel-2.2.5-7.el8.x86_64 已安装。依赖关系解决。无需任何处理。完毕!+ '[' '!' -d /var/log/nginx ']'+ '[' '!' -d /usr/local/nginx-1.20.1 ']'+ cd /usr/local/nginx-1.20.1+ '[' '!' -d /usr/local/nginx ']'+ echo 'export PATH=/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'+ cat+ systemctl daemon-reload+ systemctl enable --now nginx.service[root@localhost nginx]# [root@localhost nginx]# ss -antlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:80 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:* [root@localhost nginx]# 到此这篇关于shell脚本多实例部署nginx的详细教程的文章就介绍到这了转载自https://www.jb51.net/article/226286.htm
-
前言大家都知道shell在文本处理上确有极大优势,比如多文本合并、去重等,但是最近遇到了一个难搞的问题,即两个大数据量文件去重。下面来看看详细的介绍吧。要求 有txt文件A.txt和B.txt。其中A为关键词和搜索量,以逗号分隔,约90万行。B为关键词,约400万行。需要从A中找出与B重复的关键词。我试了N种姿势,但结果都不尽人意,最奇怪的是有些方法对小数据量的测试文件有用,一旦用在A与B上就会失败,真叫人百思不得其解。姿势一:1234awk -F, '{print $1}' A >keywords.txtcat keywords.txt B.txt | sort | uniq -d #先从A.txt种取出关键词,然后与B.txt一起打开,用sort排序,uniq -d 取出重复的行姿势二:12345awk -F, '{print $1}' A >keywords.txt#照例先取出关键词 comm -1 -2 keywords.txt B.txt#利用comm命令,显示两个文件都存在的行姿势三:12345678910111213awk -F, '{print $1}' A >keywords.txtfor i in `cat keywords.txt`do A=`egrep -c "^$i$" B.txt` if [ $A != 0 ] then echo $i >>重复关键词.txt fidone #这种姿势就稍微复杂点#首先取出关键词,然后利用for循环逐个去B.txt里面匹配(注意正则写法^$i$),如果匹配到的结果数不为0,说明这个关键词是重复的,然后输出#这种方法的优点是稳妥,缺点是效率太TM低了,90万个词逐一与400万词匹配,shell默认又没有多线程,耗时太长。姿势四:1234awk -F, '{print $1}' A >keywords.txtcat keywords.txt B.txt | awk '!a[$1]++' #这个方法的原理其实我不太懂,awk命令实在太强大太高深了,但是这种方法又简洁又快速其实还有一种grep -v 、grep -f 的方法,但是我没有试过,所以不在这里列出了。
-
在Linux中有很多方法逐行读取一个文件的方法,其中最常用的就是下面的脚本里的方法,而且是效率最高,使用最多的方法。为了给大家一个直观的感受,我们将通过生成一个大的文件的方式来检验各种方法的执行效率。方法1:while循环中执行效率最高,最常用的方法。复制代码代码如下:function while_read_LINE_bottm(){While read LINEdoecho $LINEdone < $FILENAME}注释:我习惯把这种方式叫做read釜底抽薪,因为这种方式在结束的时候需要执行文件,就好像是执行完的时候再把文件读进去一样。方法2 : 重定向法;管道法: cat $FILENAME | while read LINE复制代码代码如下:Function While_read_LINE(){cat $FILENAME | while read LINEdoecho $LINEdone}注释:我只所有把这种方式叫做管道法,相比大家应该可以看出来了吧。当遇见管道的时候管道左边的命令的输出会作为管道右边命令的输入然后被输入出来。方法3: 文件描述符法复制代码代码如下:Function while_read_line_fd(){Exec 3<&0Exec 0<$FILENAMEWhile read LINEDoEcho $LINEExec 0<&<3}注释: 这种方法分2步骤,第一,通过将所有内容重定向到文件描述符3来关闭文件描述符0.为此我们用了语法Exec 3<&0 。第二部将输入文件放送到文件描述符0,即标准输入。方法4 for 循环。复制代码代码如下:function for_in_file(){For i in `cat $FILENAME`doecho $idone}注释:这种方式是通过for循环的方式来读取文件的内容相比大家很熟悉了,这里不多说。对各个方法进行测试,看那方法的执行效率最高。首先我们用脚本(脚本见附件)生成一个70000行的文件,文件位置在/scripts/bigfile。然后通过下面的脚本来测试各个方法的执行效率,脚本很简单,不再解释。复制代码代码如下:#!/bin/bashFILENAME="$1"TIMEFILE="/tmp/loopfile.out" > $TIMEFILESCRIPT=$(basename $0)function usage(){echo -e "\nUSAGE: $SCRIPT file \n"exit 1}function while_read_bottm(){while read LINEdoecho $LINEdone < $FILENAME}function while_read_line(){cat $FILENAME | while read LINEdoecho $LINEdone}function while_read_line_fd(){exec 3<&0exec 0< $FILENAMEwhile read LINEdoecho $LINEdoneexec 0<&3}function for_in_file(){for i in `cat $FILENAME`doecho $idone}if [ $# -lt 1 ] ; thenusagefiecho -e " \n starting file processing of each method\n"echo -e "method 1:"echo -e "function while_read_bottm"time while_read_bottm >> $TIMEFILEecho -e "\n"echo -e "method 2:"echo -e "function while_read_line "time while_read_line >> $TIMEFILEecho -e "\n"echo -e "method 3:"echo "function while_read_line_fd"time while_read_line_fd >>$TIMEFILEecho -e "\n"echo -e "method 4:"echo -e "function for_in_file"time for_in_file >> $TIMEFILE执行脚本后: [root@localhost shell]# ./while /scripts/bigfile脚本输出内容:复制代码代码如下:method 1:function while_read_bottmreal 0m5.689suser 0m3.399ssys 0m1.588smethod 2:function while_read_linereal 0m11.612suser 0m4.031ssys 0m4.956smethod 3:function while_read_line_fdreal 0m5.853suser 0m3.536ssys 0m1.469smethod 4:function for_in_filereal 0m5.153suser 0m3.335ssys 0m1.593s下面我们对各个方法按照速度进行排序。复制代码代码如下:real 0m5.153s method 4 (for 循环法)real 0m5.689s method 1 (while 釜底抽薪法)real 0m5.853s method 3 (标识符法)real 0m11.612s method 2 (管道法)由此可见在各个方法中,for语句效率最高,而在while循环中读写文件时,复制代码代码如下:while read LINEdoecho $LINEdone < $FILENAME方式执行效率最高。
-
#!/bin/sh#测试各种字符串比较操作。#shell中对变量的值添加单引号,爽引号和不添加的区别:对类型来说是无关的,即不是添加了引号就变成了字符串类型,#单引号不对相关量进行替换,如不对$符号解释成变量引用,从而用对应变量的值替代,双引号则会进行替代#author:tenfyguoA="$1"B="$2"echo "输入的原始值:A=$A,B=$B"#判断字符串是否相等if [ "$A" = "$B" ];thenecho "[ = ]"fi#判断字符串是否相等,与上面的=等价if [ "$A" == "$B" ];thenecho "[ == ]"fi#注意:==的功能在[[]]和[]中的行为是不同的,如下#如果$a以”a”开头(模式匹配)那么将为trueif [[ "$A" == a* ]];thenecho "[[ ==a* ]]"fi#如果$a等于a*(字符匹配),那么结果为trueif [[ "$A" == "a*" ]];thenecho "==/"a*/""fi#File globbing(通配) 和word splitting将会发生, 此时的a*会自动匹配到对应的当前以a开头的文件#如在当前的目录中有个文件:add_crontab.sh,则下面会输出ok#if [ "add_crontab.sh" == a* ];then#echo "ok"#fiif [ "$A" == a* ];thenecho "[ ==a* ]"fi#如果$a等于a*(字符匹配),那么结果为trueif [ "$A" == "a*" ];thenecho "==/"a*/""fi#字符串不相等if [ "$A" != "$B" ];thenecho "[ != ]"fi#字符串不相等if [[ "$A" != "$B" ]];thenecho "[[ != ]]"fi#字符串不为空,长度不为0if [ -n "$A" ];thenecho "[ -n ]"fi#字符串为空.就是长度为0.if [ -z "$A" ];thenecho "[ -z ]"fi#需要转义<,否则认为是一个重定向符号if [ $A /< $B ];thenecho "[ < ]"fiif [[ $A < $B ]];thenecho "[[ < ]]"fi#需要转义>,否则认为是一个重定向符号if [ $A /> $B ];thenecho "[ > ]"fiif [[ $A > $B ]];thenecho "[[ > ]]"fi
-
## 一、问题原因,是由于CVE-2020-17489相关补丁引入的,暂不清楚是何原因造成,但除去该相关补丁之后,该问题消失。 在网上查了下,CVE-2020-17489的问题是gnome-shell的某些配置中会发现,注销账户时,登陆对话框中的密码框会重新出现,并且密码仍然可见,如果用户决定在登陆时以明文形式显示密码,则在注销时它会在短时间内可见(如果密码从未以明文形式显示,则仅显示密码长度)。 ## 二、临时解决方案: 当前openEuler 20.03 LTS SP2使用的gnome-shell为gnome-shell-3.30.1-8.oe1x86_64.rpm;当前openEuler 20.03 LTS SP3使用的gnome-shell为gnome-shell-3.30.1-10.oe1x86_64.rpm;将该版本的gnome-shell删除后,安装openEuler 20.03 LTS SP1的gnome-shell-3.30.1-7.oe1x86_64.rpm版本。 ##### 1.下载gnome-shell-3.30.1-7.oe1x86_64.rpm `wget https://repo.openeuler.org/openEuler-20.03-LTS-SP1/OS/x86_64/Packages/gnome-shell-3.30.1-7.oe1.x86_64.rpm` ##### 2.删除当前gnome-shell `rpm -e --nodeps gnome-shell` ##### 3.安装下载的软件包gnome-shell `rpm -ivh gnome-shell-3.30.1-7.oe1.x86_64.rpm` ##### 4.查看当前安装的gnome-shell版本 `rpm -qi gnome-shell` 如果版本无误的话,可以再其他虚拟终端中使用`pkill -9 gdm`命令杀死gdm,让其自动启动,重新进入到登陆界面,或者重启也可以,则会发现,能够进入到桌面中。
-
脚本:[root@lzw oldboy]# more while_web.sh #!/bin/bash#check url#2019-11-18. /etc/init.d/functionsif [ $# -ne 1 ];then echo $"usage $0 url" exit 1fiwhile truedo if [ `curl -o /dev/null --connect-timeout 5 -s -w "%{http_code}" $1|egrep -w "200|301|302" |wc -l` -ne 1 ] then action "$1 is error." /bin/false echo "$1 is error" | mail -s "$1 is error" xxxxx@qq.com else action "$1 is ok" /bin/true fi sleep 10done测试:[root@lzw oldboy]# sh while_web.sh https://www.baidu.comhttps://www.baidu.com is ok [ OK ]https://www.baidu.com is ok [ OK ]https://www.baidu.com is ok [ OK ]https://www.baidu.com is ok [ OK ]https://www.baidu.com is ok [ OK ][root@lzw oldboy]# sh while_web.sh http://htgl.hefei.gov.cn/http://htgl.xxxx.gov.cn/ is error. [FAILED]http://htgl.xxxx.gov.cn/ is error. [FAILED]To: xxxx@qq.comSubject: http://htgl.xxxx.gov.cn/ is errorUser-Agent: Heirloom mailx 12.5 7/5/10MIME-Version: 1.0Content-Type: text/plain; charset=us-asciiContent-Transfer-Encoding: 7bitMessage-Id: <20191116084729.B5DA962778B4@lzw.localdomain>From: root@lzw.localdomain (root)http://htgl.xxxx.gov.cn/ is error注释:本脚本用于检测具体某一个网站是否正常打开。脚本通过if语句判断是否输入为空,为空的话提示相关的信息。其次,脚本通过while语句判断网站信息是否能正常打开。打开网页通过curl命令的尝试打开输入网址是否超过五秒,通过输出的返回值来判断网页是否能正常打开。如果打开页面提示ok,失败则error并发送邮件告警。100-199 用于指定客户端应相应的某些动作。 200-299 用于表示请求成功。 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 400-499 用于指出客户端的错误。 500-599 用于支持服务器错误。
-
和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。Shell 文件包含的语法格式如下:. filename # 注意点号(.)和文件名中间有一空格或source filename实例创建两个 shell 脚本文件。test1.sh 代码如下:#!/bin/bash# author:DevCloud教程# url:www.DevCloud教程.comurl="http://www.DevCloud教程.com"test2.sh 代码如下:#!/bin/bash# author:DevCloud教程# url:www.DevCloud教程.com#使用 . 号来引用test1.sh 文件. ./test1.sh# 或者使用以下包含文件代码# source ./test1.shecho "DevCloud教程:$url"接下来,我们为 test2.sh 添加可执行权限并执行:$ chmod +x test2.sh $ ./test2.sh DevCloud教程:http://www.DevCloud教程.com
-
已经成功通过命令打开设备上的do0开关,能听见继电器开关的响声。 命令为 echo 1 > /dev/do0 输入以上命令后设备开关打开 但是用什么关闭呢? echo 0 > /dev/do0不成功
-
输出重定向重定向一般通过在命令间插入特定的符号来实现。特别的,这些符号的语法如下所示:command1 > file1上面这个命令执行command1然后将输出的内容存入file1。注意任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符。实例执行下面的 who 命令,它将命令的完整的输出重定向在用户文件中(users):$ who > users执行后,并没有在终端输出信息,这是因为输出已被从默认的标准输出设备(终端)重定向到指定的文件。你可以使用 cat 命令查看文件内容:$ cat users_mbsetupuser console Oct 31 17:35 tianqixin console Oct 31 17:35 tianqixin ttys000 Dec 1 11:33 输出重定向会覆盖文件内容,请看下面的例子:$ echo "华为云官网:www.华为云.com" > users$ cat users华为云官网:www.华为云.com$如果不希望文件内容被覆盖,可以使用 >> 追加到文件末尾,例如:$ echo "华为云官网:www.华为云.com" >> users$ cat users华为云官网:www.华为云.com华为云官网:www.华为云.com$输入重定向和输出重定向一样,Unix 命令也可以从文件获取输入,语法为:command1 < file1这样,本来需要从键盘获取输入的命令会转移到文件读取内容。注意:输出重定向是大于号(>),输入重定向是小于号(<)。实例接着以上实例,我们需要统计 users 文件的行数,执行以下命令:$ wc -l users 2 users也可以将输入重定向到 users 文件:$ wc -l < users 2 注意:上面两个例子的结果不同:第一个例子,会输出文件名;第二个不会,因为它仅仅知道从标准输入读取内容。command1 < infile > outfile同时替换输入和输出,执行command1,从文件infile读取内容,然后将输出写入到outfile中。重定向深入讲解一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。如果希望 stderr 重定向到 file,可以这样写:$ command 2>file如果希望 stderr 追加到 file 文件末尾,可以这样写:$ command 2>>file2 表示标准错误文件(stderr)。如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:$ command > file 2>&1或者$ command >> file 2>&1如果希望对 stdin 和 stdout 都重定向,可以这样写:$ command < file1 >file2command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。Here DocumentHere Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。它的基本的形式如下:command << delimiter documentdelimiter它的作用是将两个 delimiter 之间的内容(document) 作为输入传递给 command。注意:结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。开始的delimiter前后的空格会被忽略掉。实例在命令行中通过 wc -l 命令计算 Here Document 的行数:$ wc -l << EOF 欢迎来到华为云官网www.华为云.comEOF3 # 输出结果为 3 行$我们也可以将 Here Document 用在脚本中,例如:#!/bin/bash# author:华为云官网# url:www.华为云.comcat << EOF欢迎来到华为云官网www.华为云.comEOF执行以上脚本,输出结果:欢迎来到华为云官网www.华为云.com/dev/null 文件如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:$ command > /dev/null/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。如果希望屏蔽 stdout 和 stderr,可以这样写:$ command > /dev/null 2>&1
上滑加载中
推荐直播
-
华为AI技术发展与挑战:集成需求分析的实战指南
2024/11/26 周二 18:20-20:20
Alex 华为云学堂技术讲师
本期直播将综合讨论华为AI技术的发展现状,技术挑战,并深入探讨华为AI应用开发过程中的需求分析过程,从理论到实践帮助开发者快速掌握华为AI应用集成需求的框架和方法。
去报名 -
华为云DataArts+DWS助力企业数据治理一站式解决方案及应用实践
2024/11/27 周三 16:30-18:00
Walter.chi 华为云数据治理DTSE技术布道师
想知道数据治理项目中,数据主题域如何合理划分?数据标准及主数据标准如何制定?数仓分层模型如何合理规划?华为云DataArts+DWS助力企业数据治理项目一站式解决方案和应用实践告诉您答案!本期将从数据趋势、数据治理方案、数据治理规划及落地,案例分享四个方面来助力企业数据治理项目合理咨询规划及顺利实施。
去报名
热门标签