说明
Linux环境变量设置文件
/etc/profile
全局用户,应用于所有的Shell。
/$HOME/.profile
当前用户,应用于所有的Shell。
/etc/bash_bashrc
全局用户,应用于Bash Shell。
~/.bashrc
局部当前,应用于Bash Sell。
1. 常用命令
1.1 查找命令对应的包,例如 netstat
sudo yum provides netstat
1.2 查找命令
1. find
find <指定目录> <指定条件> <指定动作>
$ find . -name 'my*'
搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件
$ find . -name 'my*' -ls
搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息
$ find . -type f -mmin -10
搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录
2. locate
locate命令其实是"find -name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
$ locate -i ~/m
搜索用户主目录下,所有以m开头的文件,并且忽略大小写。
3. whereis
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
$ whereis grep
4.which
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
$ which grep
5.type
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
$ type cd
系统会提示,cd是shell的自带命令(build-in)。
1.3 磁盘相关
- 查看磁盘以及分区情况
fdisk -l
1.4 IO 实时监控
简介
iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
语法
iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ]
入门使用
iostat -d -k 2
参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;2表示,数据显示每隔2秒刷新一次。
输出如下
[root@k8s-node-1 nginx]# iostat -d -k 2
Linux 3.10.0-693.5.2.el7.x86_64 (k8s-node-1) 06/11/2018 _x86_64_ (2 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 16.30 32.02 120.62 77752406 292879667
sdc 12.62 175.53 566.25 426233861 1374971908
sdb 0.00 0.00 6.20 11797 15043936
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.50 4.00 0.00 8 0
sdc 23.50 0.00 1130.00 0 2260
sdb 0.00 0.00 0.00 0 0
输出信息的意义
- tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)一次传输意思是一次I/O请求。多个逻辑请求可能会被合并为一次I/O请求。一次传输请求的大小是未知的。
- kB_read/s:每秒从设备(drive expressed)读取的数据量;
- kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
- kB_read:读取的总数据量;
- kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
上面的例子中,我们可以看到磁盘sda以及它的各个分区的统计数据,当时统计的磁盘总TPS是39.29,下面是各个分区的TPS。(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和)
指定监控的设备名称为sda,该命令的输出结果和上面命令完全相同。
iostat -d sda
默认监控所有的硬盘设备,现在指定只监控sda。
-x 参数
iostat还有一个比较常用的选项-x,该选项将用于显示和io相关的扩展数据。
iostat -d -x -k
[root@k8s-node-1 nginx]# iostat -d -x -k
Linux 3.10.0-693.5.2.el7.x86_64 (k8s-node-1) 06/11/2018 _x86_64_ (2 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.02 0.55 15.76 32.02 120.75 18.74 0.27 16.26 41.17 15.39 2.46 4.00
sdc 0.00 14.36 0.58 12.04 175.49 566.36 117.59 0.08 5.98 43.77 4.17 3.28 4.14
sdb 0.00 0.01 0.00 0.00 0.00 6.19 26183.88 0.00 204.03 1.90 304.97 2.73 0.00
输出信息的含义
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);
wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
rsec/s:每秒读取的扇区数;
wsec/:每秒写入的扇区数。
rKB/s:The number of read requests that were issued to the device per second;
wKB/s:The number of write requests that were issued to the device per second;
avgrq-sz 平均请求扇区的大小
avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。
await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
svctm 表示平均每次设备I/O操作的服务时间(以毫秒为单位)。
如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长, 系统上运行的应用程序将变慢。%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1= 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
-c 参数
iostat还可以用来获取cpu部分状态值:
[root@k8s-node-1 nginx]# iostat -c
Linux 3.10.0-693.5.2.el7.x86_64 (k8s-node-1) 06/11/2018 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
12.47 0.15 4.73 27.42 0.00 55.23
常见用法
[root@k8s-node-1 nginx]# iostat -d -k
Linux 3.10.0-693.5.2.el7.x86_64 (k8s-node-1) 06/11/2018 _x86_64_ (2 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 16.31 32.02 120.87 77791498 293628177
sdc 12.62 175.63 566.61 426662841 1376507636
sdb 0.00 0.00 6.19 11797 15043936
#查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat
#查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -m
#查看设备使用率(%util)、响应时间(await)
iostat -d -x -k
#查看cpu状态
iostat -c
实例分析
[root@k8s-node-1 nginx]# iostat -d -k
Linux 3.10.0-693.5.2.el7.x86_64 (k8s-node-1) 06/11/2018 _x86_64_ (2 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 16.31 32.02 120.90 77798710 293745717
sdc 12.62 175.67 566.66 426802077 1376752076
sdb 0.00 0.00 6.19 11797 15043936
上面看到,磁盘每秒传输次数平均约400;每秒磁盘读取约5MB,写入约1MB。
[root@k8s-node-1 nginx]# iostat -d -x -k
Linux 3.10.0-693.5.2.el7.x86_64 (k8s-node-1) 06/11/2018 _x86_64_ (2 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.02 0.55 15.76 32.02 120.91 18.76 0.27 16.26 41.16 15.39 2.46 4.00
sdc 0.00 14.37 0.58 12.04 175.66 566.67 117.62 0.08 5.98 43.77 4.17 3.28 4.14
sdb 0.00 0.01 0.00 0.00 0.00 6.19 26183.88 0.00 204.03 1.90 304.97 2.73 0.00
可以看到磁盘的平均响应时间<5ms,磁盘使用率>80。磁盘响应正常,但是已经很繁忙了。
2. 网络
1. DNS 查看
- 查看/etc/resolv.con文件
[root@localhost ~]# cat /etc/resolv.conf
nameserver 192.168.xxx.xxx
#search localdomain
[root@localhost ~]#
- 使用nslookup命令查看DNS信息
[root@localhost ~]# nslookup 127.0.0.1 | grep Server
Server: 192.168.xxx.xxx
[root@localhost ~]#
- 使用dig命令来查看DNS信息
root@localhost ~]# dig
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>>
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36888
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 3
;; QUESTION SECTION:
;. IN NS
;; ANSWER SECTION:
. 86163 IN NS m.root-servers.net.
. 86163 IN NS a.root-servers.net.
. 86163 IN NS j.root-servers.net.
. 86163 IN NS l.root-servers.net.
. 86163 IN NS e.root-servers.net.
. 86163 IN NS d.root-servers.net.
. 86163 IN NS k.root-servers.net.
. 86163 IN NS f.root-servers.net.
. 86163 IN NS h.root-servers.net.
. 86163 IN NS c.root-servers.net.
. 86163 IN NS g.root-servers.net.
. 86163 IN NS b.root-servers.net.
. 86163 IN NS i.root-servers.net.
;; ADDITIONAL SECTION:
a.root-servers.net. 3599 IN A 112.4.20.71
b.root-servers.net. 86163 IN A 192.228.79.201
i.root-servers.net. 86173 IN A 192.36.148.17
;; Query time: 8 msec
;; SERVER: 192.168.xxx.xxx#53(192.168.xxx.xxx)
;; WHEN: Sat Apr 16 07:34:37 2016
;; MSG SIZE rcvd: 289
[root@localhost ~]# dig | grep SERVER: | awk -F# '{ print $1 }' | awk -F: '{ print $2 }'
192.168.xxx.xxx
- 其它一些方法查看DNS信息
在网上看到还有一些其他方法,查看服务器的DNS配置信息,如下所示,不过这些方法,由于环境限制,我没有验证过,仅供参考。
nm-tool | grep DNS
nmcli dev list iface eth0 | grep IP4
2. 静态IP地址
需要添加的几项内容的解释:
- IPADDR IP地址
- NETMASK 子网掩码
- NETWORK 网关地址
通常,如果我们想更改主机地址为静态地址或者更改主机名,需要修改的几个文件包括:
/etc/sysconfig/network 设置主机名和网络配置
/etc/sysconfig/network-scripts/ifcfg-eth0 针对特定的网卡进行设置
/etc/resolv.conf 设置DNS
/etc/hosts 设置指定的域名解析地址
一般我们只需要修改网卡的配置文件就可以了,例如我的配置文件如下:
DEVICE=eth0
BOOTPROTO=static
TYPE=Ethernet
NAME="System etho0"
BROADCAST=192.168.56.255
HWADDR=08:00:27:24:F8:9B
IPADDR=192.168.56.101
IPV6INIT=yes
IPV6_AUTOCONF=yes
NETMASK=255.255.255.0
NETWORK=192.168.56.1
ONBOOT=yes
设置完成后,重启一下网卡就可以了:service network restart
或者sudo systemctl restart network
我们还有一个办法可以实现设置静态IP,那就是通过 ifconfig 这个命令。通常,我们都用它来查看当前网卡的一些信息,同时,他也可以用来进行一些网卡信息的设置。
修改的命令如下:ifconfig eth0 192.168.56.102
3. 用户管理
1. 添加用户
adduser mynewuser
设置密码
password mynewuser
2. 添加Root权限
visudo
Find the following code:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
In this case, we’re granting root privileges to the user mynewuser . Add the following below that code:
mynewuser ALL=(ALL) ALL
3.修改密码
sudo passwd root
4. Proxy
[root@client ~]# [vi](https://www.server-world.info/en/command/html/vi.html) /etc/profile
# add follows to the end (set proxy settings to the environment variables)
MY_PROXY_URL="http://prox.srv.world:3128/"
HTTP_PROXY=$MY_PROXY_URLHTTPS_PROXY=$MY_PROXY_URLFTP_PROXY=$MY_PROXY_URLhttp_proxy=$MY_PROXY_URLhttps_proxy=$MY_PROXY_URLftp_proxy=$MY_PROXY_URL
export HTTP_PROXY HTTPS_PROXY FTP_PROXY http_proxy https_proxy ftp_proxy
[root@client ~]# source /etc/profile
# it's OK all, but it's possible to set proxy settings for each application like follows
# for yum
[root@client ~]# [vi](https://www.server-world.info/en/command/html/vi.html) /etc/yum.conf
# add to the end
proxy=http://prox.srv.world:3128/
# for wget
[root@client ~]# [vi](https://www.server-world.info/en/command/html/vi.html) /etc/wgetrc
# add to the end
http_proxy = http://prox.srv.world:3128/https_proxy = http://prox.srv.world:3128/ftp_proxy = http://prox.srv.world:3128/
Q: bind Address already in use
A: 可以用netstat -anp | more,然后kill pid
查看kubelet日志
sudo tail -100f /var/log/messages | grep kubelet
5. 常用组件
yum -y install gcc gcc-c++ autoconf pcre pcre-devel make autokake
yum -y install wget httpd-tools vim
6. yum
--添加epel源
yum install -y epel-release
--添加yum源
vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx.repo
baseurl=http://nginx.org/packages/centos/7/RELEASE/$basesearch/
gpgcheck=0
enabled=1
--查看
yum list |grep nginx
--查看安装的文件
rpm -ql nginx
7. NFS搭建
OS环境为 CentOS 7.3 x86_64
安装必要软件包
yum install -y nfs-ganesha nfs-ganesha-vfs
编辑配置文件 /etc/ganesha/ganesha.conf :
EXPORT
{
# Export Id (mandatory, each EXPORT must have a unique Export_Id)
Export_Id = 1;
# Exported path (mandatory)
Path = /data;
# Pseudo Path (required for NFS v4)
Pseudo = /data;
# Required for access (default is None)
# Could use CLIENT blocks instead
Access_Type = RW;
Squash = No_root_squash;
# Exporting FSAL
FSAL {
Name = VFS;
}
}
重启服务:
systemctl restart nfs-ganesha
查看 exports :
# showmount -e localhost
Export list for localhost:
/data (everyone)
在其他节点挂载:
mount -t nfs 10.30.109.199:/data /mnt
注意 其他节点需要安装 nfs-utils (提供 mount.nfs , showmount 工具)
yum install -y nfs-utils
8. 系统环境变量
更改环境变量值
sysctl -w vm.max_map_count=65535
9. ssh免密登录
1. 相关命令及说明如下:
- ssh-keygen
ssh-keygen 是一个用来生成、创建和管理 SSH 认证用的公私钥的工具。通过 ssh-keygen 命令,用户可以创建支持SSH1 和 SSH2 两个协议的密钥。ssh-keygen 为 SSH1 协议创建 RSA 密钥,SSH2 则可以是 RSA 或 DSA。 - ssh-copy-id
ssh-copy-id 是用来将本地公钥拷贝到远程的 authorized_keys 文件的脚本命令,它还会将身份标识文件追加到远程机器的 ~/.ssh/authorized_keys 文件中,并给远程主机的用户主目录适当的的权限。 - ssh密钥
SSH 密钥为登录 Linux 服务器提供了更好且安全的机制。运行 ssh-keygen 后,将会生成公私密钥对。你可以将公钥放置到任意服务器,从持有私钥的客户端连接到服务器的时,会用它来解锁。两者匹配时,系统无需密码就能解除锁定。
2. 操作步骤
- 用ssh-keygen生成公私钥,可以对私钥进行加密保护以增强安全性。
ssh-keygen
- 用 ssh-copy-id 命令将公钥复制或上传到远程主机,并将身份标识文件追加到节点2的 ~/.ssh/authorized_keys 中:
ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.10
- 默认使用~/.ssh/id_rsa这个密钥,如果想使用不同的密钥则要:
ssh -i path/to/id_rsa username@server.com
如果不想每次都指定这些密钥、用户名、服务器地址的话,可以在~/.ssh/config中配置,如下:
Host server1
HostName server.com
User username
IdentityFile path/to/id_rsa
这样就可以简单的使用以下命令:
ssh server1
10. GUI
1. 安装Gnome
sudo yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
开机自动进入GUI
sudo ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
通过命令进入
startx
2. 设置VNX远程连接
安装vnc-server
yum install vnc-server
设置为systemd service,端口号为590+@:后边跟的数字,示例中未5901
cp /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
修改 user及分辨率
vi /etc/systemd/system/vncserver@:1.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
User=meng
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=-/usr/bin/vncserver -kill %i
ExecStart=/usr/bin/vncserver %i -geometry 1366x768
PIDFile=/home/meng/.vnc/%H%i.pid
ExecStop=-/usr/bin/vncserver -kill %i
[Install]
WantedBy=multi-user.target
设置密码
vncpasswd
记得设置防火墙,然后启动
systemctl daemon-reload
systemctl start vncserver@:1.service
-
客户端连接
下载VNCViewer进行连接