• centos 基础知识


    1.查看当前网卡支持速率
    ethtool eth1 | grep ‘supported link modes’
    实际速率:Speed 100M/s
    2.查看网卡驱动:
    lspci -vvv or ethtool -i ethx
    3.查看网卡型号:
    lspci -vvv | grep Eth
    4.有些时候,可能某些设备(通常是 CD-ROM)正忙或无法响应。此时,大多数用户的解决办法是重新启动计算机。我们大可不必这么做。例如,如果 umount /dev/hdc 失败的话,您可以试试“lazy” umount。语法十分简单:

    umount -l <挂载点|设备>


    5.系统位数[root@localhost ~]# uname -m i686
    系统版本[root@localhost ~]# uname -s Linux
    内核版本[root@localhost ~]# uname -r 2.6.18-4-64

    6.查看173.16.0.200在被ping时的实际连接,使用以下命令:
    1. netstat -s |more
    2.netstat = ss = cat /proc/net/tcp


    7.ps --no-header -C nginx

    ps -eo comm,pcpu | tail -n +2 # tail -n +2 用于剥除头部的COMMAND和%CPU。

    -o 参数


    8.修改Linux系统时间 date -s time| clock -w(把系统时间写入CMOS)

    9.Linux系统语言设置:
    目前大多数的linux distributions已经都是支持万国码(UTF-8),也都支持大部分国家的语言。
    这主要是i18n文件。
    可使用locale -a命令查看linux系统支持多少语言。
    可使用locale命令查看当前系统的语言环境。
    [root@nis1 ~]# locale
    LANG=zh_CN.UTF-8  ##主语言环境
    LC_CTYPE="zh_CN.UTF-8"  ##字符(文字)识别的编码
    LC_NUMERIC="zh_CN.UTF-8"  ##数字系统的显示信息
    LC_TIME="zh_CN.UTF-8"  ##时间系统的显示数据
    LC_COLLATE="zh_CN.UTF-8"  ##字符串的比较与排序等
    LC_MONETARY="zh_CN.UTF-8"  ##货币格式显示
    LC_MESSAGES="zh_CN.UTF-8"  ##信息显示的内容如菜单、错误信息等
    LC_ALL=  ##整体语言环境
    一般来说:设置LANG和LC_AL即可,其他变量也会随之而改变。
    可使用如下命令临时调整系统字符集为英语:
    export LC_ALL=en_US-UTF-8
    2.设置语言相关的几个文件:
    /usr/lib/locale/:目录存放locale列出的语言文件。
    /etc/sysconfig/i18n:是设置系统字符集的的文件。
    不管你装的是中文版,还是英文版.删掉原来的设置,把下面的拷贝过去。
    即可将系统的语言设置为简体中GB18030字符集。
    vi /etc/syscnfig/i18n
    LANG="zh_CN.GB18030"
    SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
    SYSFONT="latarcyrheb-sun16"
    注:
    第一行设置当前系统语言环境
    第二行表明系统预设了哪些语言支持,不在项目中的语言不能正常显示
    第三行定义控制台终端字体,文本(tty终端)登录的时候显示的字体就是这个 latarcyrheb-

    10.当前服务器系统的版本

    cat /proc/version | grep -Eqi ‘centos | red hat | redhat’
    lsb_release -a
    cat /etc/issue

    11.查看网卡速度:ethtool eth0

    12.Linux系统启动过程:

    13.route -n 中metric是度量的意思即路由计跳数

    14.在/var/lib/dhclient/里面确认到了dhcp服务器的ip

    15.在vim的命令模式下:set ff可看到dos或unix的字样,如果的确是dos格式的, 那么用set ff=unix把它强制为unix格式的,,然后存盘退出后就可运行。

    16.zip -r:递归处理,将指定目录下的所有文件和子目录一并处理;-q:不显示指令执行过程;

    17.scp 源文件:指定要复制的源文件。 目标文件:目标文件。格式为user@host:filename(文件名为目标文件的名称)
    -r 目录

    18.查看设备UUID:ls -l /dev/disk/by-uuid/

    19.(or type Control-D to continue):/etc/fstab与现有存储不一直导致文件系统挂载问题
    文件系统是只读模式,若需要修改/etc/fstab文件,则需要执行:mount -o remount rw /

    20.while循环中执行效率最高,最常用的方法。
     
    function while_read_LINE_bottm(){
     While read LINE
     do
    echo $LINE
    done  < $FILENAME
    }
     
    注释:我习惯把这种方式叫做read釜底抽薪,因为这种方式在结束的时候需要执行文件,就好像是执行完的时候再把文件读进去一样。

    21.iptables

    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination
    1    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
    2    ACCEPT     icmp --  anywhere             anywhere
    3    ACCEPT     icmp --  anywhere             anywhere            limit: avg 1/sec burst 10
    4    DROP       tcp  --  192.168.1.206        anywhere            tcp dpt:ssh #conn/32 > 2
    5    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
    6    DROP       all  --  anywhere             anywhere

    由上而下,逐条匹配。
    4、5对换,优先被5匹配到了,就直接执行允许了,没有连接数限制

    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    # 这两条的意思是在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机,一般放在末尾。

    防火墙日志开启
    vim /etc/rsyslog.conf
    kern.* /var/log/iptables.log

     -m multiport --dports 1863,443,110,80,25
    LOG --log-level INFO --log-prefix “前缀”
    -p icmp -m icmp --icmp-type echo-reply 回应 我方ping其他服务器接受来自其他服务器的回应
    -p icmp -m icmp --icmp-type echo-request 请求 即别的机器向我方放送icmp请求,即其他机器ping我方

    22.tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
    (2)-i eth1 : 只抓经过接口eth1的包
    (3)-t : 不显示时间戳
    (4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
    (5)-c 100 : 只抓取100个数据包
    (6)dst port ! 22 : 不抓取目标端口是22的数据包
    (7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
    (8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析


    23.vim中在命令模式下用?和/来查找内容,n(下一个)N(上一个)

    23.组播地址:01-00-5e打头
    广播帧:FF-FF-FF-FF-FF-FF

    24.mysql连接方式:
    1.socket
    mv /var/lib/mysql/mysql.sock /var/lib/mysql.sock.bak
    mysql -uroot -p1233456
    ERROR Can't connect to local MYSQL server through socket

    mysql -uroot -p123456 -h 127.0.0.1

    2.TCP/IP


    25.tar.xz包解压缩,解包
    xz -d **.tar.xz
    tar -xv -f **.tar 或者 tar -Jxv -f **.tar.xz(大写的J)

    26.file /boot/initramfs
    mv /boot/initramfs /tmp/initramfs.文件类型
    再用相应的解压命令

    27.抓取ip地址
    ifconfig | grep -i ‘bcast’ | awk -F ‘[ :]+’ ‘{print $4}’
    bcast:表示广播地址

    28.Linux下cpu的工作量度
    命令:w或top或uptime
    load average:1分钟 5分钟 15分钟
    load average如果小于或等于1, 那么就意味着系统会马上处理. 如果大于
    1, 那么就意味着进程需要排队. 如果大于3, 那么就意味着, 系统性能已经
    显著下降了.
    通常我们先看15分钟load,如果load很高,再看1分钟和5分钟负载,查看是否有下降趋势。(三个值的大小一般不能大于逻辑CPU的个数)
    1分钟负载值 > 1,那么我们不用担心,但是如果15分钟负载都超过1,我们要赶紧看看发生了什么事情。所以我们要根据实际情况查看这三个值。


    29.CPU个数,核数,逻辑数:
    # 查看物理CPU个数
    cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

    # 查看每个物理CPU中core的个数(即核数)
    cat /proc/cpuinfo| grep "cpu cores"| uniq

    # 查看逻辑CPU的个数=cpu个数*cpu核数 不等于的话,即CPU支持超线程。
    top命令下输入:1也可查看逻辑cpu个数
    cat /proc/cpuinfo| grep "processor"| wc -l

    30.内存
    free

    31.mv file.txt file1.txt inode不变

    32.ping -c1 -w1 中-c1是指ping的包的个数,-w是指执行的最后期限(timeout),也就是执行的时间,单位为秒

    33.网卡型号:lspci | grep -i ether
    查看网卡是否正常连接:mii-tool

    34.主机名查询静态表:/etc/hosts
    主机名修改:/etc/sysconfig/network
    分为三部分,用空格隔开
    一ip 二 主机名或域名 三主机别名

    35.查看服务器网络连接状态:
    netstat -an | awk ‘/^tcp/{++S[$NF]}END{for (a in S)print a,S[a]}’

    httpd占用内存的平均数:
    ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n}'


    36.ctrl+c 中断前台进程(kill -2)
    kill -9 强制删除程序
    killall

    37.永久添加静态路由:/etc/sysconfig/network-scripts/route-eth0

    38./etc/init.d/network 脚本会启动ifcfg开头的所有网络文件配置
    故ifcfg-eth1.bak也会启动

    39.traceroute www.baidu.com 可以用来看默认网关设置是否生效;

    40.修改最大文件打开数:
    一 vim /etc/security/limits.conf
    *soft nofile 32768
    *hard nofile 65535

    二 vim /etc/rc.local
    ulimit -SHn 65535

    41.sed a 在当前行添加至下一行
    sed ‘na xxxx’ 在第n+1行下添加xxx

    42.free 可用的内存:+cache/buffers
    即可用的内存=free+cache+buffers

    43. shift 2 这行有意思,有了这个就可以实现脚本参数的功能,
    shift 2 的意思是将输入的参数左移2位,即$1,$2先清空,$3赋值给$1,$4赋值给$2。
    shift n后,前n位参数都会被销毁,故传入参数个数可以大于9

    until [ -z “$1”]
    do
    echo -n “${1} ”
    shift
    done


    44.每两个小时 
    0 */2 * * * echo "Have a break now." >> /tmp/test.txt  

    45.sort
    -r 倒序
    -n 已数字进行排序
    -t 指定分隔符
    -k 指定要排序的列数

    45.sed

    n 输出模式空间行,读取下一行替换当前模式空间的行,执行下一条处理命令而非第一条命令。
    N 读入下一行,追加到模式空间行后面,此时模式空间有两行。
    h 把模式空间里的行拷贝到暂存空间。
    H 把模式空间里的行追加到暂存空间。
    g 用暂存空间的内容替换模式空间的行。
    G 把暂存空间的内容追加到模式空间的行后。
    x 将暂存空间的内容于模式空间里的当前行互换。
    D 表示清除模式空间中的从模式头到第一个 之间的内容(可以简单的理解为清除模式空间中第一行),如果清除后模式空间仍有剩余行,则执行D之前的命令(如之前有多个命令需依次执行),再执行D命令,如此循环直到不能往模式空间中追加新行为止。注意D有循环的意思在里面
    d 清除模式空间所有匹配的行
    P 打印模式空间中的从模式头到第一个 之间的内容

    114.113.144.2:
    19ms
    19ms
    19ms
    36ms
    22ms
    19ms
    18ms
    218.61.204.73:
    0ms
    0ms
    0ms
    0ms
    0ms
    0ms
    0ms


    sed ‘/:$/{:a;N;/ .*ms/s/ / /;ta;P;D}‘ file 

    114.113.144.2: 19ms 19ms 19ms 36ms 22ms 19ms 18ms
    218.61.204.73: 0ms 0ms 0ms 0ms 0ms 0ms 0ms

    思路使用t标签,有条件跳转
    匹配以:结尾的行,然后执行N命令读入下一行
    此时模式空间内容为
    114.113.114.2: 19ms
    假如匹配 .*ms,就执行替换,将 替换成空格
    此时模式空间内容为
    114.113.114.2: 19ms
    替换执行成功后,满足条件执行t标签,跳到a出继续执行
    直到读到218.61.204.73: 不满足匹配,也就不执行 替换空格的命令了,执行后面的命令P;D



    one 1 one 1
    two 1 two 2
    three 1 three 3
    four 1 four 4

    sed “=” filename | sed “N;s/ / /;s/(. )(.*)( *1)/21/”


    46.运算符 | ^
    (|)OR是或运算,A OR B的结果:当A、B中只要有一个或者两个都为1时,结果为1,否则为0
    (^)XOR是异或运算,A XOR B的结果:当A、B两个不同时结果为1,否则为0

      POSIX兼容的应用程序使用的便是字典中的字母排列顺序,而不是用ASCII码中的字符排列顺序。

      字母排序:aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ

      故ls [A-Z]*会显示小写字母的文件名,可使用POSIX字符类来达到所需效果ls [[:upper:]]。

    可使用export LANG=POSIX来改变系统支持的字符顺序,永久性维持该变化vim ~.bashrc.

    POXIS字符类
    
    [:alnum:]	字母字符和数字字符;在ASCII码中,与[A-Za-z0-9]等效
    [:word:]	基本与[:alnum:]一样,只是多了一个下划线字符(_)
    [:alpha:]	字母字符;在ASCII中,等效于[A-Za-z]
    [:blank:]	包括空格和制表符
    [:cntrl:]	ASCII控制码;包括ASCII字符0~31以及127
    [:digit:]	数字0~9
    [:graph:]	可见字符;在ASCII中,包括字符33~126
    [:lower:]	小写字母
    [:punct:]	标点符号字符;在ASCII中,与[-!"#$%&'()*+,./:;<=>?@[\]_`{|}~]等效
    [:print:]	可打印字符;包括[:graph:]中的所有字符再加上空格字符
    [:space:]	空白字符如空格符、制表符、回车符、换行符、垂直制表符以及换页符。在ASCII中,等效为[ 	
    vf]
    [:upper:]	大写字母
    [:xdigit:]	用于表示十六进制的字符;在ASCII中,与[0-9A-Fa-f]等效

    元字符是一种Perl风格的正则表达式,只有一部分文本处理工具支持它,但是POSIX字符类以及普通的正则表达式都是被广大支持的。

    元字符:


    47.awk
    系统变量

    赋值
    1.awk script variable=value inputfile
    2.-v BEGIN之前赋值

    FS:定义字段分隔符(默认空格);
    OFS:字段输出分隔符
    RS:记录分隔符(默认换行符);
    ORS:记录输出分隔符;
    NF:表示输入记录的字段数($NF表示最后一个字段;NF==6{print $1,$6}只有具有6个字段的记录才能被打印);
    NR:记录的编号(/^root/&&NR>=20,20行之后并且root开头);


    48.变量默认值
    ${parameter-default} 或 ${parameter:-default} 但parameter没有被声明就使用默认值
    当parameter被赋null时:-和-才会有区别

    $_是一个特殊变量, 代表最后一个命令的最后一个参数.

    49.a++ 的含义是先赋值后相加
    ++a的含义是先相加后赋值

    50.单词边界
    转义的尖括号<..>用于匹配单词的边界
    grep “<the>” file.txt 之匹配the,不匹配them等含the的单词

    51.tar -xvfp
    -p 保证文件所有权和文件属性
    -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
    # tar -cf all.tar *.jpg 参数-f是必须的
    这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。

    52.使用[[ ... ]]条件判断结构, 而不是[ ... ], 能够防止脚本中的许多逻辑错误. 比如,
    &&, ||, <, 和>操作符能够正常存在于[[ ]]条件判断结构中, 但是如果出现在[ ]结构中
    的话, 会报错.如:if [[ $condition1 || $condition2 ]]。

    53.在if后面也不一定非得是test命令或者是用于条件判断的中括号结构( [ ] 或 [[ ]] ).
    "if COMMAND"结构将会返回COMMAND的退出状态码。

    54.
    : ${HOSTNAME?}
    echo $?
    用来测试HOSTANAME这个环境变量是否已被赋值

    : ${1?"Usage : $0 argument"}
    如果没有提供命令行参数的话, 那么脚本就在这里退出了

    55.declare -r var 只读
    declare -i var 整数 被赋值为非整数时变量值为0
    -a 数组(array)

    如果把一个变量指定为整型的话, 那么即使没有expr或者let命令, 也允许使用特定的算术运算.

    56.a=b
    c=d
    b=$c
    echo “$b”
    echo ““a” now” ;eval echo $$a

    57.continue 跳过本次循环的剩余命令
    break 直接跳出整个循环

    58.$IFS 内部域分隔符 一搬都会将 (换行符) 包含在它的空白字符集合中

    59.echo 2222 | gawk --re-interval '/2{3}/'
    2222

    60.间接引用
    变量变成命令

    eval 将表达式中的参数, 或者表达式列表, 组合起来, 然后评价它们(译者注: 通常用来执行).
    killppp="eval kill -9 `ps ax | awk /ppp/ {print $1}`"
    $killppp 现在killppp变成了一个命令

    函数中的间接引用

    func ()
    {
    echo "$1"
    }

    message=hello
    hello=Goodbye

    func "$message" #hello
    func "${!message}" #Goodbye

    61.source
    多个脚本需要引用相同的数据, 或者需要使用函数库的情况下, 这个命令非常有用.

    62.wait
    使用wait命令来防止在后台作业没完成(这会产生一个孤儿进程)之前退出脚本

    63./var/lock/subsys
    很多程序需要判断是否当前已经有一个实例在运行,这个目录就是让程序判断是否有实例运行的标志,比如说xinetd,如果存在这个文件,表示已经有xinetd在运行了,否则就是没有,当然程序里面还要有相应的判断措施来真正确定是否有实例在运行。


    64.xargs -i kill {}
    -i是替换字符串选项,替换为大括号
    -nx 每行x个字符

    65.awk
    substr(string,posittion,length) 返回在字符串string中从position开始的长度为length的字符
    index(string,char) 返回char在字符串string中的位置
    在awk的脚本中不必加入'号
    $0 全部字段

    66.
    使用$*很少是正确的选择。$@能够处理空格参数,而且参数间的空格也能正确的处理。使用$@时应该用双引号括起来,像”$@”这样。

    67.双单引号
    [root@test] a=55
    [root@test] echo $a
    55
    [root@test] echo '$a'
    $a
    [root@test] echo ''$a'' #注意此处是两个单引不是一个双引
    55

    68.在以普通用户打开的vim当中保存一个root用户文件

    :w !sudo tee %

    这题目读起来纠结,其实是很常见的,常常忘记了sudo就直接用vim编辑/etc内的文件,(不过也不一定,vim发现保存的文件无法保存时候会 提示)等编辑好了,保存时候才发现没权限。曲线方法是先保存个临时文件,退出后再sudo cp回去。不过实际上在vim里面可以直接完成这个过程的,命令就是如此。

    查阅vim的文档(输入:help :w),会提到命令:w!{cmd},让vim执行一个外部命令{cmd},然后把当前缓冲区的内容从stdin传入。

    tee是一个把stdin保存到文件的小工具。

    而%,是vim当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径。

    所以执行这个命令,就相当于从vim外部修改了当前编辑的文件,好完工。

    将制表符转换为空格:
    cat text | tr ' ' ' '


    69."$*"将所有的参数解释成一个字符串,而"$@"是一个参数数组

    70.创建-f的目录
    mkdir -f #不成功,因为-f会被mkdir当作选项来解析,这时就可以使用
    # mkdir -- -f 这样-f就不会被作为选项。

    71.echo "$IFS"|od -b/-c
    直接输出IFS是看不到值的,转化为二进制或字符就可以了

    72.if condition
    then
    function1
    fi

    function1
    在满足条件下函数function1才会运行

    73.[! -f "$file"]
    文件存在返回false
    文件不存在返回true
    [! -f "$file"] || false才执行,即文件存在才执行
    && true才执行,即文件不存在才执行

    74.后台运行 &
    当后台运行的命令有stdout的时候,需要敲ENTER才会结束挂起,在后台运行命令后加上wait命令可以解决这个问题,
    将运行命令的输出重定向到其他文件也可以解决这个问题。

    #!/bin/bash
    #test.sh
    ls -l &
    echo "Done"

    ls -l &
    wait
    echo "Done"

    ls -l > /dev/null &
    echo "Done"

    75.max-file 表示系统级别的能够打开的文件句柄的数量。是对整个系统的限制,并不是针对用户的。
    # vim /etc/sysctl.conf
    fs.file-max = 2000000
    #vim /proc/sys/fs/file-max
    794168
    ulimit -n 控制进程级别能够打开的文件句柄的数量。提供对shell及其启动的进程的可用文件句柄的控制。这是进程级别的。
    # vim /etc/security/limits.conf
    * soft nofile 65535
    * hard nofile 65535

    #echo "ulimit -n 65536" >> /etc/profile
    #echo "ulimit -n 65536" >> /etc/profile

    76.grep
    查询目录下具有该词汇的文件:grep -Hrn “value” 。
    -H 在显示符合范本样式的那一列之前,标示该列的文件名称。
    -r recurse 递归查询。
    -n 行号。

    比较文本差异:grep -Fvx -f file1.txt file2.txt
    -F 将范本样式视为固定字符串的列表。
    -v 反转查询。
    -x 只显示全列符合的列。
    -f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。

    grep与命令格式: grep -E "a.*b" file,ab条件同时成立,而grep或命令的格式为:grep -E "a|b" file,ab两个条件有一个成立即可。
     

    77.代理上网

      vim /etc/profile

      添加下面内容

      http_proxy = http://username:password@yourproxy:8080/
      ftp_proxy = http://username:password@yourproxy:8080/
      export http_proxy
      export ftp_proxy

    78.生成1-100的随机数

    declare -i number=$RANDOM*100/32767; echo $number

    79.用vi/vim或sed -i 修改文件会导致文件的inode发生改变。

    80.ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no "command|command" 远程批处理任务。

    81.cat /proc/filesystems 查看服务器支持的文件系统。

  • 相关阅读:
    log4j1修改DailyRollingFileAppender支持日志最大数量
    log4j1 修改FileAppender解决当天的文件没有日期后缀
    log4j生成有日期的日志文件名
    Java删除List和Set集合中元素
    Java并发编程:并发容器之ConcurrentHashMap
    Java并发编程:并发容器之CopyOnWriteArrayList
    java.util.ConcurrentModificationException解决详解
    Handshake failed due to invalid Upgrade header: null 解决方案
    web项目Log4j日志输出路径配置问题
    log4j.properties 的使用详解
  • 原文地址:https://www.cnblogs.com/hana-alice/p/9377197.html
Copyright © 2020-2023  润新知