Linux shell
程序猿编码
嘿,编译通过了!
展开
-
不得不知的Linux tee命令
在linux中,我们我们重定向到文件中,可以使用>和>>。>是重定向到一个文件,>>是将输出内容追加到目标文件中。如果文件不存在,就创建文件;如果文件存在,则将新的内容追加到那个文件的末尾,该文件中的原有内容不受影响。两个命令都是如果文件不存在则创建文件。但是今天我们讲的这个主角是tee命令。tee的作用是将一份标准输入多重定向,一份重定向到标准输出/dev/stdout,然后还将标准输入重定向到每个文件FILE中。tee可以把一份数据同时写入几个文件中,而>&原创 2020-11-08 22:09:34 · 2075 阅读 · 0 评论 -
探索shell中[ ]和[[]]的区别
多数情况下[ ]和[[]]是可以通用的,单中括号 [ ],bash 的内部命令,[和test是等同的。双中括号[[ ]],[[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用。[ ] 和 [[]]区别[ ]中可用的比较运算符只有==和!=,可用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。[[ ]] 支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[原创 2020-10-12 21:57:02 · 4162 阅读 · 0 评论 -
Linux下trap信号的捕获
trap是一个shell内建命令,它用来在脚本中指定信号如何处理。信号处理在shell编程中非常重要,一般我们会使用信号进行进程间的通信工作。我们可以使用kill命令发送信号,然后使用trap命令捕获并处理信号。kill命令很多人理解就是杀死进程,殊不知kill除了可以杀死进程还可以做别的。kill命令本质kill本质上是在给进程发送特定信号,这个信号可以是告诉进程终止运行、继续运行、暂停运行等等。而进程在收不到这些信号就会执行具体的动作。说明:只有第9种信号(SIGKILL)才可以无条件终止进原创 2020-07-26 12:40:10 · 1490 阅读 · 0 评论 -
Linux shell 获取SSH暴力破解攻击黑名单列表及iptables使用
SSH是Secure shell的简称,是一种可以用来加密连接的服务器的标准协议,使用SSH远程管理服务器,可以有效的防止信息泄露,目前几乎所有的UNIX服务器都会支持该协议。虽然SSH属于加密连接,但是如果攻击者使用暴力破解的方式破解远程密码,服务器中的数据依然有被盗取的危险,特别是在使用弱密码的情况下更是如此。暴力破解是攻击者使用密码字典中的密码逐一枚举,分别尝试每个密码是否可以登录服务器,如果字典中的密码足够多,并且不限制时间,理论上一定是可以破解成功的。作为管理员,我们需要识别这些攻击并能够拦截原创 2020-07-15 22:16:09 · 1494 阅读 · 0 评论 -
shell非常实用的函数功能
与大多数开发语言一样,Shell同样支持函数功能。函数就是给一段代码起一个别名,也就是函数名,定义函数名的规则与定义变量名的规则基本一致,但是函数名运行以数字开头。使用函数可以方便地封装某种特定的功能代码,在调用函数时不需要关心它是如何实现的,只需知道这个函数是做什么的,就可以直接调用它完成某项功能。函数必须先定义,才能被调用。合理地使用函数可以将一个大的工程分割为若干的小功能模块,代码的可读性更好,还可以有效的避免代码重复。函数定义方式定义函数的语法格式多种,可以任选一种方式,调用函数时直接写函数原创 2020-07-09 23:32:22 · 715 阅读 · 0 评论 -
linux中grep命令数据过滤和筛选
Linux世界中有句古老的说法“一切皆文件”,而且很多配置文件是纯文本文件,工作中,我们时常需要对大量的服务器进行配置的修改,如果以手动方式在海量的数据中进行查找匹配并最终完成修改,则其效率极低。此时,Linux系统提供了一个非常方便的grep命令,grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。下面对grep命令使用进行讲解。grep命令grep是一个强大的文本搜索工具。grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,原创 2020-07-05 23:08:25 · 21532 阅读 · 0 评论 -
不可不知的shell中的IFS
Linux下有一个特殊的环境变量叫做IFS,叫做内部字段分隔符(internal field separator)。它可以决定项目列表或值的列表的分隔符,IFS的默认值为空格,Tab制表符或换行符。使用for循环读取项目的列表或直列表时,就会根据IFS的值判断列表中的个数,最终决定循环的次数。默认情况下,bash shell会将下面的字符当做字段分隔符:空格、制表符、换行符。ASCLL码表IPFS的值是空格或Tab制表符当我们在终端上使用echo命令输出IFS的值时,因为IFS的值是空格或Tab原创 2020-06-30 23:29:49 · 1275 阅读 · 0 评论 -
Shell中调用外部脚本的若干种方式
在运行shell脚本时候,有三种方式来调用外部的脚本,exec(exec script.sh)方式、source(source script.sh)方式、fork(./script.sh)方式。fork方式通常情况下在系统中通过相对路径或绝对路径执行一个命令时,都会由父进程开启一个子进程,当子进程结束后再返回父进程,这种行为过程就叫fork。当脚本中正常调用一个外部命令或其他脚本时,都会fork一个子shell进程,我们的命令会运行在这个子shell中。subshell.sh#!/bin/bash原创 2020-06-19 23:58:19 · 4988 阅读 · 0 评论 -
Linux下使用inotify-tools工具监控文件
如果想在Linux上监控文件系统的变化,如访问属性、读写属性、权限属性、删除创建、移动等操作。可以考虑使用inotify-tools 工具,inotify-tools 是一个C库和一组命令行的工作提供Linux下inotify的简单接口。下面对inotify-tools讲解。inotify-toolsinotify是一个API,需要通过开发应用程序进行调用,对于大多数用户来讲这有着许多不便,inotify-tools的出现弥补了这一不足。inotify-tools是一套组件,它包括一个C库和几个命令行工原创 2020-06-16 23:27:11 · 4356 阅读 · 1 评论 -
Linux shell脚本文件的各种执行方式
当我们编写好脚本文件以后,接下来就是执行脚本文件了。执行脚本文件的方式有很多种,比如一个文件a.sh,我们可以选择需要执行权限的方式(chmod +x a.sh),不需要执行权限的方式(bash a.sh或者sh a.sh),需要开启子进程的方式,不需要开启进程的方式。可执行权限方式通过chmod 命令可以给脚本文件分配执行权限,脚本文件一旦有了执行权限,就可以使用绝对路径或相对路径执行了。下面来看看效果:empty.sh#!/bin/bashif [ $# -eq 0 ];then echo原创 2020-06-14 21:29:07 · 11933 阅读 · 1 评论 -
Linux shell 自动化修改SSH配置文件
SSH可以为远程登录的会话和其他网络服务提供安全性的协议。它是目前较可靠,是专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题,透过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。在实际开发当中我们一般在PC端安装客户端软件连接SSH服务,常用工具为(MobaXterm,Xshell,SecureCRT等)。因为SSH是加密传输数据的,所以可以有效的远程管理过程中的信息泄露。当然前提是配置正确的SSH服务,在/etc/ssh/sshd原创 2020-06-07 12:10:03 · 4181 阅读 · 0 评论 -
Linux shell 脚本实战案例:监控网络连接状态
部署在Linux服务器上的业务一般都是支持高并发连接的服务,如HTTP、FTP、DNS等服务器都可以提供成百上千的并发连接数。虽然日志文件可以为我们提供历史数据,但是如果想了解服务器实时的网络连接状态呢?应该什么做?Centos7系统中默认包含了ss这个工具,它可以实现类似netstat的功能,比netstat更高效,也可以显示更多有关网络连接状态的信息。但是想监控网络连接状态,熟悉TCP和UDP是必要的条件。如果不知道TCP可以参考这篇文章《网络编程-从TCP三次握手说起》和《网络编程-TCP的四次挥手》原创 2020-06-02 23:21:56 · 4828 阅读 · 0 评论 -
分享一些实用linux shell脚本例子
1、本脚本主要目的是获取主机的数据信息。例如:内存、网卡IP、CPU负载。sys_info.sh#!/bin/bashlocalip=$(ifconfig ens33 | grep netmask | tr -s " " | cut -d " " -f3)mem=$(free | grep Mem | tr -s " " | cut -d " " -f7)cpu=$(uptime | tr -s " " | cut -d " " -f11)echo "IP address:$localip"原创 2020-05-30 22:43:02 · 3058 阅读 · 0 评论 -
Linux shell中各种引号的正确使用
在编程中脚本时,我们经常需要用到各种符号,比如说单引号" ,双引号""等等。下面我们通过一些例子来正确使用各种引号。双引号下面来看看官方的手册里面是怎么介绍的双引号的:Double QuotesEnclosing characters in double quotes (‘"’) preserves the literal value of all characters within the quotes, with the exception of ‘KaTeX parse error: Und原创 2020-05-28 22:14:17 · 1637 阅读 · 0 评论 -
linux shell脚本之awk利器
我们都知道awk是专门为文本处理设计的编程语言,也是一个应用程序,几乎所有Linux发行版本都自带这个程序。我们通常用它进行数据扫描、过滤、统计汇总工作。本文只介绍awk的命令行用法,对于大多数场合,应该足够用了。awk基本语法awk 命令的基本格式如下:awk ‘条件1 {动作 1} 条件 2 {动作 2} …’ 文件名awk语法由一系列条件和动作组成,在花括号内可以多个动作,在多个动作之间是有分号分隔,在多个条件和动作之间可以有若干空格,也可以没有。内置变量$0当前记录(作为单原创 2020-05-24 11:44:28 · 720 阅读 · 0 评论 -
Linux sed编辑器中创建正则表达式方式来过滤出需要的数据
前言在shell脚本中成功运用sed编辑器和gawk程序的关键在于熟练使用正则表达式。这可不是件简单的事情,从大量数据中过滤出特定的数据可能会很复杂。下面将介绍如何在sed编辑器中创建正则表达式方式来过滤出需要的数据。字符组如果你想要限定待匹配的具体字符,这个时候就得使用字符组。可以定义用来匹配文本模式中某个位置的一组字符。如果字符组中的某个字符出现在了数据流中,那它就匹配了该模式。使用一...原创 2019-12-08 21:12:30 · 971 阅读 · 0 评论 -
Linux shell 一一 在脚本中使用select创建文本菜单
前言在创建文本菜单时候,如果不用select或者dialog命令创建文本菜单,可能会花一半的时间在建立菜单布局和获取用户输入上。select命令select命令只需要一条命令就可以创建菜单,然后获取输入的答案并自动处理。select命令的格式如下:select variable in listdo commandsdonelist参数是由空格分隔的文本选项列表,这些列表...原创 2019-12-02 22:37:08 · 1274 阅读 · 0 评论 -
Linux shell 如何创建函数库文件
前言使用函数可以在脚本中省去一些工作时间,这一点是显然易见的。但如果你碰巧要在多个脚本中使用同一段代码呢?显然,为了使用一次而在每个脚本中都定义同样的函数太麻烦了。为了解决这个问题,!bash shell允许创建函数库文件。 接下来就自定义创建自己的函数库文件,然后在多个脚本中引用该库文件。创建函数库文件这个过程的第一步是创建一个包含脚本中所需的函数的公用库文件。在这里创建一个函数库文件m...原创 2019-12-01 15:12:48 · 939 阅读 · 0 评论 -
Linux shell 如何捕获信号(trap命令)
前言Linux利用信号与运行在系统中的进程进行通信。当你在终端中按下(Ctrl +C)Linux内核会停止为shell分配CPU处理时间。会生成SIGINT信号中断进程。而下面要将的是trap命令在信号出现时捕获他们并执行命令。捕获信号trap命令允许你来指定shell脚本要监看并从shell中拦截的Linux信号。如果在脚本收到了trap命令中列出的信号,该信号不再由shell处理,而是交...原创 2019-11-28 21:56:03 · 4824 阅读 · 0 评论 -
Linux shell 获得用户输入(read命令)
前言如果你想在脚本运行时问个问题,并在等待运行脚本的人来回答。bash shell为此提供了read命令。read的基本读取read命令的从标准的输入或另一个文件描述符中接受输入。在收到输入后,read命令会将数据放进一个变量。下面是read命令的最简单方法。#!/bin/bash#测试read命令echo -n "Enter your name: "read nameecho...原创 2019-11-27 23:01:30 · 12888 阅读 · 0 评论 -
Linux shell 查找可执行文件
前言当你从命令中运行一个程序的时候,Linux系统会搜索一系列目录查找可执行文件。-x 比较是判断特定的文件是否有可执行权限的一个简单方法。检查文件是否可以执行当你在shell脚本中运行大量的脚本,它就会发挥作用。下面来运行一个例子,检查当前文件是否存在,并可执行。#! /bin/bashif [ -x test1.sh ]then echo "You can the scri...原创 2019-11-24 11:53:16 · 4237 阅读 · 1 评论 -
Linux shell 一一 while 命令与until命令
前言while命令某种意义上是 if-then语句和for循环的混合体。while命令允许定义一个要测试的命令,然后在循环执行一组命令,只要定义的测试命令返回的是退出状态码0。它会在每次迭代的一开始测试test命令。在test命令返回非零退出状态码时,while命令会停止执行那组命令。while 的基本格式while命令的格式是:while test commanddo other ...原创 2019-11-22 23:31:57 · 935 阅读 · 0 评论 -
Linux shell 查看退出状态码(特殊变量$?)
前言在shell中运行的每个命令都使用了退出状态码告诉shell它已经运行完毕。退出状态码是一个0~255的整数值,在命令运行时由命令传给shell。可以捕获这个值并在脚本中使用。查看退出状态码Linux提供了一个专门的变量?来保存上个已执行的退出状态码。对于需要进行检查的命令,必须在运行完毕后立刻查看?来保存上个已执行的退出状态码。对于需要进行检查的命令,必须在运行完毕后立刻查看?来保存上...原创 2019-11-18 22:54:52 · 11072 阅读 · 0 评论 -
Linux shell 内建命令和外部命令
前言在shell中可执行的命令分为内键命令和外部命令。在此之前,搞明白shell的内建命令和外部命令非常重要。下面将简要描述什么是内建命令和外部命令?内建命令内建命令不需要子进程来执行,它已经和shell编译为一体。作为shell工具的组成部分存在。内建命令不需要借助外部程序文件来运行。而常见shell内建命令有如下命令:bind将键盘序列绑定到一个 readline 函数或宏...原创 2019-11-11 20:24:50 · 2097 阅读 · 0 评论 -
Linux shell 实时监测进程(top命令)
前言当程序运行在系统时,我们称子为进程。想要监测这些进程,需要用到ps命令。虽然ps命令在收集运行在系统中的信息时非常有用。但是不足之处在于,ps命令只能显示某个特定时间点的信息。而要想实时监测进程状态,需要用到接下来所讲的top命令。实时监测进程我们前言也说了,ps命令只能显示某个特定时间点的信息,不能观察那些频繁换进换出的内存的进程趋势。而top命令刚好适用这种情况。其实ps命令跟top...原创 2019-11-10 21:22:13 · 2878 阅读 · 0 评论 -
Linux shell 查看文件内容
前言Linux 中有几个命令可以查看文件的内容,而不需要调用其他文本编辑器(例如:UltraEdit)。下面通过 linux shell 命令 file查看文件内容。file命令 查看文件类型在显示文件内容之前,应该先了解一下文件的类型。如果打开了一个二进制文件,你会在屏幕上看到各种乱码,除非用(UltraEdit)打开二进制文件。file 命令是一个随手可得的便捷工具,它能够探测文件的内...原创 2019-11-07 23:46:22 · 4676 阅读 · 0 评论