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 查看服务器支持的文件系统。

原文地址:https://www.cnblogs.com/hana-alice/p/9377197.html