zoukankan      html  css  js  c++  java
  • Shell脚本学习笔记-系统管理

    Shell脚本学习笔记-系统管理

    分类: Unix/Linux 275人阅读 评论(0) 收藏 举报

    Solaris系统上Shell脚本学习。

    文件系统
    /sbin主要放置一些系统管理的必备程序,例如fdisk,ifconfig,mount等
    /usr/sbin主要存放一些并非必备的系统管理工具。例如df,host,ping,swap,tar等。
    /bin主要放置一些用户必备程序。
    /usr/bin主要存放一些并非必备的用户程序。
        很多程序都在/bin和/usr/bin下面存放了2份拷贝,例如bash,cd,cat,cp,df,du,mv等。
    /usr/sfw/bin/: sfw是sunfreeware的缩写,这个目录下有很多有用的工具,例如gcc,g++,mysql,snmpwalk等。
        sfw下的程序列表在http://sunfreeware.com/网站上有着详细的说明。
        另外一个网站也能下载很多free applications -> http://unixpackages.com/.
     
    /usr/lib:包含库文件。
    /usr/include:头文件。
    /usr/X11R6:X Window系统目录。
    /usr/share/doc和/usr/share/man 应用程序的文档和手册。

    /etc/passwd: password文件
    /etc/motd: message of today,每次用户成功登录后,其中的内容会显示在控制台。
    /etc/issue: 远程登录时,文件的内容显示在login提示符之前。
    /etc/release: 系统release信息
    /etc/syslog.conf: /usr/sbin/syslogd进程利用本配置文件来定义记录syslog的行为

    /etc/init.d和/etc/rc*.d
    1) 每个运行级别被运行控制脚本控制,称作/sbin/rc#,#是运行级别0-6中的一个或是s或S。
    这些脚本可以认为是元脚本,他们的主要作用是运行其他脚本。/etc/rc#是这些脚本的一个软链接.
    2) /sbin/rc#运行的脚本是服务控制脚本,这些服务控制脚本可以在目录/etc/rc#.d下找到。
    /etc/init.d目录这些服务控制脚本的真正位置,硬链接到/etc/rc#.d目录并被命名为K##service或S##sevice。
    启动的脚本用S打头,终止的用K打头,相当于运行/etc/init.d/service start和/etc/init.d/service stop.
    ##是数字,表示运行顺序.
    要运行某一运行级别,就是说用/sbin/rc#运行与之级别相对应的/etc/rc#.d下的脚本时,
    kill脚本先运行,再运行start脚本。lowest-numbered 脚本首先运行。例如:S20foo 在S30bar之前运行。
    例如,
    $find *.d -name "*apache*" -ls
    10157    3 -rwxr--r--   6 root     sys          2452 Apr 15  2011 init.d/apache
    10157    3 -rwxr--r--   6 root     sys          2452 Apr 15  2011 rc0.d/K16apache
    10157    3 -rwxr--r--   6 root     sys          2452 Apr 15  2011 rc1.d/K16apache
    10157    3 -rwxr--r--   6 root     sys          2452 Apr 15  2011 rc2.d/K16apache
    10157    3 -rwxr--r--   6 root     sys          2452 Apr 15  2011 rc3.d/S50apache
    10157    3 -rwxr--r--   6 root     sys          2452 Apr 15  2011 rcS.d/K16apache
    可以看到这些文件的inode是相同的,是硬链接.
    3) A服务的运行如果需要B服务的支持,A一定要等B先开始运行,所以要命名为:
    S18B,S19A
    关闭的时候,要先关A,所以要命名为:
    K18A,K19B

    /var: 此目录下存放使用过程中可更改的数据
    /var/run/:用以跟踪系统从启动以来使用的所有进程,并让您在更改系统运行级别的时候能够操纵它们。
    /var/tmp/:与/tmp相比,/tmp目录开机就会清除,一般映射到swap里面(可用df /tmp查看); /var/tmp则不会被清除
    /var/spool/:此目录包含系统中等待处理的工作文件
    /var/adm/sulog: 跟踪su使用记录
    /var/log/:此目录包含系统的日志文件,由/etc/syslog.conf配置
    /var/adm/messages*: 系统日志文件,由/etc/syslog.conf配置

    /dev/console: 系统控制台,
    /dev/pts/n: 远程登陆(telnet,ssh等)后创建的控制终端。
    /dev/tty: 当前会话的控制终端(=某一个/dev/pts/n或者/dev/console)
        可以使用tty命令查看当前的控制终端。
        修改/etc/default/login, 添加CONSOLE=/dev/console, 禁止root帐户远程登陆。
    /dev/null和/dev/zero
        把/dev/null 看作"黑洞" . 它非常等价于一个只写文件.
            所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.
        /dev /zero也是一个伪文件. 它实际上产生连续不断的二进制的零流.
            写入它的输出会丢失不见, 而从/dev/zero 读出一连串的null也比较困难,
            主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件.
        所以可以执行cat /dev/null>out, 因为null是没有,所以就清空out文件,
        但是如果执行cat /dev/zero > out 的话,很快分区就out文件填满了.
        产生1个1M的空文件:dd if=/dev/zero of=out count=1024 bs=1024
    /dev/random和/dev/urandom 伪随机设备,提供2进制随机字节流.
        /dev/random提供更高品质随机数,但是也更慢.可以用下面的命令比较一下花费的时间
            time dd if=/dev/random of=random.file count=10 bs=1024
            time dd if=/dev/urandom of=urandom.file count=10 bs=1024


    系统管理
    $shutdown -g10 -y -i state: 关机。-g 等待时间,默认60s; -y 不需要确认; -i 指定系统运行状态,默认为s
       1 administrative state.
       s, S  single-user state.  All  user processes are stopped on transitions to this state.
       5  Shut the machine down so that it is safe  to remove  the  power.  Have the machine remove power, if possible.
       6  Stop the operating system and reboot to  the  state  defined  by  the init default entry in /etc/inittab.
    $init [1~6]: 5 关机; 6 重启
       2: multi-user mode; 3: extend multi-user mode by making local resources available over network.
    $isainfo:识别系统架构信息;-b :32位or64位系统; -v verbose output
    $psrinfo:处理器信息
    $prtdiag: print system diagnostic information. -v verbose mode
    $uname -a:显示系统信息
    $showrev: 打印系统软硬件版本信息; -a 输出window系统和patch的版本; -p patch的版本
    $df -h: 察看磁盘使用状况
    $du -sh *: 察看文件/目录大小 s:summary, h:human  readable  format
    $ifconfig
         $ifconfig -a:查看网络配置,interface name,IP address, MAC address等
         $ifconfig <interface name> dhcp drop|start:启动或者禁止DHCP。
         $ifconfig <interface name> ether <mac address(x:y:z:...)>:设置网卡MAC地址。
         $ifconfig <interface name> up/down:启用/禁用网卡
    Mount ISO文件:
        # lofiadm -a /path/sol_10.iso /dev/lofi/1 
        # lofiadm
        # mkdir /sol10
        # mount -F hsfs -o ro /dev/lofi/1 /sol10
        # df -h /sol10
        # umount /sol10
        # lofiadm -d /dev/lofi/1
        # lofiadm
       

    $svcs:报告Service状态
    $svcadm:管理Service
    $useradd -m -d <dir> <login>:创建用户(-m 创建folder; dir例 /export/home/tony)
    $userdel -r <login>:删除用户(-r 同时删除用户folder)
    $passwd [<login>]:修改密码;-h修改用户目录;-e修改login shell; 可查看/etc/passwd文件

    $env:显示环境变量
    $type/which <command>:显示命令路径
    $pwd: 显示工作目录
    $id: 用户id,所属group的id
    $su [- <login>] :切换用户
    $who :登录的用户列表, -r 显示系统运行级别; finger,比who信息更详细;rusers [host]: 显示网络中所有登陆用户;
    $write <login> [terminal]: 发送消息给某个用户,输入消息后ctrl+d结束。
    $wall: write all 发送给登陆到本机的所有用户; rwall: 发送到局域网上的所有用户, rwall -n netgroup, rwall -h host
     
    crontab
    crontab file 安装一个新的crontab文件(覆盖原来的设定)
    -l [username] 查看用户的crontab文件
    -e [username] 编辑用户的crontab文件,使用EDITOR环境变量指定的编辑器,例如
        export EDITOR=vi; crontab -e
    -r [username] 删除用户的crontab文件,只有root用户才可以删除其它用户的crontab文件
        只有root用户才可以查看/删除/编辑其它用户的crontab文件;
    crontab文件位于/var/spool/cron/crontabs目录下,每个用户有自己的文件;
    /etc/cron.d目录下面的cron.allow和cron.deny文件可以控制那些用户可以使用crontab:
        如果cron.allow存在,只有其中列出的用户才能使用该命令;
        如果cron.allow不存在但cron.deny文件存在,只有未列在该文件中的用户才能使用该命令;
    crontab文件的格式
        mm hh dd mon weekday command
        weekday的表示0-6 0表示周日;
        "*"表示所有取值;"-"表示范围;","隔开来指定多个取值;
        command字段的第一行作为命令,其它行作为命令的输入.%解释为换行,所以如果需要使用%要加转义符;
        cron从$HOME启动command,提供以下的环境变量SHELL HOME LOGNAME TZ PATH,
            SHELL设置为/bin/sh;PATH设置为/usr/bin(root用户为/usr/bin:/usr/sbin)
           所以要么在command中设置完整路径,要么显式指定PATH变量;
        例如: 6-10 20,22 * * 0 $HOME/test.sh >> $HOME/logs/cron.log
     
    at time < commandfile 延迟到指定时间运行命令文件.
        atq列出队列里的所有任务; atrm删除队列里的任务;
        /var/spool/cron/atjobs目录下保存当前未完成的任务;
        /etc/cron.d目录下面的at.allow和at.deny文件可以控制那些用户可以使用at:

    邮件
    列出本地邮箱(/var/mail/$USER)中的消息:
    mailx
    读取文件内容作为邮件正文发送:
    mailx -s "hello" tony@hotmail.com < filename
    把srcfile作为附件(附件名pathname)发送:
    uencode srcfile pathname | mailx -s "hello" tony@hotmail.com
    同时发送正文(内容在文件filename中)和附件srcfile(附件名pathname)
    uuencode srcfile pathname > mailatt.tmp
    cat filename mailatt.tmp > mail.tmp
    mailx -s "hello" tony@hotmail.com < mail.tmp

  • 相关阅读:
    mysql小结
    微信小程序中使用iconfont图标
    微信小程序添加底部自定义导航栏(tabBar)
    微信小程序实现简单计算器
    使用koa2做一个简单的图片上传web
    Promise 对象
    css常用的布局属性
    微信小程序知识点总结(持续更新中)
    Cannot read property 'data' of undefined;at api showModal success callback function
    Asp.net Core WebApi使用Swagger
  • 原文地址:https://www.cnblogs.com/weixun/p/3262021.html
Copyright © 2011-2022 走看看