zoukankan      html  css  js  c++  java
  • shell学习笔记--自我总结

    一、文件

    touch file              # 创建空白文件
    rm -rf 目录名           # 不提示删除非空目录(-r:递归删除 -f强制)
    dos2unix                # windows文本转linux文本  
    unix2dos                # linux文本转windows文本
    enca filename           # 查看编码  安装 yum install -y enca 
    md5sum                  # 查看md5值
    
    ln 源文件 目标文件      	# 硬链接
    ln -s 源文件 目标文件   	# 符号连接
    readlink -f /data       # 查看连接真实目录
    cat file | nl |less     # 查看上下翻页且显示行号  q退出
    
    head                    # 查看文件开头内容
    head -c 10m             # 截取文件中10m内容
    split -c 10m            # 将文件切割大小为10m
    tail -f file            # 查看结尾 监视日志文件
    file                    # 检查文件类型
    umask                   # 更改默认权限
    
    uniq                    # 删除重复的行
    uniq -c                 # 重复的行出现次数
    uniq -u                 # 只显示不重复行
    
    paste a b               # 将两个文件合并用tab键分隔开
    paste -d'+' a b         # 将两个文件合并指定'+'符号隔开
    paste -s a              # 将多行数据合并到一行用tab键隔开
    chattr +i /etc/passwd   # 设置不可改变位
    more                    # 向下分面器
    locate 字符串           	# 搜索
    
    wc -l file              # 查看行数
    cp filename{,.bak}      # 快速备份一个文件
    cp a b                 # 拷贝不提示 既不使用别名 cp -i
    rev                     # 将行中的字符逆序排列
    comm -12 2 3            # 行和行比较匹配
    iconv -f gbk -t utf8 原.txt > 新.txt    	# 转换编码
    rename 原模式 目标模式 文件             	#重命名,可正则
    watch -d -n 1 'df; ls -flat /path'      # 实时某个目录下查看最新改动过的文件
    cp -v  /dev/dvd  /rhel4.6.Iphone 苹果 ios 9660       # 制作镜像
    diff suzu.c suzu2.c  > sz.patch         # 制作补丁
    patch suzu.c < sz.patch                 # 安装补丁
    

    sort

    	-t  # 指定排序时所用的栏位分隔字符
        -n  # 依照数值的大小排序
        -r  # 以相反的顺序来排序
        -f  # 排序时,将小写字母视为大写字母
        -d  # 排序时,处理英文字母、数字及空格字符外,忽略其他的字符
        -c  # 检查文件是否已经按照顺序排序
        -b  # 忽略每行前面开始处的空格字符
        -m  # 前面3个字母依照月份的缩写进行排序
        -k  # 指定域
        -m  # 将几个排序好的文件进行合并
        +<起始栏位>-<结束栏位>   # 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
        -o  # 将排序后的结果存入指定的文
        n   # 表示进行排序
        r   # 表示逆序
    
    
        sort -n               # 按数字排序
        sort -nr              # 按数字倒叙
        sort -u               # 过滤重复行
        sort -m a.txt c.txt   # 将两个文件内容整合到一起
        sort -n -t' ' -k 2 -k 3 a.txt     # 第二域相同,将从第三域进行升降处理
        sort -n -t':' -k 3r a.txt         # 以:为分割域的第三域进行倒叙排列
        sort -k 1.3 a.txt                 # 从第三个字母起进行排序
        sort -t" " -k 2n -u  a.txt        # 以第二域进行排序,如果遇到重复的,就删除
    

    find

    	# linux文件无创建时间
        # access 使用时间  
        # modify 内容修改时间  
        # change 状态改变时间(权限、属主)
        # 时间默认以24小时为单位,当前时间到向前24小时为0天,向前48-72小时为2天
        # -and 且 匹配两个条件 参数可以确定时间范围 -mtime +2 -and -mtime -4
        # -or 或 匹配任意一个条件
    
        find /etc -name http         # 按文件名查找
        find . -type f               # 查找某一类型文件
        find / -perm                 # 按照文件权限查找
        find / -user                 # 按照文件属主查找
        find / -group                # 按照文件所属的组来查找文件
        find / -atime -n             # 文件使用时间在n天以内
        find / -atime +n             # 文件使用时间在n天以前
        find / -mtime -n             # 文件内容改变时间在n天以内
        find / -mtime +n             # 文件内容改变时间在n天以前
        find / -ctime +n             # 文件状态改变时间在n天前
        find / -ctime -n             # 文件状态改变时间在n天内
        find / -size +1000000c -print                           # 查找文件长度大于1m字节的文件
        find /etc -name "passwd*" -exec grep "xuesong" {} ;    # 按名字查找文件传递给-exec后命令
        find . -name 't*' -exec basename {} ;                  # 查找文件名,不取路径
        find . -type f -name "err*" -exec  rename err err {} ; # 批量改名(查找err 替换为 err {}文件
        find 路径 -name *name1* -or -name *name2*               # 查找任意一个关键字
    

    tar、gzip、gunzip

    	tar zxvpf gz.tar.gz -c    放到指定目录 包中的目录 # 解包tar.gz 不指定目录则全解压
        tar zcvpf /$path/gz.tar.gz * # 打包gz 注意*最好用相对路径
        tar zcf /$path/gz.tar.gz *   # 打包正确不提示
        tar ztvpf gz.tar.gz          # 查看gz
        tar xvf 1.tar -c 目录        # 解包tar
        tar -cvf 1.tar *             # 打包tar
        tar tvf 1.tar                # 查看tar
        tar -rvf 1.tar 文件名        # 给tar追加文件
        tar --exclude=/home/dmtsai -zcvf myfile.tar.gz /home/* /etc     
    	# 打包/home, /etc ,但排除 /home/dmtsai
    
        tar -n "2005/06/01" -zcvf home.tar.gz /home      # 在 /home 当中,比 2005/06/01 新的文件才备份
        tar -zcvfh home.tar.gz /home                     # 打包目录中包括连接目录
    
        zgrep 字符 1.gz              # 查看压缩包中文件字符行
    
        bzip2  -dv 1.tar.bz2         # 解压bzip2
        bzip2 -v 1.tar               # bzip2压缩
        bzcat                        # 查看bzip2
    
        gzip a                       # 直接压缩文件 # 压缩后源文件消失
        gunzip a.gz                  # 直接解压文件 # 解压后源文件消失
    
        gzip -dv 1.tar.gz            # 解压gzip到tar
        gzip -v 1.tar                # 压缩tar到gz
    
        unzip zip.zip                # 解压zip
        zip zip.zip *                # 压缩zip
        # rar3.6下载:  http://www.rarsoft.com/rar/rarlinux-3.6.0.tar.gz
        rar a rar.rar *.jpg          # 压缩文件为rar包
        unrar x rar.rar              # 解压rar包
    
        7z a 7z.7z *                 # 7z压缩
        7z e 7z.7z                   # 7z解压
    

    二、系统

    系统信息

    	uname -a              # 查看linux内核版本信息
        cat /proc/version     # 查看内核版本
        cat /etc/issue        # 查看系统版本
        lsb_release -a        # 查看系统版本  需安装 centos-release
        locale -a             # 列出所有语系
        hwclock               # 查看时间
        who                   # 当前在线用户
        w                     # 当前在线用户
        whoami                # 查看当前用户名
        logname               # 查看初始登陆用户名
        uptime                # 查看服务器启动时间
        sar -n dev 1 10       # 查看网卡网速流量
        dmesg                 # 显示开机信息
        lsmod                  # 查看内核模块
    

    硬件信息

    	more /proc/cpuinfo                                       # 查看cpu信息
        cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c    # 查看cpu型号和逻辑核心数
        getconf long_bit                                         # cpu运行的位数
        cat /proc/cpuinfo | grep physical | uniq -c              # 物理cpu个数
        cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l     # 结果大于0支持64位
        cat /proc/cpuinfo|grep flags                             # 查看cpu是否支持虚拟化   pae支持半虚拟化  intelvt 支持全虚拟化
        more /proc/meminfo                                       # 查看内存信息
        dmidecode                                                # 查看全面其他硬件 信息
        dmidecode | grep "product name"                          # 查看服务器型号
        dmidecode | grep -p -a5 "memorys+device" | grep size | grep -v range       # 查看内存插槽
        cat /proc/mdstat                                         # 查看软raid信息
        cat /proc/scsi/scsi                                      # 查看dell硬raid信息(ibm、hp需要官方检测工具)
        lspci                                                    # 查看其他硬件 信息
        lspci|grep raid                                          # 查看是否支持raid
        lspci -vvv |grep ethernet                                # 查看网卡型号
        lspci -vvv |grep kernel|grep driver                      # 查看驱动模块
        modinfo tg2                                              # 查看驱动版本(驱动模块)
        ethtool -i em1                                           # 查看网卡驱动版本
    

    系统命令

    wall                      # 给其它用户发消息
    whereis ls                  # 查找命令的目录
    which                       # 查看当前要执行的命令所在的路径
    clear                       # 清空整个屏幕
    reset                       # 重新初始化屏幕
    cal                         # 显示月历
    echo -n 123456 | md5sum     # md5加密
    mkpasswd                    # 随机生成密码   -l位数 -c大小 -c小写 -d数字 -s特殊字符
    netstat -anlp | grep port   # 是否打开了某个端口
    ntpdate stdtime.gov.hk      # 同步时间
    tzselect                    # 选择时区 #+8=(5 9 1 1) # (tz='asia/shanghai'; export tz)括号内写入 /etc/profile
    /sbin/hwclock -w            # 保存到其他硬件 
    /etc/shadow                 # 账户影子文件
    lang=en                     # 修改语言
    vim /etc/sysconfig/i18n     # 修改编码  lang="en_us.utf-8"
    export lc_all=c             # 强制字符集
    vi /etc/hosts               # 查询静态主机名
    alias                       # 别名
    watch uptime                # 监测命令动态刷新
    ipcs -a                     # 查看linux系统当前单个共享内存段的最大值
    lsof |grep /lib             # 查看加载库文件
    ldconfig                    # 动态链接库管理命令
    dist-upgrade                # 会改变配置文件,改变旧的依赖关系,改变系统版本 
    /boot/grub/grub.conf        # grub启动项配置
    sysctl -p                   # 修改内核参数/etc/sysctl.conf,让/etc/rc.d/rc.sysinit读取生效
    mkpasswd -l 8  -c 2 -c 2 -d 4 -s 0            # 随机生成指定类型密码
    echo 1 > /proc/sys/net/ipv4/tcp_syncookies    # 使tcp syn cookie 保护生效  # "syn attack"是一种拒绝服务的攻击方式
    

    进程

    	ps -eaf               # 查看所有进程
        kill -9 pid           # 强制终止某个pid进程
        kill -15 pid          # 安全退出 需程序内部处理信号
        cmd &                 # 命令后台运行
        nohup cmd &           # 后台运行不受shell退出影响
        ctrl+z                # 将前台放入后台(暂停)
        jobs                  # 查看后台运行程序
        bg 2                  # 启动后台暂停进程
        fg 2                  # 调回后台进程
        pstree                # 进程树
        vmstat 1 9            # 每隔一秒报告系统性能信息9次
        sar                   # 查看cpu等状态
        lsof file             # 显示打开指定文件的所有进程
        lsof -i:32768         # 查看端口的进程
        renice +1 180         # 把180号进程的优先级加1
        ps aux |grep -v user | sort -nk +4 | tail      # 显示消耗内存最多的10个运行中的进程,以内存使用量排序.cpu+3
    

    top

    前五行是系统整体的统计信息。
            第一行: 任务队列信息,同 uptime 命令的执行结果。内容如下:
                01:06:48 当前时间
                up 1:22 系统运行时间,格式为时:分
                1 user 当前登录用户数
                load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
                三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
    
            第二、三行:为进程和cpu的信息。当有多个cpu时,这些内容可能会超过两行。内容如下:
                tasks: 29 total 进程总数
                1 running 正在运行的进程数
                28 sleeping 睡眠的进程数
                0 stopped 停止的进程数
                0 zombie 僵尸进程数
                cpu(s): 0.3% us 用户空间占用cpu百分比
                1.0% sy 内核空间占用cpu百分比
                0.0% ni 用户进程空间内改变过优先级的进程占用cpu百分比
                98.7% id 空闲cpu百分比
                0.0% wa 等待输入输出的cpu时间百分比
                0.0% hi
                0.0% si
    
            第四、五行:为内存信息。内容如下:
                mem: 191272k total 物理内存总量
                173656k used 使用的物理内存总量
                17616k free 空闲内存总量
                22052k buffers 用作内核缓存的内存量
                swap: 192772k total 交换区总量
                0k used 使用的交换区总量
                192772k free 空闲交换区总量
                123988k cached 缓冲的交换区总量。
                内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
                该数值即为这些内容已存在于内存中的交换区的大小。
                相应的内存再次被换出时可,不必再对交换区写入
    

    进程信息区,各列的含义如下: # 显示各个进程的详细信息

            序号 列名    含义
            a   pid      进程id
            b   ppid     父进程id
            c   ruser    real user name
            d   uid      进程所有者的用户id
            e   user     进程所有者的用户名
            f   group    进程所有者的组名
            g   tty      启动进程的终端名。不是从终端启动的进程则显示为 ?
            h   pr       优先级
            i   ni       nice值。负值表示高优先级,正值表示低优先级
            j   p        最后使用的cpu,仅在多cpu环境下有意义
            k   %cpu     上次更新到现在的cpu时间占用百分比
            l   time     进程使用的cpu时间总计,单位秒
            m   time+    进程使用的cpu时间总计,单位1/100秒
            n   %mem     进程使用的物理内存百分比
            o   virt     进程使用的虚拟内存总量,单位kb。virt=swap+res
            p   swap     进程使用的虚拟内存中,被换出的大小,单位kb。
            q   res      进程使用的、未被换出的物理内存大小,单位kb。res=code+data
            r   code     可执行代码占用的物理内存大小,单位kb
            s   data     可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
            t   shr      共享内存大小,单位kb
            u   nflt     页面错误次数
            v   ndrt     最后一次写入到现在,被修改过的页面数。
            w   s        进程状态。
                d=不可中断的睡眠状态
                r=运行
                s=睡眠
                t=跟踪/停止
                z=僵尸进程
            x   command  命令名/命令行
            y   wchan    若该进程在睡眠,则显示睡眠中的系统函数名
            z   flags    任务标志,参考 sched.h
    

    signal

    		kill -l                    # 查看linux提供的信号
            trap "echo aaa"  2 3 15    # shell使用 trap 捕捉退出信号
    
            # 发送信号一般有两种原因:
            #   1(被动式)  内核检测到一个系统事件.例如子进程退出会像父进程发送sigchld信号.键盘按下control+c会发送sigint信号
            #   2(主动式)  通过系统调用kill来向指定进程发送信号                             
            # 进程结束信号 sigterm 和 sigkill 的区别:  sigterm 比较友好,进程能捕捉这个信号,根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。在某些情况下,假如进程正在进行作业而且不能中断,那么进程可以忽略这个sigterm信号。
            # 如果一个进程收到一个sigusr1信号,然后执行信号绑定函数,第二个sigusr2信号又来了,第一个信号没有被处理完毕的话,第二个信号就会丢弃。
    
            sighup  1          a     # 终端挂起或者控制进程终止
            sigint  2          a     # 键盘终端进程(如control+c)
            sigquit 3          c     # 键盘的退出键被按下
            sigill  4          c     # 非法指令
            sigabrt 6          c     # 由abort(3)发出的退出指令
            sigfpe  8          c     # 浮点异常
            sigkill 9          aef   # kill信号  立刻停止
            sigsegv 11         c     # 无效的内存引用
            sigpipe 13         a     # 管道破裂: 写一个没有读端口的管道
            sigalrm 14         a     # 闹钟信号 由alarm(2)发出的信号 
            sigterm 15         a     # 终止信号,可让程序安全退出 kill -15
            sigusr1 30,10,16   a     # 用户自定义信号1
            sigusr2 31,12,17   a     # 用户自定义信号2
            sigchld 20,17,18   b     # 子进程结束自动向父进程发送sigchld信号
            sigcont 19,18,25         # 进程继续(曾被停止的进程)
            sigstop 17,19,23   def   # 终止进程
            sigtstp 18,20,24   d     # 控制终端(tty)上按下停止键
            sigttin 21,21,26   d     # 后台进程企图从控制终端读
            sigttou 22,22,27   d     # 后台进程企图从控制终端写
            
            缺省处理动作一项中的字母含义如下:
                a  缺省的动作是终止进程
                b  缺省的动作是忽略此信号,将该信号丢弃,不做处理
                c  缺省的动作是终止进程并进
    
    
    
    行内核映像转储(dump core),内核映像转储是指将进程数据在内存的映像和进程在内核结构中的部分内容以一定格式转储到文件系统,并且进程退出执行,这样做的好处是为程序员提供了方便,使得他们可以得到进程当时执行时的数据值,允许他们确定转储的原因,并且可以调试他们的程序。
                d  缺省的动作是停止进程,进入停止状况以后还能重新进行下去,一般是在调试的过程中(例如ptrace系统调用)
                e  信号不能被捕获
                f  信号不能被忽略
    

    crontab

    	at 5pm + 3 days /bin/ls  # 单次定时任务 指定三天后下午5:00执行/bin/ls
    
        crontab -e               # 编辑周期任务
        #分钟  小时    天  月  星期   命令或脚本
        1,30  1-3/2    *   *   *      命令或脚本  >> file.log 2>&1
        echo "40 7 * * 2 /root/sh">>/var/spool/cron/root    # 直接将命令写入周期任务
        crontab -l                                          # 查看自动周期性任务
        crontab -r                                          # 删除自动周期性任务
        cron.deny和cron.allow                               # 禁止或允许用户使用周期任务
        service crond start|stop|rest art                    # 启动自动周期性服务
    

    日志管理

    	history                      # 历时命令默认1000条
        histtimeformat="%y-%m-%d %h:%m:%s "   # 让history命令显示具体时间
        history  -c                  # 清除记录命令
        cat $home/.bash_history      # 历史命令记录文件
        last                         # 查看登陆过的用户信息
        who /var/log/wtmp            # 查看登陆过的用户信息
        lastlog                      # 用户最后登录的时间
        lastb -a                     # 列出登录系统失败的用户相关信息
        /var/log/btmp                # 登录失败二进制日志记录文件
        tail -f /var/log/messages    # 系统日志
        tail -f /var/log/secure      # ssh日志
    

    selinux

    	sestatus -v                    # 查看selinux状态
        getenforce                     # 查看selinux模式
        setenforce 0                   # 设置selinux为宽容模式(可避免阻止一些操作)
        semanage port -l    # 查看selinux端口限制规则
        semanage port -a -t http_port_t -p tcp 8000  # 在selinux中注册端口类型
        vi /etc/selinux/config         # selinux配置文件
        selinux=enfoceing              # 关闭selinux 把其修改为  selinux=disabled
    

    iptables

    内建三个表:nat mangle 和 filter

    filter预设规则表,有input、forward 和 output 三个规则链

        vi /etc/sysconfig/iptables    # 配置文件
        input    # 进入
        forward  # 转发
        output   # 出去
        accept   # 将封包放行
        reject   # 拦阻该封包
        drop     # 丢弃封包不予处理
        -a         # 在所选择的链(input等)末添加一条或更多规则
        -d       # 删除一条
        -e       # 修改
        -p         # tcp、udp、icmp    0相当于所有all    !取反
        -p       # 设置缺省策略(与所有链都不匹配强制使用此策略)
        -s         # ip/掩码    (ip/24)    主机名、网络名和清楚的ip地址 !取反
        -j         # 目标跳转,立即决定包的命运的专用内建目标
        -i         # 进入的(网络)接口 [名称] eth0
        -o         # 输出接口[名称] 
        -m         # 模块
        --sport  # 源端口
        --dport  # 目标端口
    
     
        iptables -f                        # 将防火墙中的规则条目清除掉  # 注意: iptables -p input accept
        iptables-rest ore < 规则文件        # 导入防火墙规则
        /etc/init.d/iptables save          # 保存防火墙设置
        /etc/init.d/iptables rest art       # 重启防火墙服务
        iptables -l -n                     # 查看规则
        iptables -t nat -nl                # 查看转发
    

    iptables实例

            iptables -l input                   # 列出某规则链中的所有规则
            iptables -x allowed                 # 删除某个规则链 ,不加规则链,清除所有非内建的
            iptables -z input                   # 将封包计数器归零
            iptables -n allowed                 # 定义新的规则链
            iptables -p input drop              # 定义过滤政策
            iptables -a input -s 192.168.1.1    # 比对封包的来源ip   # ! 192.168.0.0/24  ! 反向对比
            iptables -a input -d 192.168.1.1    # 比对封包的目的地ip
            iptables -a input -i eth0           # 比对封包是从哪片网卡进入
            iptables -a forward -o eth0         # 比对封包要从哪片网卡送出 eth+表示所有的网卡
            iptables -a input -p tcp            # -p ! tcp 排除tcp以外的udp、icmp。-p all所有类型
            iptables -d input 8                 # 从某个规则链中删除一条规则
            iptables -d input --dport 80 -j drop         # 从某个规则链中删除一条规则
            iptables -r input 8 -s 192.168.0.1 -j drop   # 取代现行规则
            iptables -i input 8 --dport 80 -j accept     # 插入一条规则
            iptables -a input -i eth0 -j drop            # 其它情况不允许
            iptables -a input -p tcp -s ip -j drop       # 禁止指定ip访问
            iptables -a input -p tcp -s ip --dport port -j drop               # 禁止指定ip访问端口
            iptables -a input -s ip -p tcp --dport port -j accept             # 允许在ip访问指定端口
            iptables -a input -p tcp --dport 22 -j drop                       # 禁止使用某端口
            iptables -a input -i eth0 -p icmp -m icmp --icmp-type 8 -j drop   # 禁止icmp端口
            iptables -a input -i eth0 -p icmp -j drop                         # 禁止icmp端口
            iptables -t filter -a input -i eth0 -p tcp --syn -j drop                  # 阻止所有没有经过你系统授权的tcp连接
            iptables -a input -f -m limit --limit 100/s --limit-burst 100 -j accept   # ip包流量限制
            iptables -a input -i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type 8 -j accept  # 除192.168.62.1外,禁止其它人ping我的主机
            iptables -a input -p tcp -m tcp --dport 80 -m state --state new -m recent --update --seconds 5 --hitcount 20 --rttl --name web --rsource -j drop
    

    iptables配置实例文件

    # generated by iptables-save v1.2.11 on fri feb  9 12:10:37 2007
            *filter
            :input accept [637:58967]
            :forward drop [0:0]
            :output accept [5091:1301533]
    
            # 允许的ip或ip段访问 建议多个
            -a input -s 127.0.0.1 -p tcp -j accept
            -a input -s 192.168.0.0/255.255.0.0 -p tcp -j accept
    
            # 开放对外开放端口
            -a input -p tcp --dport 80 -j accept
    
            # 指定某端口针对ip开放
            -a input -s 192.168.10.37 -p tcp --dport 22 -j accept
    
            # 拒绝所有协议(input允许)
            -a input -p tcp -m tcp --tcp-flags fin,syn,rst,psh,urg rst -j drop
    
            # 允许已建立的或相关连的通行
            iptables -a input -m state --state established,related -j accept
            
    		# 拒绝ping
            -a input -p tcp -m tcp -j reject --reject-with icmp-port-unreachable
            commit
            # completed on fri feb  9 12:10:37 2007
    

    iptables配置实例

    		# 允许某段ip访问任何端口
            iptables -a input -s 192.168.0.3/24 -p tcp -j accept
    
            # 设定预设规则 (拒绝所有的数据包,再允许需要的,如只做其他web服务器 .还是推荐三个链都是drop)
            iptables -p input drop
            iptables -p forward drop
            iptables -p output accept
    
            # 注意: 直接设置这三条会掉线
            # 开启22端口
            iptables -a input -p tcp --dport 22 -j accept
    
            # 如果output 设置成drop的,要写上下面一条
            iptables -a output -p tcp --sport 22 -j accept 
    
            # 注:不写导致无法ssh.其他的端口一样,output设置成drop的话,也要添加一条链
            # 如果开启了其他web服务器 ,output设置成drop的话,同样也要添加一条链
            iptables -a output -p tcp --sport 80 -j accept
    
            # 做其他web服务器 ,开启80端口 ,其他同理
            iptables -a input -p tcp --dport 80 -j accept
    
            # 做邮件服务器,开启25,110端口
            iptables -a input -p tcp --dport 110 -j accept
            iptables -a input -p tcp --dport 25 -j accept
    
            # 允许icmp包通过,允许ping
            iptables -a output -p icmp -j accept (output设置成drop的话) 
            iptables -a input -p icmp -j accept  (input设置成drop的话)
    
            # 允许loopback!(不然会导致dns无法正常关闭等问题) 
            iptables -a input -i lo -p all -j accept (如果是input drop)
            iptables -a output -o lo -p all -j accept(如果是output drop)
    

    Memory

    	free -m
        #-/+ buffers/cache:       6458       1649
        #6458m为真实使用内存  1649m为真实剩余内存(剩余内存+缓存+缓冲器)
        #linux会利用所有的剩余内存作为缓存,所以要保证linux运行速度,就需要保证内存的缓存大小
    

    date

    	date -s 20091112                     # 设日期
        date -s 18:30:50                     # 设时间
        date -d "7 days ago" +%y%m%d         # 7天前日期
        date -d "5 minute ago" +%h:%m        # 5分钟前时间
        date -d "1 month ago" +%y%m%d        # 一个月前
        date +%y-%m-%d -d '20110902'         # 日期格式转换
        date +%y-%m-%d_%x                    # 日期和时间
        date +%n                             # 纳秒
        date -d "2012-08-13 14:00:23" +%s    # 换算成秒计算(1970年至今的秒数)
        date -d "@1363867952" +%y-%m-%d-%t   # 将时间戳换算成日期
        date -d "1970-01-01 utc 1363867952 seconds" +%y-%m-%d-%t  # 将时间戳换算成日期
        date -d "`awk -f. '{print $1}' /proc/uptime` second ago" +"%y-%m-%d %h:%m:%s"    # 格式化系统启动时间(多少秒前)
    

    开机启动脚本顺序

    /etc/profile
        /etc/profile.d/*.sh
        ~/bash_profile
        ~/.bashrc
        /etc/bashrc
    

    四、服务

    shell执行mysql

    mysql -u$username -p$passwd -h$dbhost -p$dbport -a -e "
    use $dbname;
    delete from data where date=('$date1');"    
    # 执行多条mysql命令
    
    mysql -uroot -p -s mysql.sock -e "
    use db;
    alter table gift add column accountid  int(11) not null;
    flush privileges;"    
    # 不登陆mysql插入字段
    

    五、网络

    rz   # 通过ssh上传小文件
    sz   # 通过ssh下载小文件
    ifconfig eth0 down                  # 禁用网卡
    ifconfig eth0 up                    # 启用网卡
    ifup eth0:0                         # 启用网卡
    mii-tool em1                        # 查看网线是否连接
    traceroute www.baidu.com            # 测试跳数
    vi /etc/resolv.conf                 # 设置dns  nameserver ip 定义dns服务器的ip地址
    nslookup www.moon.com               # 解析域名ip
    dig -x www.baidu.com                # 解析域名ip
    curl -i www.baidu.com               # 查看网页http头
    tcpdump tcp port 22                 # 抓包
    lynx                                # 文本上网
    wget -p 路径 http地址               # 下载  包名:wgetrc
    curl -d "user=xuesong&pwd=123" http://www.abc.cn/result    # 提交web页面表单 需查看表单提交地址
    rsync -avzp -e "ssh -p 22" /dir user@$ip:/dir              # 同步目录 # --delete 无差同步 删除目录下其它文件
    ifconfig eth0:0 192.168.1.221 netmask 255.255.255.0        # 增加逻辑ip地址
    mtr -r www.baidu.com                                       # 测试网络链路节点响应时间 # trace ping 结合
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all           # 禁ping
    ipcalc -m "$ip" -p "$num"                                  # 根据ip和主机最大数计算掩码
    dig +short txt hacker.wp.dg.cx                             # 通过 dns 来读取 wikipedia 的hacker词条
    host -t txt hacker.wp.dg.cx                                # 通过 dns 来读取 wikipedia 的hacker词条
    net rpc shutdown -i ip_address -u username%password         # 远程关掉一台windows机器
    wget --random-wait -r -p -e robots=off -u mozilla www.example.com    # 递归方式下载整个网站
    

    netstat

    	-a     # 显示所有连接中的socket
        -t     # 显示tcp连接
        -u     # 显示udp连接
        -n     # 显示所有已建立的有效连接
      	-anlp  # 查看链接
        –r     # 查看路由表
    

    ssh

    	ssh -p 22 user@192.168.1.209                            # 从linux ssh登录另一台linux 
        ssh -p 22 root@192.168.1.209 cmd                        # 利用ssh操作远程主机
        scp -p 22 文件 root@ip:/目录                            # 把本地文件拷贝到远程主机
        sshpass -p '密码' ssh -n root@$ip "echo hello"          # 指定密码远程操作
        ssh -o stricthostkeychecking=no $ip                     # ssh连接不提示yes
        ssh -t "su -"                                           # 指定伪终端 客户端以交互模式工作
        scp root@192.168.1.209:远程目录 本地目录                # 把远程指定文件拷贝到本地
        ssh -n -l2001:remotehost:80 user@somemachine            # 用ssh创建端口转发通道
        ssh -t host_a ssh host_b                                # 嵌套使用ssh
        ssh -t -p 22 $user@$ip /bin/su - root -c {$cmd};     # 远程su执行命令 cmd=""/sbin/ifconfig eth0""
        ssh-keygen -t rsa                                       # 生成密钥
        ssh-copy-id -i xuesong@10.10.10.133                     # 传送key
        vi $home/.ssh/authorized_keys                           # 公钥存放位置
        sshfs name@server:/path/to/folder /path/to/mount/point  # 通过ssh挂载远程主机上的文件夹
        fusermount -u /path/to/mount/point                      # 卸载ssh挂载的目录
        ssh user@host cat /path/to/remotefile | diff /path/to/localfile -                
    	# 用diff对比远程文件跟本地文件
        su - user -c "ssh user@192.168.1.1 "echo -e aa |mail -s test mail@163.com""    
    	# 切换用户登录远程发送邮件
    

    ftps上传

    ftp -i -v -n $host <<end
            user $username $password 
            cd /ftp
            mkdir data
            cd data
            mput *.tar.gz
            bye
    end
    

    nmap

    snmp

    六、存储

    df -ph                                # 查看硬盘容量
    df -t                                 # 查看磁盘分区格式
    df -i                                 # 查看inode节点   如果inode用满后无法创建文件
    du -h 目录                            # 检测目录下所有文件大小
    du -sh *                              # 显示当前目录中子目录的大小
    iostat -x                             # 查看磁盘io状态
    mount                                 # 查看分区挂载情况
    fdisk -l                              # 查看磁盘分区状态
    fdisk /dev/hda3                       # 分区 
    mkfs -t ext3  /dev/hda3               # 格式化分区
    fsck -y /dev/sda6                     # 对文件系统修复
    lsof |grep delete                     
    # 释放进程占用磁盘空间  列出进程后,查看文件是否存在,不存在则kill掉此进程
    
    tmpwatch -afv 3                       # 删除3小时内的临时文件
    cat /proc/filesystems                 # 查看当前系统支持文件系统
    mount -o remount,rw /                 # 修改只读文件系统为读写
    smartctl -h /dev/sda                  # 检测硬盘状态
    smartctl -i /dev/sda                  # 检测硬盘信息
    smartctl -a /dev/sda                  # 检测所有信息
    e2label /dev/sda5                     # 查看卷标
    e2label /dev/sda5 new-label           # 创建卷标
    ntfslabel -v /dev/sda8 new-label      # ntfs添加卷标
    tune2fs -j /dev/sda                   # ext2分区转ext3分区
    mke2fs -b 2048 /dev/sda5              # 指定索引块大小
    dumpe2fs -h /dev/sda5                 # 查看超级块的信息
    mount -t Iphone 苹果 ios 9660 /dev/dvd  /mnt       # 挂载光驱
    mount -t ntfs-3g /dev/sdc1 /media/yidong        # 挂载ntfs硬盘
    mount -t nfs 10.0.0.3:/opt/images/  /data/img   # 挂载nfs
    mount -o loop  /software/rhel4.6.Iphone 苹果 ios    /mnt/    # 挂载镜像文件
    

    新硬盘挂载

    	fdisk /dev/sdc 
        p    #  打印分区
        d     #  删除分区
        n    #  创建分区,(一块硬盘最多4个主分区,扩展占一个主分区位置。p主分区 e扩展)
        w    #  保存退出
        mkfs -t ext3 -l 卷标  /dev/sdc1        # 格式化相应分区
        mount /dev/sdc1  /mnt        # 挂载
        vi /etc/fstab               # 添加开机挂载分区
        label=/data            /data                   ext3    defaults        1 2      # 用卷标挂载
        /dev/sdb1              /data4                  ext3    defaults        1 2      # 用真实分区挂载
        /dev/sdb2              /data4                  ext3    noatime,defaults        1 2
    

    第一个数字"1"该选项被"dump"命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为0

    第二个数字"2"该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统"/"对应该字段的值应该为1,其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该字段为0

    当以 noatime 选项加载(mount)文件系统时,对文件的读取不会更新文件属性中的atime信息。设置noatime的重要性是消除了文件系统对文件的写操作,文件只是简单地被系统读取。由于写操作相对读来说要更消耗系统资源,所以这样设置可以明显提高服务器的性能.wtime信息仍然有效,任何时候文件被写,该信息仍被更新

    raid原理与区别

    	raid0至少2块硬盘.吞吐量大,性能好,同时读写,但损坏一个就完蛋
    
        raid1至少2块硬盘.相当镜像,一个存储,一个备份。安全性比较高.但是性能比0弱
    
        raid5至少3块硬盘.分别存储校验信息和数据,坏了一个根据校验信息能恢复
    
        raid6至少4块硬盘.两个独立的奇偶系统,可坏两块磁盘,写性能非常差
    

    七、用户

    users                   # 显示所有的登录用户
    groups                  # 列出当前用户和他所属的组
    who -q                  # 显示所有的登录用户
    groupadd                # 添加组
    useradd user            # 建立用户
    passwd 用户             # 修改密码
    userdel -r              # 删除帐号及家目录
    chown -r user:group     # 修改目录拥有者(r递归)
    chown y.li:mysql       # 修改所有者用户中包含点"."
    umask                   # 设置用户文件和目录的文件创建缺省屏蔽值
    chgrp                   # 修改用户组
    finger                  # 查找用户显示信息
    echo "xuesong" | passwd user --stdin       # 非交互修改密码
    useradd -g www -m  -s /sbin/nologin  www   # 指定组并不允许登录的用户,nologin允许使用服务
    useradd -g www -m  -s /bin/false  www      # 指定组并不允许登录的用户,false最为严格
    usermod -l 新用户名 老用户名               # 修改用户名
    usermod -g user group                      # 修改用户所属组
    usermod -d 目录 -m 用户                    # 修改用户家目录
    usermod -g group user                      # 将用户添加到附加组
    gpasswd -d user group                      # 从组中删除用户
    su - user -c " #命令1; "                   # 切换用户执行
  • 相关阅读:
    java序列化和反序列化使用总结
    什么是N+1查询?
    Oracle insert /*+ APPEND */原理解析
    Oracle redo与undo
    MongoDB(三)-- 执行JS、界面工具
    几种Bean的复制方法性能比较
    Kafka(三)-- Kafka主要参数
    Kafka(二)-- 安装配置
    Kafka(一)-- 初体验
    Nginx(十二)-- Nginx+keepalived实现高可用
  • 原文地址:https://www.cnblogs.com/pennli/p/8795102.html
Copyright © 2011-2022 走看看