Linux常用的一些配置

date
Dec 23, 2021
slug
linux
status
Published
tags
Linux
Nginx
summary
Linux
type
Post
 

用户相关

修改密码

passwd  # 默认修改root
passwd wangjiahao # 修改指定用户

创建用户

adduser wangjiahao
passwd wangjiahao

添加docker执行权限

# 将普通用户加入docker组
gpasswd -a $USER docker
# 刷新docker组
newgrp docker
# 重启docker
systemctl restart docker

禁止root用户远程登录

# 修改配置文件
vim /etc/ssh/sshd_config
# 修改
PermitRootLogin no 
# 重启
service sshd restart

设置链接超时

# 修改配置文件
vim /etc/ssh/sshd_config

ClientAliveInterval 600 # 指定服务器向客户端检测是否活动状态的间隔时间,默认为0,将它修改为60,就是每60秒检测一次。
ClientAliveCountMax 3 # 指定服务器向客户端检测无响应最大次数,达到次数断开连接,默认为3,该项无需修改。
# 重启
service sshd restart

修改hostname

vim /etc/hostname # 修改
reboot # 重启

离线下载yum包

应用场景
通常生产环境由于安全原因都无法访问互联网。此时就需要进行离线安装,主要有两种方式:源码编译、rpm包安装。源码编译耗费时间长且缺乏编译环境,所以一般都选择使用离线 rpm 包安装。
  1. 需要安装yumdownload软件
  1. destdir后要写下载的包放到的位置
  1. 后面跟下载的软件,这样就会把这个软件的依赖一同下载
可以使用“yum deplist”命令来查找 rpm 包的依赖列表。例如,要查找“ansible”rpm的依赖包:
yum deplist ansible
软件包:ansible.noarch 2.9.3-1.el7
依赖:/usr/bin/env
provider: coreutils.x86_64 8.22-24.el7
依赖:/usr/bin/python2
provider: python.x86_64 2.7.5-86.el7
依赖:PyYAML
provider: PyYAML.x86_64 3.10-11.el7
依赖:python(abi) = 2.7
provider: python.x86_64 2.7.5-86.el7
依赖:python-httplib2
provider: python-httplib2.noarch 0.9.2-1.el7
依赖:python-jinja2
provider: python-jinja2.noarch 2.7.2-4.el7
依赖:python-paramiko
provider: python-paramiko.noarch 2.1.1-9.el7
依赖:python-setuptools
provider: python-setuptools.noarch 0.9.8-7.el7
依赖:python-six
provider: python-six.noarch 1.9.0-2.el7
依赖:python2-cryptography
provider: python2-cryptography.x86_64 1.7.2-2.el7
依赖:python2-jmespath
provider: python2-jmespath.noarch 0.9.0-3.el7
依赖:sshpass
provider: sshpass.x86_64 1.06-2.el7

方案一(推荐):repotrack

# 安装yum-utils
yum -y install yum-utils
# 下载 ansible 全量依赖包
repotrack ansible

方案二:yumdownloader

# 安装yum-utils
yum -y install yum-utils
# 下载 ansible 依赖包
#参数说明:
#—destdir:指定 rpm 包下载目录(不指定时,默认为当前目录)
#—resolve:下载依赖的 rpm 包。
# 仅会将主软件包和基于你现在的操作系统所缺少的依赖关系包一并下载。
yumdownloader --resolve --destdir=/tmp ansible
# 离线安装
$ rpm -Uvh --force --nodeps *.rpm

方案三:yum 的 downloadonly 插件

# 安装插件
yum -y install yum-download
# 下载 ansible 依赖包
yum -y install ansible --downloadonly --downloaddir=/tmp

注意

与 yumdownloader 命令一样,也是仅会将主软件包和基于你现在的操作系统所缺少的依赖关系包一并下载。

离线安装 rpm

# 离线安装
rpm -Uvh --force --nodeps *.rpm
参考资料
  • https://serverfault.com/questions/470964/yumdownloader-vs-repotrack

找不到命令了

export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin
export PATH=/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:/bin:/sbin
source /etc/profile
 

find

 

文件统计

 
1、统计当前目录下文件的个数(不包括目录)
ls -l | grep "^-" | wc -l
2、统计当前目录下文件的个数(包括子目录)
ls -lR| grep "^-" | wc -l
3、查看某目录下文件夹(目录)的个数(包括子目录)
ls -lR | grep "^d" | wc -l
4、统计当前文件夹下叫某某的文件的数量
find . -name filename | wc -l
5、统计当前文件夹下指定类型的文件的数量
例如这里需要找 js 文件的数量:
find -name "*.js" | wc -l
6、 快速查看文件名
ll -1 -f
这里再对使用到的 3 个命令做个介绍。
1、ls -l
长列表输出该目录下文件信息(注意这里的文件是指目录、链接、设备文件等),每一行对应一个文件或目录,ls -lR 是列出所有文件,包括子目录。
2、grep “^-”
过滤ls的输出信息,只保留一般文件,只保留目录是 grep “^d”。
3、wc -l
统计输出信息的行数,统计结果就是输出信息的行数,一行信息对应一个文件,所以就是文件的个数。

安装Clash

 
gunzip clash-linux-amd64-v1.10.0.gz
sudo mv clash-linux-amd64-v1.10.0 /usr/local/bin/clash
sudo chmod +x /usr/local/bin/clash
mkdir /ect/clash

## 然后吧yaml和Country.mmdb 放到/ect/clash下面 ,
## 如果电脑本身没梯子,容易下载出错,所以建议是拖上来。避免错误
ls
Country.mmdb config.yaml
# 当这两个文件都下载好了就行了

## 新增clash系统服务
vim /etc/systemd/system/clash.service
#放入如下内容
[Unit]
Description=Clash Daemon
After=network.target

[Service]
Type=simple
Restart=always
ExecStart=/usr/local/bin/clash -d /etc/clash/

[Install]
WantedBy=multi-user.target
启用 clash service:
sudo systemctl enable clash.service  #设置开机自启动
sudo systemctl daemon-reload
sudo systemctl start clash.service  #手动启动
去GitHub下载最新版yacd
# 解压
tar -xvJf yacd.tar.xz
# 并改名为dashboard。
mv public dashboard
config.yaml加入以下配置
external-controller: :9090
# 您可以将静态网页资源(如 clash-dashboard)放置在一个目录中,clash 将会服务于 `${API}/ui`
# 参数应填写配置目录的相对路径或绝对路径。
external-ui: 'dashboard' 
# RESTful API 的口令 (可选)
secret: "123456"
重启服务
systemctl restart clash
访问页面:ip:9090/ui就可以看到控制台了

# 新增配置
sudo vim .bashrc

function proxy_off() {
	unset http_proxy
	unset https_proxy
	unset no_proxy
	echo -e "Proxy Off"
}

function proxy_on(){
	export http_proxy="http://127.0.0.1:7890"
	export https_proxy=$http_proxy
	export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
	echo -e "Proxy On"
}

source .bashrc  #使配置生效
proxy_on 开启代理 proxy_off 关闭代理
 
 

查看cpu信息

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 
# 总逻辑CPU= 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
 
 

linux ulimit 和 fs.file-max

概要:
文件句柄:在 Linux 环境中,任何事物都是用文件来表示,设备是文件,目录是文件,socket 也是文件。用来表示所处理对象的接口和唯一接口就是文件。应用程序在读/写一个文件时,首先需要打开这个文件,打开的过程其实质就是在进程与文件之间建立起连接,句柄的作用就是唯一标识此连接。此后对文件的读/写时,目标文件就由这个句柄作为代表。最后关闭文件其实就是释放这个句柄的过程,使得进程与文件之间的连接断开。
 
Linux/proc/sys/fs/file-max 决定了当前内核可以打开的最大的文件句柄数。
linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够。这就需要修改ulimit和file-max。特别是提供大量静态文件访问的web服务器,缓存服务器(如squid), 更要注意这个问题。 网上的教程,都只是简单说明要如何设置ulimit和file-max, 但这两者之间的关系差别,并没有仔细说明。
说明:
  1. file-max的含义。man proc,可得到file-max的描述: /proc/sys/fs/file-max This file defines a system-wide limit on the number of open files for all processes. (See also setrlimit(2), which can be used by a process to set the per-process limit, RLIMIT_NOFILE, on the number of files it may open.) If you get lots of error messages about running out of file handles, try increasing this value: 即file-max是设置 系统所有进程一共可以打开的文件数量 。同时一些程序可以通过setrlimit调用,设置每个进程的限制。如果得到大量使用完文件句柄的错误信息,是应该增加这个值。 也就是说,这项参数是系统级别的。
  1. ulimit Provides control over the resources available to the shell and to processes started by it, on systems that allow such control. 即设置当前shell以及由它启动的进程的资源限制。 显然,对服务器来说,file-max, ulimit都需要设置,否则就可能出现文件描述符用尽的问题

查看当前的值:

cat /proc/sys/fs/file-max
这个值在kernel的文档里是这样描述的:
The valuein  file-max  denotes  the  maximum numberof filehandles that the
Linux kernel will allocate.When youget a lotoferror messages about running
outof  filehandles, you might wantto raise this limit. Thedefault value is
10%of  RAMin kilobytes.To  change it, just  write the new numberinto the
file:
意思是file-max一般为内存大小(KB)的10%来计算,如果使用shell,可以这样计算:
grep -r MemTotal /proc/meminfo | awk '{printf("%d",$2/10)}'
一般我们不需要主动设置这个值,除非这个值确实较小(可能有各种其他原因导致file-max没有设置为内存的10%)

如何查看当前kernel的句柄:

cat /proc/sys/fs/file-nr
file-nr在内核文档里得解释如下:
Historically, the three valuesin file-nr denoted the numberof allocated file
handles,  the numberof  allocated but  unused filehandles, and  the maximum
numberof filehandles. Linux 2.6 always  reports 0as the numberof free file
handles -- this  is not anerror,  it just means that the  numberof allocated
filehandles exactly matches the numberof used filehandles.
max-file:表示系统级别的能够打开的文件句柄①的数量。是对整个系统的限制,并不是针对用户的。 ulimit -n:控制进程级别(比如 Nginx 进程、MySQL 进程)能够打开的文件句柄的数量。提供对 shell 及其启动的进程的可用文件句柄的控制。这是进程级别的。 一边情况下,服务器上的 ulimit 都需要我们自己设置,而不能使用系统默认的,否则会出现文件描述符耗尽的问题。文件句柄达到上限之后的常见错误有:Too many open files 或者 Socket/File: Can’t open so many files 等。
查看 max-file
$ sysctl -a | grep 'fs.file-max'
fs.file-max = 6553560

$ cat /proc/sys/fs/file-max
6553560
设置的方式有两种,一种是临时生效,重启后恢复默认。另一种永久生效。
file-max 的修改:
# echo 102400 > /proc/sys/fs/file-max 
# sysctl -w "fs.file-max=102400"

# 前面2种重启机器后会恢复为默认值
或
vim /etc/sysctl.conf
# 加入以下内容,重启生效
fs.file-max=102400
net.nf_conntrack_max = 1024000
net.netfilter.nf_conntrack_max = 1024000
# 立即生效,此方式永久生效
$ sysctl -p 
ulimit open files  修改:
// 这只是在当前终端有效,退出之后,open files 又变为默认值。当然也可以写到 /etc/profile 中,因为每次登录终端时,都会自动执行 /etc/profile
$ ulimit -HSn 102400// 加入以下配置,重启即可生效
$ vim /etc/security/limits.conf  
* soft nofile 102400 
* hard nofile 102400

// 如果需要设置当前用户 session 立即生效,可以执行:
$ ulimit -n 102400 
附录: 附录1. 为了让一个程序的open files数目扩大,可以在启动脚本前面加上ulimit -HSn 102400命令。但当程序是一个daemon时,可能这种方法无效,因为没有终端。
附录2. 如果某项服务已经启动,再动态调整ulimit是无效的,特别是涉及到线上业务就更麻烦了。 这时,可以考虑通过修改/proc/’程序pid’/limits来实现动态修改!!!

© WangJiaHao 2022