zoukankan      html  css  js  c++  java
  • 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 查看服务器支持的文件系统。

  • 相关阅读:
    51 Nod 1068 Bash游戏v3
    51 Nod Bash 游戏v2
    51 Nod 1073 约瑟夫环
    UVA 12063 Zeros and ones 一道需要好好体会的好题
    51 Nod 1161 Partial sums
    2018中国大学生程序设计竞赛
    UVA 11971 Polygon
    UVA 10900 So do you want to be a 2^n-aire?
    UVA 11346 Possibility
    python with as 的用法
  • 原文地址:https://www.cnblogs.com/hana-alice/p/9377197.html
Copyright © 2011-2022 走看看