标签分类
当前位置:首页 > > Linux电子书网盘下载
Linux Shell脚本攻略 Linux Shell脚本攻略
码小辫

码小辫 提供上传

资源
15
粉丝
28
喜欢
70
评论
20

    Linux Shell脚本攻略 PDF 全书超清第3版

    Linux电子书
    • 发布时间:

    给大家带来的一篇关于Linux相关的电子书资源,介绍了关于Linux、Shell、脚本方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小10.25 MB,克里夫·弗林特编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:7.2

  • Linux Shell脚本攻略 PDF 下载
  • 下载地址:https://pan.baidu.com/s/1-qYv10wT86uJLyhryttUMg
  • 分享码:1u63
  • Linux Shell脚本攻略

    Linux Shell脚本攻略第三版电子书封面

    读者评价

    这本书不错,就是书薄了点,不过正所谓少而精么,对于初学者,绝对是一本不错的提高书。书中有很多技巧是很多脚本老手经常使用,却不会手把手教你的。不同于传统的脚本书籍,这本书没有长篇大论,都是一个接着一个的小技巧,很实用。
    文章采用代码都是从原书上复制来的,关键是换行也复制过来了,明明一行命令还没到页宽,就啪的一下换行了,匪夷所思!!!作者自己完全没有自己跑过代码。
    我看了这本书,我也看了前面的一些评论。我个人的感觉是这本书的干货还是很多的,作者很努力的想写成一个有体系的内容,但是从书本内容来看,还是不够的,讲得不够深入,节点性的知识点很多,但是为了解决一些常见问题,很有用。需要赞一个的是这本书的书名,cookbook,认真的看看,这就是一个cookbook,这不是脚本语言,或者什么宝典,或者什么七天学会,这就是个cookbook。他没法和你讲得很深入,而且作者写这本书的时候才20岁,能写成这样,我觉得就把它当成一个20岁年轻人的读书笔记吧,20岁做到这些,很厉害了。翻译还不错,有些小细节有错误。你自己看书的时候,难道不需要一个个脚本的去敲,去调试吗?别人说什么你就认,这也不是一个好的读书态度。

    内容介绍

    Linux/GNU是一款非凡的操作系统,拥有稳定可靠且极其强大的开发环境。作为与操作系统进行沟通的原生界面,shell能够控制整个操作系统的运作,是与Linux进行交互最灵活的手段。
    本书向读者展现了如何有效地利用shell完成复杂的任务。作者从shell的基础知识开始,介绍简单命令的用法、对各类文件进行操作,随后讲解文本处理、Web交互、备份、监视以及其他系统管理任务,涵盖初中高三级主题,传授脚本老手经常使用的诸多技巧。书中所有示例均基于具体任务,透彻清晰,通俗易懂。
    第3版进行了全面修订,囊括Linux最新发行版新特性,增加了仓储管理、网络分组、动态调用、系统调优、容器、云等100余页篇幅的新内容,极具实用价值,让看似复杂的Linux shell脚本任务迎刃而解。
    •通过脚本与Web站点交互
    •编写脚本,挖掘并处理Web数据
    •使用crontab实现系统备份及其他重复性任务的自动化
    •创建、压缩、加密重要数据
    •配置并监视以太网和无线网络
    •监视并记录网络和系统的活动日志
    •系统调优,实现性能优化,提高系统安全性
    •鉴别资源占用大户以及网络瓶颈
    •使用git或fossil实现版本控制,处理自由开源软件项目
    •创建并维护Linux容器和虚拟机

    内容节选

    Linux shell脚本的建立与执行

    在进行linux测试时编写脚本是必不可少的。最近经常使用Linux,感觉太频繁地敲击键盘有些累了,于是想到了Shell脚本。可以把太多的命令写成一个脚本,这样每次执行一遍  shell文件,就可以省去了敲击键盘的时间。于是在网上搜了一些有关Linux下脚本编程的内容。

    Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。

    用户可以使用任何文本编辑器编辑shell脚本文件,例如VI、gedit等。

    Shell脚本的名称可以随便定义,也不要什么后缀名,例如可以写abc,smartzip这类名称。

    下面我们开始编写一个Shell脚本:

    1. 程序必须以下面的行开始(必须放在文件的第一行):

    #!/bin/sh

    符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。

    2. 注释

    在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。如同其他编程语言一样,我们在编写脚本时也应该尽可能地添加注释,那么即使相当长的时间内没有使用该脚本,我们也能在很短的时间内明白该脚本的作用及工作原理。

    3. 变量

    在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:变量名=值

    取出变量值可以加一个美元符号($)在变量前面:

    #!/bin/sh
    #对变量赋值:
    a="hello world"
    # 现在打印变量a的内容:
    echo "A is:"
    echo $a

    4. Shell命令和流程控制

    在shell脚本中可以使用三类命令:

    1)Unix 命令:

    虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。

    常用命令语法及功能

    • echo "some text": 将文字内容打印在屏幕上
    • ls: 文件列表
    • wc –l filewc -w filewc -c file:
    • 计算文件行数计算文件中的单词数计算文件中的字符数
    • cp sourcefile destfile: 文件拷贝
    • mv oldname newname : 重命名文件或移动文件
    • rm file: 删除文件
    • grep ''pattern'' file: 在文件内搜索字符串比如:grep
    • ''searchstring'' file.txt
    • cut -b colnum file:指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令
    • cat file.txt: 输出文件内容到标准输出设备(屏幕)上
    • file somefile: 得到文件类型
    • read var: 提示用户输入,并将输入赋值给变量
    • sort file.txt: 对file.txt文件中的行进行排序
    • uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq
    • expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3
    • find: 搜索文件比如:根据文件名搜索find . -name filename -print
    • tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee  outfile
    • basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux
    • dirname file: 返回文件所在路径比如:dirname /bin/tux将返回/bin
    • head file: 打印文本文件开头几行
    • tail file : 打印文本文件末尾几行

    sed: Sed是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。不要和shell中的通配符相混淆。比如:将linuxfocus 替换为 LinuxFocus :cat text.file | sed ''s/linuxfocus/LinuxFocus/'' > newtext.fileawk: awk

    用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。cat   file.txt | awk -F, ''{print $1 "," $3  }''这里我们使用,作为字段分割符,同时打印第一个和第三个字段。如果该文件内容如下: AdamBor, 34, IndiaKerry Miller, 22, USA命令输出结果为:AdamBor, IndiaKerry Miller, USA

    2) 概念: 管道, 重定向和 backtick

    这些不是系统命令,但是他们真的很重要。管道 (|) 将一个命令的输出作为另外一个命令的输入。

    grep "hello" file.txt | wc -l

    在file.txt中搜索包含有”hello”的行并计算其行数。

    在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。

    重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。

    >  写入文件并覆盖旧文件

    >> 加到文件的尾部,保留旧文件内容。

    反短斜线

    使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。

    命令: find . -mtime -1 -type f -print 用来查找过去24小时(-mtime –2则表示过去48小时)内修改过的文件。如果您想将所有查找到的文件打一个包,则可以使用以下脚本:

    #!/bin/sh
    # The ticks are backticks (`) not normal quotes (''):
    tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f 
    -print`

    3) 流程控制

    "if" 表达式 如果条件为真则执行then后面的部分:

     if ....; then
    ....
    elif ....; then
    ....
     else
     ....
     fi

    大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。

    •  [ -f "somefile" ] :判断是否是一个文件
    •  [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
    •  [ -n "$var" ] :判断$var变量是否有值
    •  [ "$a" = "$b" ] :判断$a和$b是否相等

    5. 执行脚本 Linux下的sh文件默认是有执行权限的。我们可以用命令:ls -l file_name来查看用户对文件的权限。如果没有执行权限,可以执行以下命令添加:chmod +x file_name 。然后可以通过运行:sh XX.sh这样的命令来运行脚本。当然不同的系统可能不完全相同,需要根据实际情况来。例如有的Linux下是./XX.sh就可以运行。

    概括地来说,shell对shell脚本的调用可以采用3种方式:

    (1)一种是将文件名作为shell命令的参数,其调用格式为:

    $ Bash script_file

    当要被执行的脚本文件没有可执行权限时,只能使用这种调用方式。

    (2)另一种调用的方法是先将脚本文件的访问权限更改为可执行,以便该文件可以作为执行文件调用。

    具体的方法是:$chmod +x  script_file

    $PATH=$PATH:$PWD
    $script_file

    (3)当执行一个脚本文件时,Shell就产生了一个Shell(即一个子进程)去执行文件中的命令。因此,脚本文件的变量值不能传递到当期Shell(即父进程)。为了使脚本文件中的变量值传递到当前Shell,必须在命令文件名前面加“.”。即:

    $./script_file

    “.”命令的功能是在当前shell中执行脚本文件中的命令,而不是产生一个子shell执行命令文件中的命令。

    目录

    • 第1章 小试牛刀  1
    • 第2 章 命令之乐  46
    • 第3 章 以文件之名  92
    • 第4 章 让文本飞  128
    • 第5 章 一团乱麻?没这回事!  162
    • 第6 章 仓储管理  189
    • 第7 章 B 计划  215
    • 第8 章 无网不利  235
    • 第9 章 明察秋毫  274
    • 第10 章 管理重任  305
    • 第11 章 觅迹寻踪  342
    • 第12 章 系统调优  355
    • 第13 章 在云端  369

    读书笔记

    MySQL的一些功能实用的Linux shell脚本分享

    Memcached启动脚本

    # vim /etc/init.d/memcached
    
    #!/bin/bash
    #=======================================================================================
    # chkconfig: - 80 12
    # description: Distributed memory caching daemon
    # processname: memcached
    #=======================================================================================
    IPADDR=`/sbin/ifconfig eth1 | awk -F ':' '/inet addr/{print $2}' | sed 's/[a-zA-Z ]//g'`
    PORT="11211"
    USER="root"
    SIZE="2048"
    CONNNUM="51200"
    PIDFILE="/var/run/memcached.pid"
    BINFILE="/usr/local/memcached/bin/memcached"
    LOCKFILE="/var/lock/subsys/memcached"
    RETVAL=0
          
    start() {
      echo -n $"Starting memcached......"
      $BINFILE -d -l $IPADDR -p $PORT -u $USER -m $SIZE -c $CONNNUM -P $PIDFILE
      RETVAL=$?
      echo
      [ $RETVAL -eq 0 ] && touch $LOCKFILE
            
      return $RETVAL
    }
          
    stop() {
      echo -n $"Shutting down memcached......"
      /sbin/killproc $BINFILE
      RETVAL=$?
      echo
      [ $RETVAL -eq 0 ] && rm -f $LOCKFILE
            
      return $RETVAL
    }
          
    restart() {
      stop
      sleep 1
      start
    }
          
    reload() {
      echo -n $"Reloading memcached......"
      /sbin/killproc $BINFILE -HUP
      RETVAL=$?
      echo
            
      return $RETVAL
    }
          
    case "$1" in
    start)
      start
      ;;
            
    stop)
      stop
      ;;
            
    restart)
      restart
      ;;
            
    condrestart)
      [ -e $LOCKFILE ] && restart
      RETVAL=$?
      ;;
            
    reload)
      reload
      ;;
            
    status)
      status $prog
      RETVAL=$?
      ;;
            
    *)
      echo "Usage: $0 {start|stop|restart|condrestart|status}"
      RETVAL=1
    esac
    

               

    exit $RETVAL
    # chmod +x /etc/init.d/memcached
    # chkconfig --add memcached
    # chkconfig --level 235 memcached on
    # service memcached start
    

    binlog 自动清理脚本

    # vim /data/scripts/delete_mysql_binlog.sh
    
    #!/bin/bash
    #=======================================================================================
    #  用于删除 MySQL Master 端已经同步完的 binlog【需在 Master 端运行】,以减少磁盘空间
    #  每天凌晨 5:30 分运行一次
    #
    #  注:需在 Slave 端添加允许 Master 端访问的帐号【帐号:check_binlog,密码:binlog_2356】
    #     运行于 MySQL Master 端【目前只用于一主一从的同步模式,对于多从的情况暂时未考虑】
    #=======================================================================================
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
       
    ## Slave端连接信息
    SLAVE_ADDR="XXX.XXX.XXX.XXX"
    SLAVE_USER="check_binlog"
    SLAVE_PWD="binlog_2356"
       
    LOGFILE="/data/logs/db_sync_info.log"
    PINGFILE="/tmp/mysqlping.log"
       
    ## MySQL状态信息查看命令
    SQLCMD="show slave status"
       
    #=======================================================================================
    ## 检查MySQL是否已经运行
    if [[ `ps aux | grep mysql[d] | wc -l` -eq 0 ]]; then
      echo The MySQL is not running at: `date +%F" "%H-%M-%S` >> ${LOGFILE}
      exit 1
    fi
       
    ## 测试Slave端的连通性
    nohup mysqladmin -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} ping > ${PINGFILE}
    retval=`grep "^error" ${PINGFILE}`
    rm -f ${PINGFILE}
    if [[ "${retval}X" != "X" ]]; then
      echo The MySQL Slave can not be connected at: `date +%F" "%H-%M-%S` >> ${LOGFILE}
      exit 1
    fi
       
    ## 检查是否合法的Slave
    MASTER_ADDR=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e "${SQLCMD}\G;" | awk '$1=="Master_Host:" {print $2}'`
    LOCAL_ADDR=`/sbin/ifconfig eth1 | awk -F ':' '/inet addr/{print $2}' | sed 's/[a-zA-Z ]//g'`
    if [[ "${MASTER_ADDR}" != "${LOCAL_ADDR}" ]]; then
      echo The MySQL Slave is not lawful at: `date +%F" "%H-%M-%S` >> ${LOGFILE}
      exit 1
    fi
       
    ## 获得Slave端信息,以此来确定是否处于正常同步的情况
    IO_STATUS=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e "${SQLCMD}\G;" | awk '$1=="Slave_IO_Running:" {print $2}'`
    SQL_STATUS=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e "${SQLCMD}\G;" | awk '$1=="Slave_SQL_Running:" {print $2}'`
    if [[ "${IO_STATUS}" != "Yes" || "${SQL_STATUS}" != "Yes" ]]; then
      echo The MySQL Replication is not synchronous at: `date +%F" "%H-%M-%S` >> ${LOGFILE}
      exit 1
    fi
       
    ## 再做一次判断,以保证数据同步绝对正常【创建测试数据】
    mysql -uroot -e "create database if not exists mytestdb;"
    sleep 3
       
    retval=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e "show databases;" | grep mytestdb`
    mysql -uroot -e "drop database if exists mytestdb;"
    if [[ "${retval}X" = "X" ]]; then
      echo The MySQL Replication is not synchronous at: `date +%F" "%H-%M-%S` >> ${LOGFILE}
      exit 1
    fi
       
    ## 在已经同步的情况,还需要判断当前同步的binlog,以此来确定哪些已经是过期的binlog
    SLAVE_BINLOG1=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e "${SQLCMD}\G;" | awk '$1=="Master_Log_File:" {print $2}'`
    SLAVE_BINLOG2=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e "${SQLCMD}\G;" | awk '$1=="Relay_Master_Log_File:" {print $2}'`
    ## 获得Master端,当前的binlog文件以及binlog路径
    MASTER_BINLOG=`mysql -uroot -e "show master status;" | grep -v '^+' | tail -1 | awk '{print $1}'`
       
    ## 主从端已经同步到相同的binlog
    if [[ "${SLAVE_BINLOG1}" = "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" = "${MASTER_BINLOG}" ]]; then
      CURR_BINLOG="${MASTER_BINLOG}"
         
    ## 主从端已经同步,但从端的binlog还没有追赶到主端最新的binlog
    elif [[ "${SLAVE_BINLOG1}" = "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" != "${MASTER_BINLOG}" ]]; then
      CURR_BINLOG="${SLAVE_BINLOG1}"
         
    ## 主从端已经同步,主从端的binlog一致,但relaylog还不一致
    elif [[ "${SLAVE_BINLOG1}" != "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" = "${MASTER_BINLOG}" ]]; then
      CURR_BINLOG="${SLAVE_BINLOG2}"
         
    else
      echo Has noknown error at:`date +%F" "%H-%M-%S` >> ${LOGFILE}
      exit 1
    fi
       
    mysql -uroot -e "purge binary logs to '${CURR_BINLOG}';"
    if [[ $? -eq 0 ]]; then
      echo Clear MySQL binlog is ok at: `date +%F" "%H-%M-%S` >> ${LOGFILE}
    fi
    
    
    # crontab -e 
    30 05 * * * /data/scripts/delete_mysql_binlog.sh >/dev/null 2>&1
    
    

    修复MySQL主从同步

    #!/bin/sh
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
      
    LOGFILE=/data/repair_mysql_sync_`date +%F`.log
    SQLCMD1="show slave status"
      
    ## 查看MySQL是否已启动
    if [[ `ps aux | grep mysqld | grep -v grep`"X" = "X" ]]; then
      echo The MySQL is not running at: `date +%F" "%H-%M-%S` >> ${LOGFILE}
      exit 1
    fi
      
    ## 获得MySQL从端Relay binlog的路径
    retval=`grep "^relay-log" /etc/my.cnf | grep -v relay-log- | grep '/'`
    if [[ "${retval}" = "X" ]]; then
      RELAY_BINLOG_PATH=`ps aux | grep -w mysqld | grep -v grep | awk '{print $13}' | awk -F '=' '{print $2}'`
    else
      RELAY_BINLOG_PATH=`dirname $(echo ${retval} | awk -F '=' '{print $2}')`
    fi
      
    ## 查找master.info文件,用于定位Binlog信息
    MASTER_FILE=`ps aux | grep -w mysqld | grep -v grep | awk '{print $13}' | awk -F '=' '{print $2}'`/master.info
    if [[ ! -e ${MASTER_FILE} ]]; then
      echo This Server is not MySQL Slave at: `date +%F" "%H-%M-%S` >> ${LOGFILE}
      exit 1
    fi
      
    ## 获得当前的同步状态
    IO_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk '$1=="Slave_IO_Running:" {print $2}'`
    SQL_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk '$1=="Slave_SQL_Running:" {print $2}'`
    if [[ "${IO_STATUS}" = "Yes" && "${SQL_STATUS}" = "Yes" ]]; then
      echo Now, The MySQL Replication is synchronous at: `date +%F" "%H-%M-%S` >> ${LOGFILE}
      exit 0
    fi
      
    ## 从master.info文件中,获得MySQL主端的同步信息
    REPLI_INFO=`sed '/^$/d' ${MASTER_FILE} | tail +2 | head -5`
    REPLI_BINLOG_FILE=`echo ${REPLI_INFO} | awk '{print $1}'`
    REPLI_IPADDR=`echo ${REPLI_INFO} | awk '{print $3}'`
    REPLI_USER=`echo ${REPLI_INFO} | awk '{print $4}'`
    REPLI_PWD=`echo ${REPLI_INFO} | awk '{print $5}'`
      
    ## 删除无用的Relay binlog
    rm -rf ${RELAY_BINLOG_PATH}/*-relay-bin.*
      
    ## 直接从0位置开始同步
    SQLCMD2="change master to master_host='${REPLI_IPADDR}', master_user='${REPLI_USER}', master_password='${REPLI_PWD}',"
    SQLCMD2="${SQLCMD2} master_log_file='${REPLI_BINLOG_FILE}', master_log_pos=0"
    mysql -uroot -e "stop slave;"
    mysql -uroot -e "${SQLCMD2};"
    mysql -uroot -e "start slave;"
      
    ## 如果同步的过程中,出现重复记录导致同步失败,就跳过
    while true
    do
      sleep 2
      IO_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk '$1=="Slave_IO_Running:" {print $2}'`
      SQL_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk '$1=="Slave_SQL_Running:" {print $2}'`
      BEHIND_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk '$1=="Seconds_Behind_Master:" {print $2}'`
      SLAVE_BINLOG1=`mysql -uroot -e "${SQLCMD1}\G;" | awk '$1=="Master_Log_File:" {print $2}'`
      SLAVE_BINLOG2=`mysql -uroot -e "${SQLCMD1}\G;" | awk '$1=="Relay_Master_Log_File:" {print $2}'`
        
      ## 出现错误,就将错误信息记录到日志文件,并跳过错误继续同步
      if [[ "${IO_STATUS}" != "Yes" || "${SQL_STATUS}" != "Yes" ]]; then
        ERRORINFO=`mysql -uroot -e "${SQLCMD1}\G;" | awk -F ': ' '$1=="Last_Error" {print $2}'`
        echo "The MySQL synchronous error information: ${ERRORINFO}" >> ${LOGFILE}
        mysql -uroot -e "stop slave;"
        mysql -uroot -e "set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;"
        mysql -uroot -e "start slave;"
          
      ## 已完成同步,就正常退出
      elif [[ "${IO_STATUS}" = "Yes" && "${SQL_STATUS}" = "Yes" && "${SLAVE_BINLOG1}" = "${SLAVE_BINLOG2}" && ${BEHIND_STATUS} -eq 0 ]]; then
        echo The MySQL synchronous is ok at: `date +%F" "%H-%M-%S` >> ${LOGFILE}
        break
      fi
    done
    

    上一篇:深度学习之TensorFlow:入门、原理与进阶实战  下一篇:深度探索区块链:Hyperledger技术与应用

    展开 +

    收起 -

    Linux相关电子书
    学习笔记
    网友NO.803454

    Linux下Mysql5.7.19卸载方法

    1、查找以前是否装有mysql 命令: rpm -qa|grep -i mysql 可以看到mysql的两个包: mysql-*..*.RHEL**mysqlclient*.RHEL** 2、删除mysql 删除命令: rpm -e --nodeps 包名 ( rpm -ev mysql-*.RHEL* ) 3、删除老版本mysql的开发头文件和库 命令: rm -fr /usr/lib/mysqlrm -fr /usr/include/mysql 注意:卸载后 /var/lib/mysql 中的数据及 /etc/my.cnf 不会删除,如果确定没用后就手工删除 rm -f /etc/my.cnf rm -fr /var/lib/mysql 总结 以上所述是小编给大家介绍的Linux下Mysql5.7.19卸载方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对码农之家网站的支持! ……

    网友NO.274600

    Linux下python3.6.1环境配置教程

    linux系统环境自带python2.6,但有时我们项目使用的版本可能是3.x以上等等,此时我们需要在linux中再安装项目所需的python版本,此时就涉及多版本共存问题了,很多同学在安装多个版本Python时会遇到各种问题,本篇文章针对python多版本共存做了详细安装说明。 1.下载python安装包 打开https://www.python.org/downloads/,选择downloadsAll releases 这里我选择安装python3.6.1 选择源码安装,下载源码通过xshell拷贝到linux系统中, 在linux中,我们先进入到/opt目录中,该目录目录用来安装附加软件包 接下来,启动xshell的文件传输命令,然后将下载的源码包拖进来就行了 出现如下表示上传成功 2.解压和安装python软件包 第一步: 安装python所需的依赖包 执行命令: yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make 第二步: 解压python源码包 执行命令: tar -xzvf Python-3.6.1.tgz -C /usr/local/src/ #src一般用来存放源码目录 进入到/usr/local/src/目录中 cd /usr/local/src/ #目录下的python-3.6.1就是解压后的源码包目录 进入源码包目录: cd /usr/local/src/Python-3.6.1 配置python安装路径,记住,安装完成之后,在python3目录下有一个bin目录,/usr/local/python3/bin这个路径为将要添加的python安装的python环境变量 ./configure --prefix=/usr/local/python3 #这里我选择将p……

    网友NO.741793

    MySQL在Linux系统中隐藏命令行中的密码的方法

    在命令行中输入命令并不是一个好主意,会造成安全问题。但是如果你决定去写一个应用,而这个应用需要在命令行中使用密码或者其他敏感信息。那么,你能通过以下方法禁止系统的其他用户轻易的看到这些敏感数据 呢?,类似MySQL在ps命令下隐藏密码。 假设我这里系统里两个用户,一个是root ,一个是dabu 。测试系统为centos 6.5在按照下面的步骤做: [root@dabu.info ~]#su dabu #切换到dabu这个账号[dabu@dabu.info ~]$cd ~ #切换到dabu的home目录[dabu@dabu.info ~]$ touch pwhide.c #创建 pwhide.c文件[dabu@dabu.info ~]$ls 显示: 复制代码 代码如下: pwhide.c 将下面的代码保存到 pwhide.c : #include stdio.h#include unistd.h /* unix类系统定义符号常量的头文件*/#include string.h /* 字符数组的函数定义的头文件*/#include sys/types.h /* Unix/Linux系统的基本系统数据类型的头文件*/int main(int argc, char *argv[]) /*形参argc指命令行中参数的个数(包括执行文件本身)。形参argv是一个纸箱字符串的指针数组*/{int i = 0;pid_t mypid = getpid(); /*获得该程序运行时候的pid*/if (argc == 1) /*如果argc参数个数等于1,按要求,应该argc要为2才行*/return 1; /*异常退出*/printf("argc = %d and arguments are:\n", argc); /*打印argc参数个数*/for (i ; i argc ; i++) /*打印i序号,以及对应的argv数组指针元素*/printf("%d = %s\n" ,i, argv[i]); /*打印i序号……

    网友NO.42295
    网友NO.42295

    exit
    命令用于退出当前shell,在shell脚本中可以终止当前脚本执行。
    SHELL中的exit 0 和 exit 1有什么区别?
    当你 exit 0 的时候,在调用环境 echo $? 就返回0,也就是说调用环境就认为你的这个程序执行正确。
    当你 exit 1 的时候,一般是出错定义这个1,也可以是其他数字,很多系统程序这个错误编号是有约定的含义的。 但不为0 就表示程序运行出错。 调用环境就可以根据这个返回值判断 你这个程序运行是否ok。
    如果你用 脚本 a 调用 脚本b ,要在a中判断b是否正常返回,就是根据 exit 0 or 1 来识别。
    执行完b后, 判断 $? 就是返回值

    网友NO.24396
    网友NO.24396

    shell 编程:
    shell 开头必须指定bash:#!/bin/bash
    shell 的执行方式:
    1. ./1.sh 执行当前目录下的1.sh,1.sh要是可执行文件
    2. bash /usr/local/1.sh
    定义变量 aa=’qqq’ =两侧不能有空格,使用变量 ${aa}
    Shell特殊含义变量
    $$ 取当前脚本的进程id,就是pid
    $0 取当前文件名
    $n n是大于0的数字,n是几就是第几个参数
    $# 取参数的个数
    $* 取所有参数
    $? 取最有命令的退出状态,0为没错误

    Copyright 2018-2019 xz577.com 码农之家

    版权责任说明