linux学习笔记013

while, until, for

 

break: 提前退出循环

continue:提前结束本轮循环,而进入下一轮循环;

 

 

1000, SUM>5000

 

while的特殊用法一:

while :;do

 

done

 

while的特殊用法二:

while read LINE; do

 

done < /PATH/TO/SOMEFILE

 

/etc/passwd

写一个脚本,完成如下功能:

说明:此脚本能够为指定网卡创建别名,则指定地址;使用格式如:mkethalias.sh -v|--verbose -i ethX

1、-i选项用于指定网卡;指定完成后,要判断其是否存在,如果不存在,就退出;

2、如果用户指定的网卡存在,则让用户为其指定一个别名,此别名可以为空;如果不空,请确保其事先不存在,否则,要报错,并让用户重新输入;

3、在用户输入了一个正确的别名后,请用户输入地址和掩码;并将其配置在指定的别名上;

4、如果用户使用了-v选项,则在配置完成后,显示其配置结果信息;否则,将不显示;

 

RPM安装:

         二进制格式:

         源程序-->编译-->二进制格式

                   有些特性是编译选定的,如果编译未选定此特性,将无法使用;

                   rpm包的版本会落后于源码包,甚至落后很多;bind-9.8.7, bind-9.7.2

                  

定制:手动编译安装

 

编译环境,开发环境

开发库,开发工具

 

Linux: C,

GNU: C

 

C,C++:

gcc: GNU C Complier, C

g++:

 

make: 项目管理工具,

         makefile:定义了make(gcc,g++)按何种次序去编译这些源程序文件中的源程序

 

automake, --> makefile.in -->makefile

autoconf, --> configure

 

 

 

100个可选择特性,

 

make install

 

 

编译安装的三步骤:

前提:准备开发环境(编译环境)

安装"Development Tools"和"DevelopmentLibraries"

 

# tar

# cd

# ./configure 

         --help

         --prefix=/path/to/somewhere

         --sysconfdir=/PATH/TO/CONFFILE_PATH

         功能:1、让用户选定编译特性;2、检查编译环境;

# make

# make install

 

# tar xf tengine-1.4.2.tar.gz

# cd tegnine-1.4.2

# ./configure --prefix=/usr/local/tengine--conf-path=/etc/tengine/tengine.conf

# make

# make install

# /usr/local/tengine/sbin/nginx

 

1、修改PATH环境变量,以能够识别此程序的二进制文件路径;

         修改/etc/profile文件

         在/etc/profile.d/目录建立一个以.sh为名称后缀的文件,在里面定义export PATH=$PATH:/path/to/somewhere

2、默认情况下,系统搜索库文件的路径/lib,/usr/lib; 要增添额外搜寻路径:

         在/etc/ld.so.conf.d/中创建以.conf为后缀名的文件,而后把要增添的路径直接写至此文件中;

         #ldconfig 通知系统重新搜寻库文件

                   -v:显示重新搜寻库的过程

3、头文件:输出给系统

         默认:/usr/include

         增添头文件搜寻路径,使用链接进行:

                   /usr/local/tengine/include/   /usr/include/

                   两种方式:

                   ln-s /usr/local/tengine/include/* /usr/include/ 或

                   ln-s /usr/local/tengine/include /usr/include/tengine

4、man文件路径:安装在--prefix指定的目录下的man目录;/usr/share/man   

                   1、man -M/PATH/TO/MAN_DIR COMMAND

                   2、在/etc/man.config中添加一条MANPATH

                  

 

                  

netstat命令:

         -r:显示路由表

         -n:以数字方式显示

        

         -t:建立的tcp连接

         -u:显示udp连接

         -l:显示监听状态的连接

         -p:显示监听指定的套接字的进程的进程号及进程名

 

#!/bin/bash

#

REPOPFILE=/etc/yum.repos.d/$1

 

if [ -e $REPOPFILE ]; then

         echo"$1 exitsts."

         exit3

fi

read -p "REPOPFILE ID" REOPID

util [ $REOPID== "quit" ]; do

         echo""

 

        

 

循环控制:

break

中断循环,而后执行循环后面的语句;

 

continue

中断当前这一次循环,提前进入下一软循环

 

 

 

 

写一个脚本,完成以下功能:

1、提示用户输入一个用户名;

2、显示一个菜单给用户,形如:

U|u show UID

G|g show GID

S|s show SHELL

Q|q quit

3、提醒用户选择一个选项,并显示其所选择的内容;

 

如果用户给的是一个非上述所提示的选项,则提醒用户给出的选项错误,并请其重新选择后执行;

 

 

写一个脚本:

1、判断一个指定的bash脚本是否有语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出,其它任何键可以通过vim打开这个指定的脚本;

2、如果用户通过vim打开编辑后保存退出时仍然有错误,则重复第1步中的内容;否则,就正常关闭退出。

 

./syntax.sh a.sh

 

until bash -n $1 &> /dev/null; do

         read-p "Syntax error, [Qq] to quit, others for editing: "  CHOICE

         case$CHOICE in

         q|Q)

             echo "Something wrong, quiting."

             exit 5

             ;;

         *)

                   vim+ $1

                   ;;

         esac

done

 

echo "0K"

 

 

 

 

函数:功能, function

 

代码重用:

 

库:so

 

 

脚本编程之函数:

 

function: 功能

 

结构化编程,不能独立运行,需要调用时执行,可以被多次调用

 

定义一个函数:

function FUNCNAME {

 command

}

 

FUNCNAME() {

 command

}

 

 

自定义执行状态返回值:

return #

0-255

 

接受参数的函数:

./a.sh m n

$1: m

$2: n

 

 

TWOINT 5 6

$1: 5

$2: 6

 

练习:写一个脚本,判定192.168.0.200-192.168.0.254之间的主机哪些在线。要求:

1、使用函数来实现一台主机的判定过程;

2、在主程序中来调用此函数判定指定范围内的所有主机的在线情况。

 

#!/bin/bash

#

PING() {

  forI in {200..254};do

   if ping -c 1 -W 1 192.168.0.$I &> /dev/null; then

     echo "192.168.0.$I is up."

   else

     echo "192.168.0.$I is down."

   fi

  done

}

 

PING

 

 

 

 

#!/bin/bash

#

PING() {

   if ping -c 1 -W 1 $1 &> /dev/null; then

     echo "$1 is up."

   else

     echo "$1 is down."

   fi

}

 

for I in {200..254}; do

 PING 192.168.0.$I

done

 

 

#!/bin/bash

#

PING() {

   if ping -c 1 -W 1 $1 &> /dev/null; then

     return 0

   else

     return 1

   fi

}

 

for I in {200..254}; do

 PING 192.168.0.$I

  if[ $? -eq 0 ]; then

   echo "192.168.0.$I is up."

 else

   echo "192.168.0.$I is down."

  fi

done

 

 

写一个脚本:使用函数完成

1、函数能够接受一个参数,参数为用户名;

   判断一个用户是否存在

   如果存在,就返回此用户的shell和UID;并返回正常状态值;

   如果不存在,就说此用户不存在;并返回错误状态值;

2、在主程序中调用函数;

 

扩展1:在主程序中,让用户自己输入用户名后,传递给函数来进行判断;

扩展2:在主程序中,输入用户名判断后不退出脚本,而是提示用户继续输入下一个用户名;如果用户输入的用户不存在,请用户重新输入;但如果用户输入的是q或Q就退出;

 

#!/bin/bash

#

user () {

if id $1 &> /dev/null ;then

echo "`grep ^$1  /etc/passwd | cut -d: -f3,7`"

  return 0

else

  echo "no $1"

   return 1

fi

}

read -p "please input username:"username

until [ $username == q -o $username == Q ];do

         user$username

         if[ $? == 0 ];then

                   read-p "please input again:" username

         else

                   read-p "no $username,please input again:" username

         fi

done

 

 

 

 

  

 

 

函数也可以接受参数, 即可以向函数传递参数

 

 

函数接受一个用户名参数,显示此用户的shell和UID;

 

 

写一个函数:接受一命令参数ls

 

/bin/ls, /mnt/sysroot/bin/ls

 

/sbin/ifconfig, /mnt/sysroot/sbin/ifconfig

 

 

 

 

 

 

 

 

 

 

 

进程及作业管理

 

Uninterruptible sleep: 不可中断的睡眠

Interruptible sleep:可中断睡眠

 

 

 

kernel:

init:

 

COW: Copy On Write, 写时复制

 

 

 

100-139:用户可控制

0-99:内核调整的

 

O:

         O(1)

         O(n)

         O(logn)

         O(n^2)

         O(2^n)

        

init: 进程号为1

 

ps: Process State

         SysV风格:-

         BSD风格:

        

         a:所有与终端有关的进程

         u:详细信息

         x:所有与终端无关的进程

        

进程的分类:

         跟终端相关的进程

         跟终端无关的进程

 

进程状态:

         D:不可中断的睡眠

         R:运行或就绪

         S:可中断的睡眠

         T:停止

         Z:僵死

        

         <:高优先级进程

         N: 低优先级进程

         +:前台进程组中的进程

         l:多线程进程

         s:会话进程首进程

 

ps    

         -elF

         -ef

         -eF

 

ps -o PROPERTY1,PROPERTY2

 

ps -o pid,comm,ni

 

        

        

pstree: 显示当前系统上的进程树

 

pgrep:

pidof: 根据程序名称,查找其相关进程的ID号;

top:

 

 

 

vmstat

free

kill

pkill

bg

fg

 

 

 

<:高优先级的进程

N:低优先级的进程

l: 多线程进程

+:前台进程组中的进程

s: 会话进程的领导者

 

 

top:

         M:根据驻留内存大小进行排序

         P:根据CPU使用百分比进行排序

         T:根据累计时间进行排序

        

         l:是否显示平均负载和启动时间

         t:是否显示进程和CPU状态相关信息

         m:是否显示内存相关信息

        

         c:是否显示完整的命令行信息

         q:退出top

         k:终止某个进程

 

top

         -d:指定延迟时长,单位是秒

         -b:批模式

         -n#:在批模式下,共显示多少批

        

进程间通信(IPC: Inter Process Communication)

         共享内存

         信号: Signal

         Semaphore

        

重要的信号:

1:SIGHUP: 让一个进程不用重启,就可以重读其配置文件,并让新的配置信息生效;

2: SIGINT:Ctrl+c: 中断一个进程

9: SIGKILL:杀死一个进程

15: SIGTERM:终止一个进程, 默认信号 可以释放资源

        

指定一个信号:

         信号号码:kill -1

         信号名称:kill-SIGKILL

         信号名称简写:kill-KILL

 

kill PID

killall COMMAND

 

 

调整nice值:

调整已经启动的进程的nice值:

renice NI PID

 

在启动时指定nice值:

nice -n NI COMMAND

 

 

 

前台作业:占据了命令提示符

后台作业:启动之后,释放命令提示符,后续的操作在后台完成

 

前台-->后台:

         Ctrl+z:把正在前台的作业送往后台

         COMMAND&:让命令在后台执行

        

bg: 让后台的停止作业继续运行

         bg[[%]JOBID]

 

jobs: 查看后台的所有作业

         作业号,不同于进程号

                   +:命令将默认操作的作业

                   -:命令将第二个默认操作的作业

                  

fg: 将后台的作业调回前台

         fg[[%]JOBID]

        

kill %JOBID: 终止某作业

 

 

 

vmstat:系统状态查看命令

uptime:

 

/proc/meminfo

 

 

 

./configure:

         检查编译环境:编译工具、库、头文件

         设定编译安装选项

         结果:结果Makefile.in生成makefile

make

make install

你可能感兴趣的:(linux,计算机,磁盘)