Linux知识杂记

随机记录linux命令和shell脚本的有关知识

Posted by tianhaoo on March 18, 2019 本文阅读量

本片博客来源于一个坑,今天实验课里面编写shell脚本,在给变量赋值的时候死活都运行不成功,按照网上的教程一个字一个字的敲进去也不行,然后旁边的同学就能 运行,明明一摸一样的,这么简单的赋值命令,在我电脑上就是跑不了,我换个电脑敲也不行,同样的内容,我敲就不行,别人敲就行。在即将就要自闭之际,我发现原来 是我习惯在等号前后加的空格是罪魁祸首,网上搜了下,发现在shell脚本中空格还真得谨慎使用,不禁感叹这是门坑爹的语言,开这样一篇博客记录平常遇到的坑点。 同时也积累shell脚本方面的知识吧,毕竟这对于程序员来说也是一门很重要,很有用的课程。

赋值语句

  1. 定义变量时不加$,使用时要加$,用以区别字符串。使用变量时将变量名用{}括来是个好习惯,shell会将花括号里面的字符解释为一个整体,好处在数组定义的时候会体现。

  2. 千万不要在等号两边加上空格,否则将会报错!

三种给变量赋值的方式

  1. let 使用let时变量不是字符串,而是会计算表达式的值

  2. read e.g. read input 将会将用户输入的字符存在input中

  3. $(command) e.g. a=$(wc -l a.txt) 会把a.txt文件的行数存在变量a中

变量类型

shell脚本中没有变量类型,可以随意赋值,并随意改变变量的内容。

默认情况下变量都被解释为一个字符串,直接用等号赋值时两个变量相加即为字符串相加,bash并不会计算出表达式的值。需要计算表达式的值的时候要用let赋值。

最好赋值给数字型变量时都用let,e.g. let a=5。

crontab定时命令

简介

Linux crontab是用来定期执行程序的命令。 当安装完成操作系统之后,默认便会启动此任务调度命令。 crontab命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。 而linux任务调度的工作主要分为以下两类:

  1. 系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
  2. 个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信号,这些工作可由每个用户自行设置

因此,通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。

使用

该命令的使用很简单,只有三个选项

  • -e 进入文本编辑器,编辑具体的定时任务

  • -l 列出所有的定时任务

  • -r 删除所有的定时任务

但是在设定时间和任务时,语法有点反人类

分 时 日 月 星期 要运行的命令

  • 第1列分钟0~59
  • 第2列小时0~23(0表示子夜)
  • 第3列日1~31
  • 第4列月1~12
  • 第5列星期0~7(0和7表示星期天)
  • 第6列要运行的命令

例如想在每天24点重启一下某个py脚本可以这样写:

# 获取占用8888端口的Pid
netstat -anp|grep 8888|awk '{printf $7}'|cut -d/ -f1

# 通过管道将要kill的Pid传给kill是不行的,例如 echo 34543 | kill 是错误的。需要这样做: kill $(command) 或 kill `command`
# 杀掉8888端口的nohup进程要这样
kill -9 $(netstat -anp|grep 8888|awk '{printf $7}'|cut -d/ -f1)

# 启动的话要用绝对路径,python的路径可以用 which python3 得到
nohup /usr/bin/python3 /root/web_lottery/main.py &

# 合起来就是每天0点的时候杀掉占用8888端口的程序,然后再启动python脚本
00 00 * * * kill -9 $(netstat -anp|grep 8888|awk '{printf $7}'|cut -d/ -f1) && nohup /usr/bin/python3 /root/web_lottery/main.py &

搭建LAMP服务器

简介

  • lamp 即为linux-apache-mysql-php的缩写

  • nginx 相对 apache 的优点:

  • 轻量级,同样起web 服务,比apache 占用更少的内存及资源 *抗并发,nginx处理请求是异步非阻塞的,而apache则是阻塞型的,在高并发下nginx能保持低资源低消耗
  • 高性能高度模块化的设计,编写模块相对简单社区活跃,各种高性能模块出品迅速
  • apache 相对nginx 的优点:
  • rewrite ,比nginx 的rewrite 强大模块超多,基本想到的都可以找到
  • 少bug ,nginx 的bug 相对较多
  • 超稳定

安装顺序

最好是PHP在Apache之后安装,顺序可以按照单词lamp出现的顺序来安装

安装之前先更新一下源

$ sudo apt update

心情好的话还可以更新一下软件

$ sudo apt upgrade

安装命令

  • 先安装apache2
$ sudo apt install apache2

安装完成后可以在浏览器打开127.0.0.1查看是否安装成功

  • 然后是MySQL
$ sudo apt install mysql-server mysql-client

安装过程中会要求输入两次密码

  • 然后是PHP7和apache的PHP7模块
$ sudo apt install php7.0
$ sudo apt install libapache2-mod-php7.0

安装 libapache2-mod-php7.0的目的是为了让Apache支持PHP

运行检测

现在我的Linux就可以是一台服务器了,所有网页文件都放在

/var/www/html

这个目录里面,现在应该只有一个index.html, cd到那个目录

$ sudo vim test.php

写入如下代码

this is a test`:   
<?php
    phpinfo();
?>

在浏览器输入127.0.0.1/test.php ,如果出现PHPinfo页面,说明安装成功