基本命令
常用命令
- 安装RZ SZ文件传输命令
yum -y install lrzsz
- 安装netstat命令
yum install net-tools
- 安装telnet命令
yum install telnet
- 查看centos版本号
cat /etc/centos-release
结果:CentOS Linux release 7.6.1810 (Core) - 查看linux版本信息
cat /proc/version
结果:Linux version 3.10.0-957.el7.x86_64 … gcc version 4.8.5 …
CentOS7使用firewalld打开关闭防火墙与端口
启动: systemctl start firewalld
关闭: systemctl stop firewalld
,直接关闭可能不生效,还需要修改配置文件
查看状态: systemctl status firewalld
开机禁用: systemctl disable firewalld
开机启用: systemctl enable firewalld
注销: systemctl mask firewalld
,注销服务,无法start
反注销: systemctl unmask firewalld
显示参数:systemctl show firewalld
查看所有项目:systemctl list-units --type=service -all
那怎么开启一个端口呢:
- 添加:
firewall-cmd --zone=public --add-port=80/tcp --permanent
(–permanent永久生效,没有此参数重启后失效) - 重新载入:
firewall-cmd --reload
- 查看:
firewall-cmd --zone= public --query-port=80/tcp
- 查看开启端口:
firewall-cmd --zone=public --list-ports
删除端口: firewall-cmd --zone= public --remove-port=80/tcp --permanent
乱码解决
- 查看当前语言:
locale
或者echo $LANG
en_US.UTF-8也能够支持中文显示的。 - CRT设置语言: 选项→会话选项→终端→外观→字符编码→UTF-8
- 然后通过CRT写入中文,就不会显示乱码
- 可以给系统安装个中文语言包:
yum groupinstall chinese-support
语言说明:
en_US.UTF-8:你说英语,你在美国,字符集是utf-8
zh_CN.UTF-8:你说中文,你在中国,字符集是utf-8
如果你的LANG环境变量是en_US.UTF-8,那么系统的菜单、程序的工具栏语言、输入法默认语言就都是英文的。
如果你的LANG环境变量是zh_CN.UTF-8,那么系统的菜单、程序的工具栏语言、输入法默认语言就都是中文的。
软件安装
普通用户是无法使用yum进行安装软件的,直接下载RPM包也是不行的,因为要写到/bin /usr等目录。可以通过解压出来,再在vim ~/.bashrc
添加环境变量来操作。
处于安全考虑需要非root启动,避免比如tomact等程序被外部攻击获取到root权限:可以使用root用户安装软件,然后授权给非root用户运行使用。
版本升级
小版本升级-补丁版本
1 | sudo yum list kernel |
大版本升级-内核版本
1 | 载入公钥 |
其他应用
查看定时器
1 | crontab -l # 查看定时任务 |
防火墙
添加防火墙需要非常小心,如果是远程连接很可能导致无法连接上,必须到机房进行登录操作。阿里云等云服务器都有安全策略也可以添加一些过滤
1 | systemctl status firewalld # 查看firewall服务状态 |
增加访问控制
限制shh可以登录root的ip地址
1 | vi /etc/ssh/sshd_config |
openssh
服务器openssh版本升级后客户端工具的版本也要升级,不然可能导致无法连接
nmap工具
主机发现,端口扫描,应用与版本侦测,操作系统侦测
1 | nmap localhost # 查看本机端口 |
系统配置
文件描述符
linux系统对文件描述符的限制有两个级别
系统级别:使用cat /proc/sys/fs/file-max查看,默认值是根据内存大小,系统自动设置的,一般为内存大小(KB)的10%,可能有各种其他原因导致file-max没有设置为内存的10%
用户级别:默认是1024,使用ulimit -n
查看。ulimit -a
查看所有限制信息
1 | core file size (blocks, -c) unlimited |
为什么需要文件描述符?
原因1 – 资源问题:每个打开的文件都需要消耗内存来管理,而内存是有限的。
原因2 – 安全问题:如果不限制的话,有不怀好心的人启动一个进程来无限的创建和打开新的文件,会让服务器崩溃。
所以限制文件描述符的数量对于linux系统的稳定性是非常重要的
hard和soft的区别: soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错,一般情况下都是设为同一个值
core是内核文件,nofile是文件描述符,noproc是进程,一般情况下只限制文件描述符数和进程数就够了
vi /etc/security/limits.conf
,配置打开文件数、内存限制等。This file sets the resource limits for the users logged in via PAM.It does not affect resource limits of the system services.
1
2
3
4
5
6* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
* soft memlock unlimited
* hard memlock unlimited
查看系统当前打开的文件描述符数量sudo cat /proc/sys/fs/file-nr
查看某个进程打开的文件描述符数量(list open files)lsof -p 12324 |wc -l
查看进程打开文件描述符数量排序lsof -n |awk '{print $1}'|sort |uniq -c |sort -nr|head -10
内核参数
/etc/sysctl.conf
1 | kernel.sysrq = 0 # 是否启用kernel.sysrq(在大多数服务已无法 响应的情况下,还能通过按键组合来完成一系列 预先定义的系统操作,1启用,0禁用; |
sysctl -p
更新配置
cat /proc/sys/fs/nr_open
一个进程可以打开的文件个数 默认1048576,可以修改,正常够用cat /proc/sys/fs/file-nr
其中第一个数表示当前系统已分配使用的打开文件描述符数,为第二个数已经分配但未使用的文件描述符数,第三个数等于file-max
- 所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max
- 单个进程打开的文件描述符数不能超过user limit中nofile的soft limit
- nofile的soft limit不能超过其hard limit
- nofile的hard limit不能超过/proc/sys/fs/nr_open
用户信息查看
1 | cat /etc/passwd |
- 用户名 (mongod): 已创建用户的用户名,字符长度 1 个到 12 个字符。
- 密码(x):代表加密密码保存在
/etc/shadow
文件中。 - 用户 ID(981):代表用户的 ID 号,每个用户都要有一个唯一的 ID 。UID 号为 0 的是为 root 用户保留的,UID 号 1 到 99 是为系统用户保留的,UID 号 100-999 是为系统账户和群组保留的。
- **群组 ID **(975):代表群组的 ID 号,每个群组都要有一个唯一的 GID ,保存在
/etc/group
文件中。 - 用户信息(mongod):代表描述字段,可以用来描述用户的信息。
- 家目录(/var/lib/mongo):代表用户的家目录。
- Shell(/bin/false):代表用户使用的 shell 类型。
脚本命令
/dev/null
受一切输入它的数据并丢弃这些数据。通常被当做垃圾桶来用。尝试从/dev/null读取数据,会立刻得到一个EOF。0代表标准输入流(stdin),1代表标准输出流(stdout),2代表标准错误流(stderr)。2> /dev/null
代表忽略错误信息。将stderr转换成stdout,cmd > output.txt 2>&1
使得stderr和stdout都被重新定向到同一个文件中,比如kill一个不存在的进程kill 2222211 > output.txt 2>&1
。
指定用户执行程序
runuser [选项] -u
su [选项] [-] [USER [参数]…]
sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
1 | sudo -H -u aiot /bin/bash -c "top" # 查看内存命令。可以后台运行的命令执行"xxx &"进行后台运行 |
查看目标文件是否包含某字符串
1 | grep abcd fff.txt >/dev/null && echo 'yes' # 命令执行 |
判断用户是否存在脚本
1 | !/bin/bash |
问题排查
进程无故消失
- 先查看相关日志:
grep -i kill /var/log/message*
服务锁定与解除锁定
systemctl mask firewalld
systemctl unmask firewalld
ping丢包
arp -a
查看IP地址有没冲突,ping的ip的mac地址与目标的是否相同。顺便让路由器记住这个ip。重启虚拟机,或者给虚拟机重新生成一个MAC。
windowstracert www.baidu.com
tracert 192.168.11.11
linux traceroute
route -n
查看路由表
可能是中间经过的路由器有问题。
ssh无法登录
各种尝试比如修改配置,修改密码都不行的话进行重新安装
1 | yum remove openssh* |
安装系统
硬盘分区:
1 | swap : 交换分区内存的2倍 |
开发生产环境不要用root用户,分配创建普通用户使用(根据具体需求可以授权管理员权限)。安全方面考虑与系统内不同软件的用户名最好不要相同,还要禁止root登录、禁止su到root。
数据库安装,比如oracle、mysql都有各自的用户,得在root用户下安装,各自用各自的用户启动程序。对于tomcat以及其他第三方中间程序可以使用自己建的普通用户启动运行。用户名使用一些无关的,密码使用复杂的无关组合。
一般情况下没必要/,home目录分别分配空间,都给/就行了,大部分程序还是在/下的,而且大家都能用。
文件系统选择说明
ext4是第四代扩展文件系统(英语:Fourth EXtended filesystem,缩写为ext4)是linux系统下的日志文件系统,是ext3文件系统的后继版本
ext4的文件系统容量达到1EB,而文件容量则达到16TB,这是一个非常大的数字了。对一般的台式机和服务器而言,这可能并不重要,但对于大型磁盘阵列的用户而言,这就非常重要了。
ext3目前只支持32000个子目录,而ext4取消了这一限制,理论上支持无限数量的子目录
xfs是一种非常优秀的日志文件系统,它是SGI公司设计的。xfs被称为业界最先进的、最具可升级性的文件系统技术
xfs是一个64位文件系统,最大支持8EB减1字节的单个文件系统,实际部署时取决于宿主操作系统的最大块限制。对于一个32位Linux系统,文件和文件系统的大小会被限制在16TB
xfs在很多方面确实做的比ext4好,ext4受限制于磁盘结构和兼容问题,可扩展性和scalability确实不如xfs,另外xfs经过很多年发展,各种锁的细化做的也比较好
centos添加用户并赋予管理员权限
1 | 1、新建用户,这里新建一个test的用户 |
修改ssh端口号
vi /etc/ssh/sshd_config
1
2
3
4
Port 22 # 先保留22等新端口确定可用后再注释掉重启服务,以防万一
Port 2288 # 新增一个ssh端口
AddressFamily any- 防火墙放行
1
2firewall-cmd --zone=public --add-port=2288/tcp --permanent
firewall-cmd --reload - SELinux添加ssh端口
1
2
3
4yum provides semanage # 安装 如果已经存在可以跳过
yum -y install policycoreutils-python # 安装依赖 如果已经存在可以跳过
semanage port -l | grep ssh # 查看
semanage port -a -t ssh_port_t -p tcp 2288 # 添加端口 - 重启
systemctl restart sshd.service
网络配置
- 查看网卡名
1
ip addr # 查看网卡名
- 配置动态获取ip
1
2
3
4
5
6vi /etc/sysconfig/network-scripts/ifcfg-ens198 (网卡名称)
修改:
BOOTPROTO=dhcp
ONBOOT=yes
执行命令
systemctl restart network - 配置静态IP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19vi /etc/sysconfig/network-scripts/ifcfg-ens198 (网卡名称)
修改
BOOTPROTO=static
ONBOOT=yes
末尾添加
IPADDR=192.168.1.123
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8
ip不能用的话ping一下选择没人在占用的ip
重启服务
systemctl restart network
ping
ping x.x.x.x # 或者ping www.baidu.com
RPM依赖包下载
方法1利用”Downloadonly”插件下载 RPM 软件包及其所有依赖包
1 | yum install yum-plugin-downloadonly # 安装插件依赖 |
方法 2 使用 “Yumdownloader”工具来下载 RPM 软件包及其所有依赖包
1 | yum install yum-utils |
gcc 安装例子
1 | [root@localhost ntp-4.2.8p15]# yum install --downloadonly gcc gcc-c++ libstdc++-devel |
1 | error: Failed dependencies: |
不知道依赖关系的可以全部写在同一行里面 rpm -Uvh glibc* gcc* libstdc++* cpp* kernel* libmp* libm* mpfr*
最终步骤
rpm -Uvh libstdc++*
rpm -Uvh kernel* glibc*
rpm -Uvh mpfr* libmpc*
rpm -Uvh cpp* gcc* libgomp*
openssl-devel例子
1 | yum install --downloadonly openssl-devel |
1 | [root@localhost src]# rpm -Uvh libcap-devel-2.22-11.el7.x86_64.rpm |
安装ntp
不能直接使用make后的包,还是得从configure步骤开始,因为不同环境会导致make install执行不过。
我想到一个办法,提高速度,先安装默认的旧版,然后把新版的ntp可执行文件直接覆盖进去就行了。
遇到问题如何解决
主机无法访问?
- 检查防火墙,端口
- 检查程序需要监听的端口是否正确
- 内网换一个服务器试ping一下或者telnet一下
- 还是不行重启一下无法访问的服务器
scp执行拷贝命令 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!错误解决
重装主机导致ssh的认证改变
方法一:
1 | ssh-keygen -R xxx.xxx.xx.xxx(ip) # update一下,如果还是不行,使用下面那个方法 |
方法二:
1 | vim ~/.ssh/known_hosts # 进去删除掉无法连接的主机信息 |
非root用户不能使用低于1024的端口
可以启动一个应用比如tomcat使用8088端口,通过防火墙把80端口转发到8088端口
1 | firewall-cmd --add-masquerade --permanent |
网络问题排查
1 | arping # 可以ping MAC地址。由于arping命令基于ARP广播机制,所以arping命令只能测试同一网段或子网的网络主机的连通性,ping命令则是基于ICMP协议,是可以路由的,所以使用ping命令可以测试任意网段的主机网络连通性。某些环境可能ICMP协议会被禁。地址解析协议,即ARP(Address Resolution Protocol)。是根据IP地址获取物理地址的一个TCP/IP协议,是网络链路层的协议,在局域网中使用。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。广播请求不能出局域网,所以ARP协议只能存在于内网,不能通过路由器。 |
不同程序的用户无法互相访问对方目录
双方加到对方的分组里,组权限加上+rx。默认创建文件的umask一般再tomcat,vsftp,用户bash文件或者环境变量中配置usermod -a -G test nginx
chmod -R g+rwx /home/test/
目录要有x权限,不然程序还是进不去。非常重要
调整LVM分区大小
卸载/home如果报错,就需要kill xxx掉fuser -m /home
列出的进程号去除字符C。
迁移/home目录到根目录
- 在根目录下面建home1
- 复制home目录下文件到home1
- 卸载home
- 重命名home1为home
- etc启动项目注释对home目录磁盘的挂载
阿里云
CentOS7安装图形界面
1 | sudo yum groupinstall "GNOME Desktop" "Graphical Administration Tools" |
CenttOS7增加交换空间
1 | free -h |
查看网络使用情况,带宽是否用完
1 | yum install dstat |
参考
- 各种依赖包下载地址
- centos相关依赖包下载地址
- centos相关依赖包HTTP下载地址
- linux xfs和ext4的区别
- 文件IO详解(二)—文件描述符(fd)和inode号的关系
- 在Btrfs和LVM-ext4之间怎么选择:附详细的高级功能介绍
- Linux的远程传输文件scp及出现Permission denied (publickey).lost connection问题解决方法
- Linux下JDK应该安装在哪个位置
- ARP级ping命令:arping
- /etc/bashrc和/etc/profile傻傻分不清楚?
- linux下 bashrc与profile的区别
- 目录x权限对文件操作的影响
- Centos系统调整LVM卷/home分区到/分区
- Centos6直接升级到CentOS7
- 如何在Linux系统的ECS实例中安装图形界面
- CentOS 7安装Gnome GUI 图形界面
- 阿里云centos安装图形界面,VNC-VIEWER远程连接
- 查看Kafka集群下所有的topic报错“Timed out waiting for a node assignment. Call: listTopics“
- Centos下载地址
- 超详细的CentOS7.4下载与图文安装
- Linux 网络流量监控利器 iftop 中文入门指南