Linux(Ubuntu16.04)apt-get install安装Nginx + PHP7+Mysql5.7

切换到root帐号,安装软件包源: apt-get install software-properties-common

1、安装PHP7.1

add-apt-repository ppa:ondrej/php

apt-get update

apt-get install php7.1-cli php7.1-fpm php7.1-common php7.1-curl  php7.1-xml php7.1-gd php7.1-mysql php7.1-mbstring php7.1-bcmath php7.1-dev php7.1-zip

相关服务命令:

service php7.1-fpm start/stop/restart

2、安装Nginx

add-apt-repository ppa:ondrej/nginx

apt-get update

apt-get install nginx-full

配置站点php-fpm

vim /etc/nginx/sites-available/default
fastcgi_pass  unix:/run/php/php7.1-fpm.sock;

相关服务命令:

service nginx start/stop/restart

3、安装Mysql5.7

add-apt-repository ppa:ondrej/mysql

apt-get update

apt-get install mysql-server-5.7

配置远程链接

创建远程链接帐号

mysql -u root -h localhost -p

mysql> GRANT ALL PRIVILEGES ON *.* TO 'remote_root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

mysql> FLUSH PRIVILEGES;

修改cnf配置

vim  /etc/mysql/mysql.conf.d/mysqld.cnf
将bind-address    = 127.0.0.1

设置成bind-address    = 0.0.0.0(设备地址)

重启mysql

service mysql restart

Linux性能调优工具

监控指标

  • load 特定事时间间隔内运行队列中的平均线程数
  • user time CPU执行用户进程所占用的时间
  • system time CPU在内核所花费的时间
  • nice time 系统在调整进程优先级的时候所花费的时间
  • idle time 系统空闲等待进程运行的时间
  • waiting time CPU在等待IO操作所花费的时间
  • hard irq time 系统处理硬件中断所占用的时间
  • soft irq time 系统处理软件中断所占用的时间
  • steal time 被强制等待虚拟机CPU的时间,占比较高表示当前虚拟机与该宿主其他虚拟机争用CPU频繁
  • 磁盘剩余空间 使用df和du命令查看
  • 网络traffic 使用sar命令查看 sar -n DEV 1 1
  • 磁盘IO 使用iostat命令查看 iostat -d -k
  • 内存使用 使用free命令查看
  • swap IO 使用vmstat命令查看

CPU

  • 使用top或uptime看过去1分钟、5分钟、15分钟机器的负载。按照经验,若数值小于 0.7 * CPU核数,则系统工作正常
  • 通过vmstat查看CPU上下文切换次数, 上下文切换的场景:
    • 时间片用完,CPU正常调度下一个任务
    • 被其它优先级更高的任务抢占
    • 执行任务碰到I/O阻塞,挂起当前任务,切换到下一个任务
    • 户代码主动挂起当前任务让出CPU
    • 多任务抢占资源,由于没有抢到被挂起
    • 硬件中断

Memory

  • 操作系统角度,内存关注应用进程是否足够,可以使用free –m查看内存的使用情况。
  • 通过top查看进程使用的虚拟内存VIRT和物理内存RES,根据公式VIRT = SWAP + RES可以推算出具体应用使用的交换分区(Swap)情况

I/O

  • I/O包括磁盘I/O和网络 I/O,一般情况下磁盘更容易出现I/O瓶颈。
  • 通过iostat可查看磁盘的读写情况,通过CPU的I/O wait可以看出磁盘I/O是否正常。

System Call

strace常用来跟踪进程执行时的系统调用和所接收的信,常见选项:

  • -c 统计每一系统调用的所执行的时间,次数和出错的次数等
  • -d 输出strace关于标准错误的调试信息
  • -f 跟踪由fork调用所产生的子进程
  • -ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中, pid是各进程的进程号
  • -F 尝试跟踪vfork调用.在-f时,vfork不被跟踪
  • -h 输出简要的帮助信息
  • -i 输出系统调用的入口指针
  • -q 禁止输出关于脱离的消息
  • -r 打印出相对时间关于,,每一个系统调用
  • -t 在输出中的每一行前加上时间信息
  • -tt 在输出中的每一行前加上时间信息,微秒级
  • -ttt 微秒级输出,以秒了表示时间
  • -T 显示每一调用所耗的时间
  • -v 输出所有的系统调用一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出
  • -V 输出strace的版本信息
strace -tt -f -p {pid}

Others

# 抓包
tcpdump -i eth2 -w capture.cap tcp port 9501 and dst host 172.16.1.31

zabbix3.2监控linux内存

通过free -m查看当前内存

未分类

可用内存:Available memory=free+buffers+cached,即31068=759+66+30243

已用内存:Used memory=used-buffers-cached,即1030=31339-66-30243

我这里不使用zabbix自带的监控模板,手动设置监控项。

1、手动创建一个应用集,应用集名称为Memory

2、创建监控项

  • 先创建一个Total memory

未分类

  • 再创建一个Available memory

未分类

  • 最后再创建Used memory

监控内存计算公式,用总内存减去可用内存获得准确的使用内存(注意这里双引号”,是英文的”,网上很多教程都是用的中文双引号,所以添加后会报错误)

(last("vm.memory.size[total]")-last("vm.memory.size[available]"))

未分类

3、创建图形

监控项这里我添加了,Total memory和Used memory

未分类

4、预览图形

未分类

未分类

未分类

Linux下查看进程所使用的环境变量

在Linux下直接执行env命令即可获取当前的环境变量

[xxxx ~]$$ env
HOSTNAME=iZ94lykym6iZ
TERM=linux
SHELL=/bin/bash
HISTSIZE=1000
...

进程的环境变量可以在/proc//environ查看,其中为进程id

获取进程id

使用ps获取pid

[xxxx ~]$ ps -ef | grep java
500   3345  1 0 Sep06 ?    00:48:57 /usr/bin/java -Djava.util.logging.config.file=/home/xxx/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/home/xxx/tomcat/endorsed -classpath /home/xxx/tomcat/bin/bootstrap.jar:/home/xxx/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/home/xxx/tomcat -Dcatalina.home=/home/xxx/tomcat -Djava.io.tmpdir=/home/xxx/tomcat/temp org.apache.catalina.startup.Bootstrap start

其中3345就是pid。

使用pidof获取pid

pidof命令需要知道进程的可执行的命令。

[xxxx ~]$ pidof java
24299 3345

它会列出所有执行此命令的进程id。

列出进程的环境变量

直接查看

cat /proc/<pid>/environ

美化输出查看

xargs --null --max-args=1 < /proc/<pid>/environ

Linux下发邮件乱码问题

作为系统管理员教程要写脚本生成报告,并将自动将邮件放到指定的人。然而收到的邮件经常有乱码(中文)。下面是解决方法:

例如cat test.sh:

#!/bin/bash  
export LANG=UTF-8  
/usr/local/mysql/bin/mysql -uroot -ppassword -e “select * from name” > /tmp/test$(date +%m%d).txt (test.txt有中文)  
/usr/local/bin/iconv -f UTF-8 -t GB2312 /tmp/”test$(date +%m%d).txt” | /bin/mail -s “test[$(date -d "1 day ago" +%D)]”  [email protected]

Linux下配置多网卡多网关

大家好,今天给大家介绍一下Linux下配置多网卡多网关的方法。@Hi-Linux

场景一 多运营商线路

比较典型的一种场景:一台 Linux 服务器上有三个网口并接入三个不同运营商的网络,以实现不同运营商用户访问其对应的网络线路,来减少网络延时。

服务器及对应网络信息如下:

一台 Ubuntu 16.04 server,这里一共使用三块网卡。假定网络信息如下:

未分类

这里 IP 只是为了区分各运营商线路做的示例,实际情况请以运营商给出的网络信息调整。

下面我们来看如何实现这样的需求:

在 Linux 下一台多网卡服务器不能同时配置两个及以上的默认网关,因为默认网关(Default Gateway)只能配置一个,通过 gateway 参数配置的网关在这里实际为默认路由。

这里通过配置 Linux 下策略路由来实现,通过原线路返回的策略路由可以实现多线多 IP 同时在线。让从同一运营商过来的请求由原运营商线路返回,比如:电信IP过来的请求按照电信路由返回,从网通IP过来的求从网通路由返回。

配置网络

  • 首先配置三块网卡的基本网络信息。
$ vim /etc/network/interfaces

auto enp0s5
iface enp0s5 inet static
address 192.168.100.212
netmask 255.255.255.0

auto enp0s6
iface enp0s6 inet static
address 192.168.110.213
netmask 255.255.255.0

auto enp0s7
iface enp0s7 inet static
address 192.168.120.214
netmask 255.255.255.0
  • 重启网络
$ /etc/init.d/networking restart
  • 查看配置好的网络情况
$ ip a|grep enp0s
2: enp0s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.100.212/24 brd 192.168.100.255 scope global enp0s5
3: enp0s6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.110.213/24 brd 192.168.110.255 scope global enp0s6
4: enp0s7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.120.214/24 brd 192.168.120.255 scope global enp0s7
  • 查看各网卡当前路由
$ ip route show
192.168.100.0/24 dev enp0s5  proto kernel  scope link  src 192.168.100.212
192.168.110.0/24 dev enp0s6  proto kernel  scope link  src 192.168.110.213
192.168.120.0/24 dev enp0s7  proto kernel  scope link  src 192.168.120.214

增加路由表

Linux 中的路由由路由规则和路由表组成。路由规则指定当数据包满足规则时,应转交到哪个路由表;路由表根据数据包的信息,选择下一跳。

可通过 ip rule 看当前的路由策略,如:

$ ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

从这里也可以看出在内核中最多支持 32768 条路由规则。这里的 main 表是系统主要的路由表,所有的路由规则都写在这个表中。

  • 查看 main 表
$ ip route list table main
192.168.100.0/24 dev enp0s5  proto kernel  scope link  src 192.168.100.212
192.168.110.0/24 dev enp0s6  proto kernel  scope link  src 192.168.110.213
192.168.120.0/24 dev enp0s7  proto kernel  scope link  src 192.168.120.214

Linux 中支持 256 张路由表,编号为 0 到 255,可直接使用编号操作,也可使用编号的别名操作,编号和其别名的对应关系在 /etc/iproute2/rt_tables 文件中。

默认有 local,main,default 三个路由表,这三个路由表的名称命名就来自 /etc/iproute2/rt_tables。

$ cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0   unspec
#
# local
#
#1  inr.ruhep

注:数字范围为0-255,但0、255、254、253是保留的,不能使用。

  • 增加三个路由表

在 /etc/iproute2/rt_tables 配置文件里面添加三个不同的路由表别名。增加三个路由表分别是: enp0s5:ChinaTel、enp0s5:ChinaCnc、enp0s5:ChinaEdu。

$ echo "101 ChinaTel" >> /etc/iproute2/rt_tables
$ echo "102 ChinaCnc" >> /etc/iproute2/rt_tables
$ echo "103 ChinaEdu" >> /etc/iproute2/rt_tables

因为这三个路由表的只是用来响应来自不同接口的,所以只需要每个路由表里面建立默认网关即可。

$ ip route add default via 192.168.100.1 dev enp0s5 table ChinaTel
$ ip route add default via 192.168.110.1 dev enp0s6 table ChinaCnc
$ ip route add default via 192.168.120.1 dev enp0s7 table ChinaEdu

如果要指定某一源 IP,可以加上 src 参数。

$ ip route add default via 192.168.100.1 dev eth0 src 192.168.100.212 table ChinaTel
  • 查看新增路由表中内容
$ ip route show table ChinaTel
default via 192.168.100.1 dev enp0s5

$ ip route show table ChinaCnc
default via 192.168.110.1 dev enp0s6

$ ip route show table ChinaEdu
default via 192.168.120.1 dev enp0s7
  • 增加路由原路返回规则,使来自不同的口的走不同的路由表。
$ ip rule add from 192.168.100.212 table ChinaTel
$ ip rule add from 192.168.110.212 table ChinaCnc
$ ip rule add from 192.168.120.212 table ChinaEdu

注意:此处原路是广义上的说法,并不是请求的路径与响应的路径完全相同。

如果要指定规则优先级,可以加上 pref 参数。pref 即路由表内序号,如果不加 pref,则将在已有的规则最小序号前插入。

$ ip rule add from 192.168.100.212/32 table ChinaTel pref 100
  • 查看新增的路由规则
$ ip rule
0:  from all lookup local
32763:  from 192.168.120.212 lookup ChinaEdu
32764:  from 192.168.110.212 lookup ChinaCnc
32765:  from 192.168.100.212 lookup ChinaTel
32766:  from all lookup main
32767:  from all lookup default

如果需要修改某一条路由规则,可根据优先级删除指定路由规则后重新增加:

$ ip rule del prio 32767

至此访问三个网段中的任意一个地址都能够连通了。即便是服务器上本身的默认路由都没有设置,也能够让外面的用户正常访问。如果你要在默认路由表增加一个默认路由,可以使用如下命令:

$ ip route add default via 192.168.100.1 dev enp0s5
$ ip route show table main
default via 192.168.100.1 dev enp0s5
192.168.100.0/24 dev enp0s5  proto kernel  scope link  src 192.168.100.212
192.168.110.0/24 dev enp0s6  proto kernel  scope link  src 192.168.110.213
192.168.120.0/24 dev enp0s7  proto kernel  scope link  src 192.168.120.214

main 表是系统主要的路由表,所有的默认路由规则都写在这个表中。

命令汇总

# 清空路由表ChinaTel
$ ip route flush table ChinaTel
# 为路由表 ChinaTel 添加默认路由 192.168.100.1
$ ip route add default via 192.168.100.1 dev enp0s5 table ChinaTel
# 根据源 IP 决定路由表
$ ip rule add from 192.168.100.212 table ChinaTel

# 清空路由表ChinaCnc
$ ip route flush table ChinaCnc
# 为路由表 ChinaCnc 添加默认路由 192.168.110.1
$ ip route add default via 192.168.110.1 dev enp0s6 table ChinaCnc
# 根据源 IP 决定路由表
$ ip rule add from 192.168.110.212 table ChinaCnc

# 清空路由表ChinaEdu
$ ip route flush table ChinaEdu
# 为路由表 ChinaEdu 添加默认路由 192.168.120.1
$ ip route add default via 192.168.120.1 dev enp0s7 table ChinaEdu
# 根据源 IP 决定路由表
$ ip rule add from 192.168.120.212 table ChinaEdu

测试

验证从 192.168.100.212 的包的路由选择

$ ip route get 8.8.8.8 from 192.168.100.212

# 结果为
8.8.8.8 from 192.168.100.212 via 192.168.100.1 dev enp0s5
cache
  • 验证从 192.168.110.213 的包的路由选择
$ ip route get 8.8.8.8 from 192.168.110.213

# 结果为

8.8.8.8 from 192.168.110.213 via 192.168.110.1 dev enp0s6
cache
  • 验证从 192.168.120.214 的包的路由选择
$ ip route get 8.8.8.8 from 192.168.120.214

# 结果为

8.8.8.8 from 192.168.120.214 via 192.168.120.1 dev enp0s7
cache
  • 外部测试
$ ping  192.168.100.212
$ ping  192.168.110.213
$ ping  192.168.120.214

以上几个 IP 均能 Ping 通。

保存路由设置

以上的路由设置会在系统或网络重启后被清理。因此需要将它保存下来,以防止系统或网络重启后失效。

方法一(推荐)

ip route save 可保存表的信息,如果表的项非常多,这个操作起来非常简单;ip rule 没有专门的保存命令,这里通过脚本实现。

先保存指定路由表的信息,这里以 ChinaTel 为例:

$ ip route save table ChinaTel > /root/route-ChinaTel.rules

恢复时可使用

$ ip route flush table ChinaTel && ip route restore table ChinaTel < /root/route-ChinaTel.rules

对规则的保存可使用以下的小脚本

$ vim ip-rule-dump.sh

#!/bin/sh
# ip-rule-dump.sh
# 参数: table 编号或别名,无参数时 dump 除 local 之外的全部规则

# 获取 table 别名
if [ -n "$1" ]; then
name=$(grep -v '^[[:blank:]]*#' /etc/iproute2/rt_tables |
grep "[[:blank:]]*$1[[:blank:]]" | head -n 1 | awk '{print $2}')
[ -z "$name" ] && name="$1"
fi
[ -z "$name" ] && name=".*"

# 获取并使用别名过滤规则
ip rule show | grep -v  "^0:" | grep -oP "from.*[[:blank:]]$name[[:blank:]]$" |
sed -e 's/lookup/table/g'

给脚本赋予权限并保存指定的路由规则

$ chmod +x ip-rule-dump.sh
$ ./ip-rule-dump.sh ChinaTel > /root/rule-ChinaTel.rules

对规则的恢复可使用以下的小脚本

$ vim ip-rule-restore.sh

#!/bin/sh
# ip-rule-restore.sh
# 参数: dump 文件路径

if [ -n "$1" ] && [ -f "$1" ]; then
cat $1 | while read line; do
sudo ip rule add $line
done
fi

给脚本赋予权限并恢复指定的路由规则

$ chmod +x ip-rule-restore.sh
$ ip rule del table ChinaTel >/dev/null 2>&1 || :
$ ./ip-rule-restore.sh /root/rule-ChinaTel.rules

开机加载

如果需要在网卡准备完成就加载,就需要在 /etc/network/interfaces 的对应网卡上,加上 post-up 的操作了,这里以加载电信路由信息为例:

$ iface enp0s5 inet static
...
post-up ( ip rule del table ChinaTel >/dev/null 2>&1 || : ) && 
bash /root/ip-rule-restore.sh /root/rule-ChinaTel.rules && 
ip route flush table ChinaTel && 
ip route restore table ChinaTel < /root/route-ChinaTel.rules

方法二

直接把命令加入启动脚本中,以防止网络重启或系统重启后配置失效。

配置 networking 启动脚本文件 在结尾 exit 0 之前增加如下内容:

  • 如果是 ubuntu/debian,网络启动脚本是 /etc/init.d/networking

  • 如果是 RedHat/centos,网络启动脚本是 /etc/rc.d/init.d/network

这里以 ubuntu 为例:

$ vi /etc/init.d/networking

ip route flush table ChinaTel
ip route add default via 192.168.100.1 dev enp0s5 table ChinaTel
ip rule add from 192.168.100.212 table ChinaTel
ip route flush table ChinaCnc
ip route add default via 192.168.110.1 dev enp0s6 table ChinaCnc
ip rule add from 192.168.110.212 table ChinaCnc
ip route flush table ChinaEdu
ip route add default via 192.168.120.1 dev enp0s7 table ChinaEdu
ip rule add from 192.168.120.212 table ChinaEdu
exit 0

退出并重启网络测试是否生效

$ /etc/init.d/networking restart

场景二 给指定网段分别设置网关

这种方法使用的是默认路由表,增加到指定网段的路由。

  • 使用 route 指令
$ route add -net 192.168.100.0/24 gw 192.168.100.1 dev enp0s5
$ route add -net 192.168.110.0/24 gw 192.168.110.1 dev enp0s6
$ route add -net 192.168.120.0/24 gw 192.168.120.1 dev enp0s7

参数说明

-net 设置到某个网段的路由

-host 设置到某台主机的路由

gw 出口网关 IP地址

dev 出口网关 物理设备名

  • 使用 ip 指令
# 推荐使用 replace 指令
$ ip route replace  192.168.100.0/24 via 192.168.100.1 dev enp0s5 onlink
$ ip route replace  192.168.110.0/24 via 192.168.110.1 dev enp0s6 onlink
$ ip route replace  192.168.120.0/24 via 192.168.120.1 dev enp0s7 onlink

# 直接使用 add 指令,会报 RTNETLINK answers: File exists 错。如果要使用 add 指令,可先删除原默认的路由规则后再增加。
$ ip route del 192.168.100.0/24
$ ip route add 192.168.100.0/24 via 192.168.100.1 dev enp0s5 onlink

注意:一块网卡只能设置一个网关,多个网关会发生冲突而无法成功配置。

如需增加默认路由,可使用以下指令:

  • 使用 route 指令
$ route add default gw 192.168.100.1 dev enp0s5
  • 使用 ip 指令
$ ip route add  default via 192.168.100.1 dev enp0s5

如有多余的配置,可使用下面的命令进行删除路由。

  • 使用 route 指令
$ route del -net 192.168.100.0/24 gw 192.168.100.1

或者

$ route del -net 192.168.100.0/24 dev enp0s5
  • 使用 ip 指令
$ ip route del 192.168.100.0/24

在Linux中查找用户帐户信息和登录详细信息的11种方法

本文将介绍 11 种在 Linux 系统查找用户相关信息的有用方法。这里,我们会讲解在系统中获取一个用户账户详细信息、展示登录详细信息以及用户行为数据的命令。

如果你想要在 Linux 中添加用户,可以使用 useradd 工具,如果希望修改一个现有用户账户的属性,就可使用下面的指南中所提到的 usermod 命令:

➤ 关于 useradd 命令的 15 个实用示例

The Complete Guide to “useradd” Command in Linux – 15 Practical Examples

➤ 关于 usermod 命令的 15 个实用示例

A Complete Guide to Usage of ‘usermod’ command – 15 Practical Examples with Screenshots

首先,我们会来看看如何使用命令查找一个用户的账户信息,然后再来跟大家讲解查看登录详细信息的那些命令。

1. id 命令

id 是用来展示一个实时活动用户以及组 ID 的命令行工具,如下所示:

$ id tecmint uid=1000(tecmint) gid=1000(tecmint) groups=1000(tecmint),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),130(sambashare) 

2. groups 命令

groups 命令可以被用来展示一个用户所归属的所有组的信息,像下面这样:

$ groups tecminttecmint : tecmint adm cdrom sudo dip plugdev lpadmin sambashare 

3. finger 命令

finger 命令可以被用来查找 Linux 上的一个用户的信息。在许多 Linux 系统上,它并没被预装。
想要在你的系统上安装它,可以在终端里运行这个命令:

$ sudo apt install finger#Debian/Ubuntu 

$ sudo yum install finger#RHEL/CentOS 

$ sudo dnf install finger#Fedora 22+  

它会显示出一个用户的真实名称、主目录、shell,登录的名称以及时间,还有如下所示的许多信息:

$ finger tecmintLogin: tecmint        Name: TecMint 
Directory: /home/tecmint            Shell: /bin/bash 
On since Fri Sep 22 10:39 (IST) on tty8 from :0 
2 hours 1 minute idle 
No mail. 
No Plan.  

4. getent 命令

getent 是一个可以从特定系统数据库的 Name Service Switch (NSS 名字服务交换器) 库获取到信息的命令行工具。
要获取一个用户账户的详细信息,可以像下面这样使用 passwd 数据库和 username 来做到。

$ getent passwd tecminttecmint:x:1000:1000:TecMint,,,:/home/tecmint:/bin/bash 

5. grep 命令

grep 命令是一个强大的模式搜索工具,可以在绝大多数 Linux 系统上使用。你可以用它来从系统账户文件 /etc/passwd 中查找出关于一个特定用户的信息,如下所示:

$ grep -i tecmint /etc/passwdtecmint:x:1000:1000:TecMint,,,:/home/tecmint:/bin/bash

6. lslogins 命令

lslogins 命令会展示出系统中现有用户的相关信息, -u 标记可用来标识只展示用户的账户。

$ lslogins -uUID USER       PROC PWD-LOCK PWD-DENY LAST-LOGIN GECOS 
0 root        144                              root 
1000 tecmint      70                     10:39:07 TecMint,,, 
1001 aaronkilik    0                               
1002 john          0                              John Doo  

7. users 命令

users 命令会展示当前已经登录系统的所有用户的用户名,像这样:

$ userstecmint 

aaron  

8. who 命令

who 命令可以用来展示那些登录了系统的用户,包括了它们是从哪里连接到系统上来的终端信息。

$ who -utecmint tty8 2017-09-22 10:39 02:09 2067 (:0) 

9. w Command

w 命令会展示出所有登录了系统的用户,还有它们都做了些什么事情。

$ w12:46:54 up  2:10,  1 user,  load average: 0.34, 0.44, 0.57 
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT 
tecmint  tty8     :0               10:39    2:10m  4:43   0.46s cinnamon-sessio  

10. last 或者 lastb 命令

last/lastb 命令会展示一个最近登录系统的用户列表。

$ last OR$ last -a #show hostname on the last column 

最近登录系统的用户列表

tecmint  tty8         Fri Sep 22 10:39    gone - no logout  :0 
reboot   system boot  Fri Sep 22 10:36   still running      4.4.0-21-generic 
tecmint  tty8         Thu Sep 21 10:44 - down   (06:56)     :0 
reboot   system boot  Thu Sep 21 10:42 - 17:40  (06:58)     4.4.0-21-generic 
tecmint  tty8         Wed Sep 20 10:19 - down   (06:50)     :0 
reboot   system boot  Wed Sep 20 10:17 - 17:10  (06:52)     4.4.0-21-generic 
tecmint  pts/14       Tue Sep 19 15:15 - 15:16  (00:00)     tmux(14160).%146 
tecmint  pts/13       Tue Sep 19 15:15 - 15:16  (00:00)     tmux(14160).%145 
...

要是想显示那些在特定时间访问过系统的用户,可以像下面这样使用 -p 选项:

$ last -ap nowtecmint  tty8         Fri Sep 22 10:39    gone - no logout  :0 
reboot   system boot  Fri Sep 22 10:36   still running      4.4.0-21-generic 
wtmp begins Fri Sep  1 16:23:02 2017  

11. lastlog 命令

lastlog 命令可以用来查找最近登录那些或者某个特定用户的详细信息,如下所示:

$ lastlog OR$ lastlog -u tecmint #show lastlog records for specific user tecmint 

最近登录用户的记录:

Username         Port     From             Latest 
root                                       **Never logged in** 
kernoops                                   **Never logged in** 
pulse                                      **Never logged in** 
rtkit                                      **Never logged in** 
saned                                      **Never logged in** 
usbmux                                     **Never logged in** 
mdm                                        **Never logged in** 
tecmint          pts/1    127.0.0.1        Fri Jan  6 16:50:22 +0530 2017 
..

如果你还知道其它的什么命令行技巧或者是某个查看用户详情的命令,可以跟我们共享一下哦。

linux下编译安装php7

1、从官网下载PHP安装包

wget http://hk2.php.net/get/php-7.1.8.tar.bz2/from/this/mirror

2、下载下来的文件为mirror镜像,通过mv命令重命名成tar.bz2文件

mv mirror php-7.1.8.tar.bz2

3、解压压缩文件

tar jxf php-7.1.8.tar.bz2

4、安装php所需的依赖扩展和程序

yum install gd zlib zlib-devel openssl openssl-devel libxml2 libxml2-devel libjpeg libjpeg-devel libpng libpng-devel

5、安装前配置,注意–enable-fpm为必须,在linux系统中php作为一个单独的进程存在

./configure --prefix=/usr/local/php7.1.8/ 
    --with-gd 
    --enable-gd-native-ttf 
    --enable-mysqlnd 
    --with-mysql=mysqlnd 
    --with-pdo-mysql=mysqlnd 
    --with-openssl 
    --enable-mbstring 
    --enable-fpm

6、编译安装

make && make install

每个开发者应该了解的 10 个 Linux 命令

作为一名软件工程师,我做过的最明智的投资就是学习 Linux。因为,在日常工作中,我们会经常与 Linux 系统打交道。而今天,作为一名 30 多岁的工程师,我仍受益于几年前我碰巧学过的那些知识,所以技术学习需要不断积累,不积跬步无以至千里。另外,在另一篇博客文章中,我将更详细地解释为什么 Linux 对于软件开发人员来说更加务实。

在本文中,我将分享一些小众却十分有用的 Linux 命令。如果你使用 Macbook,那刚刚好。因为我推荐的大多数命令也能应用于 OSX 系统。

10. file

返回给定信息的类型。例如,你可以输出图像的尺寸信息:

file logo.png

返回:

> PNG image data, 16 x 16, 8-bit/color RGBA, non-interlaced

9. iotop, powertop, nethogs

你将如何监控 Linux 系统中发生的状况? 这三个命令可以解决你的燃眉之急。

  • Iotop:通过磁盘写入对进程排序,并显示程序写入到磁盘的数量与频次。
  • Powertop:监控程序的电源使用情况。如果你无法及时充电时,这个命令就很重要了。
  • Nethogs:列出每个进程所使用的带宽。

8. tee

将数据重定向到给定文件和屏幕上。例如,添加一个新的条目到 hosts 文件:

echo "127.0.0.1 foobar" | sudo tee -a /etc/hosts

7. pidof, kill 和 pkill

这三条重要的命令将帮助你控制系统中运行的程序。

Pidof:输出正在运行程序的进程 ID。例如,以下命令将输出 nginx 的进程 ID:

pidof nginx

你还可以通过 kill 命令,以及相应的数字来终止 nginx 进程:

kill -USR2 $(pidof nginx)'

pkill 是一个快捷命令,可以按照进程名称终止所有的进程:

pkill -f nginx

6. tmux

如果你还没有安装 tmux 的话,我极力推荐你安装它。Tmux 是一款优秀的终端中的窗口和会话管理器。译者注:如果你想详细了解 Tmux,参见本篇文章。

5. tree

以树状结构列出目录内容。同时,通过设置相应的参数还可以只显示目录名称:

tree -d

4. find

当我们在指定目录下寻找具体文件时,这个命令将帮你大忙。我将在这里介绍几个简单的用例:

示例 1 – 列出所有的 CSS 文件(包括子目录):

find . -type f -name "*.css"

示例 2 – 列出所有的 CSS 与 HTML 文件:

find . -type f ( -name "*.css" -or -name "*.html" )

3. htop

Htop 是一个著名的进程查看器。它拥有漂亮、多彩的命令行界面,以及一些实用的字母快捷键:

  • – 增量进程过滤器;
  • / – 搜索进程;
  • , – 选择排序标准;
  • k – 终止进程;
  • u – 筛选某一特定用户进程;
  • t – 显示/隐藏树形结构;
  • 和 + – 展开/折叠选定的进程树;
  • H – 显示/隐藏用户线程。

2. chroot

这个命令的神奇之处在于,它可以帮助你在指定目录中打开新的 TTY 。那么,你就可以创建一个文件夹,在其中设置新的 Linux 系统,并随时切换到该“子系统”。

1. dialog

方便与用户交互的简易命令。例如,下面的命令就显示了一个漂亮的输入框:

dialog --title "Oh hey" --inputbox "Howdy?" 8 55

上述介绍的大多数命令都可应用在 OSX 系统上,并且支持许多其他类型的对话:消息框、菜单、确认对话框、进度条等。另外,我所编写《 Happy Hacking Linux 》 (http://azer.bike/happy-hacking-linux/) 的安装向导中也应用了上述相关命令。

Linux上Raid卡的简单配置与使用

使用 RAID 可以提高服务器的性能。不同 RAID 的级别,性能会有所不同。它通过容错和高可用性来保存我们的数据。

下面记录在linux上配置和使用raid卡的过程。

资源

  1. Linux主机
  2. Raid卡(LSI MegaRAID SAS 9271-8i)
  3. 两块希捷1T机械硬盘

工具

  1. Raid工具:MegaCli64或storcli64
  2. fdisk(分区)
  3. mkfs(格式化分区文件系统)
  4. df(查看分区挂载情况)

Raid卡真容

未分类

Raid卡

图中蓝线框出的两个插口是MinSATA的插口,可以连接Mni SATA转接线,接硬盘数据口和备用电源。

未分类

Mini SATA接口线(不是我的手)

安装

未分类
安装结构图

RAID卡插在PCI的扩展槽上,Mini SATA转接线中的数据口接在硬盘上,同时硬盘接电源,转接线的电源线可以不用(备用电源线)。

至此硬件安装基本完成。
要想RAID卡工作还有必不可少的一步就是安装驱动,这里涉及到Linux的Kernel的编译问题。在较新的Kernel中大多已经集成了RAID驱动,这里我们从新编译一下。
cd到Kernel源码目录执行:

make menuconfig

要编译Raid驱动,依赖PCI模块,所以我们需要把PCI support 模块编译进内核。

未分类

进入PCI配置

未分类

按Y选择编译PCI support

之后在”Device Drivers” >>”SCSI device support”>>”SCSI low-level drivers”下在 “LSI Logic MegaRAID SAS RAID Module”上按Y,把此模块编译进kernel中。
最后执行以下命令编译内核

make -j 9

之后改一下grub配置,上传编译好的内核文件,改好启动引导之后就可以重启设备了,不出意外将会系统启动前看到Raid初始化的打印输出。
开机之后运行以下命令可以查看Raid卡参数:

storcli64 /c0 show all#或MegaCli -AdpAllInfo -aAll

双盘创建Raid1:

storcli /c0 add vd raid1 drives=252:5,7 pdperarray=2

创建好之后先用fdisk做好分区然后用mkfs命令格式化分区文件系统,之挂载分区就行了。

后记:

其实搞硬件,最重要的一步就是硬件设备安装的时候一定要装好,要不然….