Linux常用命令--常用设置

摘要

  • 安装完linux后,一些常用的设置可以方便我们今后的使用,比如关闭SELinux,增加文件描述符限制,等等。

  • 本文基于CentOS8。

关闭SELinux

  • SELinux(Security-Enhanced Linux)是一种基于安全策略的 Linux 安全模块,其主要目的是提供对各种应用程序和进程的更细粒度的访问控制。

  • SELinux 的安全方案主要基于以下两个策略:

    • 强制访问控制(Mandatory Access Control, MAC):MAC 策略不允许用户在他们拥有的文件和进程上设置安全访问控制,而是根据一个由系统管理员和/或操作系统开发商定义的集中安全策略进行访问控制。
    • 类型强制访问控制(Type Enforcement):通过将文件、目录和其他资源分配到类型,并定义它们之间的交互,限制进程在资源之间的信息流。
  • 在实际工作中,SELinux 可以用来阻止或限制恶意或损坏的应用程序对系统造成的损害。当配置正确时,SELinux 提供的强大安全机制可以显著提高系统的安全性。

  • 但是,SELinux 也可能会带来一些问题,例如,它可能会导致某些应用程序无法正常工作,或者它可能会在某些情况下导致性能下降。因此,许多 Linux 发行版默认会关闭 SELinux,以避免这些问题。

  • 通过以下命令,可以查看当前的 SELinux 状态:

1
2
# 如果当前状态为 Enforcing,表示 SELinux 已启用,否则为 Disabled。
$ sestatus
  • 临时关闭 SELinux,可以使用以下命令:

1
$ setenforce 0
  • 永久关闭 SELinux,可以使用以下命令:

1
2
3
4
5
6
$ vi /etc/selinux/config
# 在文件中找到以下行,将值改为 disabled。
SELINUX=disabled

# 重启系统,SELinux 就会关闭。
$ reboot
  • 临时开启 SELinux,可以使用以下命令:

1
$ setenforce 1
  • 永久开启 SELinux,可以使用以下命令:

1
2
3
4
5
6
$ vi /etc/selinux/config
# 在文件中找到以下行,将值改为 enforcing。
SELINUX=enforcing

# 重启系统,SELinux 就会开启。
$ reboot

增加文件描述符限制

  • 每个运行中的进程都有一个限制,即它可以同时打开的最大文件描述符数量。这个限制对于避免过度使用系统资源非常重要。然而,在某些情况下,你可能需要增加这个限制来满足应用的需求。

  • Linux 服务器默认的文件描述符限制为 1024,如果需要使用更多的文件描述符,可以使用以下命令来增加限制:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 临时设置,即刻生效
ulimit -n 65535

# 永久设置
$ vi /etc/security/limits.conf
# 在文件中找到以下行,将值改为 65535
# 如果不存在对应的配置则在文件末尾添加即可
# root用户限制
root soft nofile 65535
root hard nofile 65535
# 其它用户限制
* soft nofile 65535
* hard nofile 65535

# 重启系统,文件描述符限制就变了。
$ reboot
  • 这样的设置既为 root 用户设置了文件描述符(句柄)的软硬限制数量为65535,也为系统中所有其他用户设置了同样的限制。所谓“软限制”是指用户可以达到但不能超过的限制,而“硬限制”是指系统设置的绝对限制。即软限制不能大于硬限制的值。

  • 通过以下命令,可以查看当前的文件描述符限制:

1
2
3
4
5
6
# 查看的是当前 bash 的“软”文件描述符限制
$ ulimit -n
# 查看软限制,在大多数情况下,ulimit -n 和 ulimit -Sn 是相同的
$ ulimit -Sn
# 查看硬限制
$ ulimit -Hn

环境变量设置

  • 一般我们设置环境变量时,是在 /etc/profile 文件中设置,比如我们设置jdk的环境变量,可以这样设置:

1
2
3
export JAVA_HOME=/usr/local/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  • 然后执行以下命令,使环境变量生效:

1
source /etc/profile
  • 但实际上,环境变量可以在 多个位置 中设置,不同方式作用范围也不同

设置位置 作用范围 何时生效 是否推荐
/etc/profile 所有用户(交互式 shell 登录) 重新登录后 ✅ 推荐系统级配置
/etc/profile.d/*.sh 所有用户(交互式 shell 登录) 重新登录后 ✅ 推荐系统级可维护方式
/etc/environment 所有进程(系统全局) 立即生效(重新登录或重启) ⚠️ 无 shell 特性,适合纯环境变量
~/.bash_profile 当前用户(登录 shell) 重新登录后 ✅ 常用用户级设置
~/.bashrc 当前用户(非登录 shell,如终端 tab) 新开终端后 ✅ 常用
/etc/bashrc 所有用户(非登录 shell) 新开终端后 ⚙️ 一般不直接改
Systemd service 文件 (/etc/systemd/system/xxx.service) 特定服务进程 服务重启后 ✅ 推荐用于守护进程
临时命令行 export VAR=value 当前 shell 会话 立即生效,关闭终端失效 🧪 临时调试用

/etc/profile.d

  • 比如,创建一个名为 /etc/profile.d/my_env.sh 的文件,然后将上面放在 /etc/profile 文件中的如下内容改放到这里:

1
2
3
export JAVA_HOME=/usr/local/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  • 然后执行以下命令,使环境变量生效:

1
source /etc/profile

/etc/environment

  • 内容格式(注意:不能使用 $PATH 等 shell 变量语法):

1
2
PATH="/usr/local/git/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
JAVA_HOME="/usr/local/jdk/jdk1.8.0_471"

Systemd service 文件

  • 比如,创建一个名为 /etc/systemd/system/xxx.service 的文件

1
2
3
# 在 [Service] 区段中添加
Environment="JAVA_HOME=/usr/local/jdk/jdk1.8.0_471"
Environment="PATH=/usr/local/git/bin:/usr/local/jdk/jdk1.8.0_471/bin:/usr/bin"
  • 然后重启服务

1
2
sudo systemctl daemon-reload
sudo systemctl restart xxx.service

注意:

  • 当我们在设置环境变量是经常会操作 PATH,比如 export PATH=$JAVA_HOME/bin:$PATH,假如我们将 $PATH 不小心写成了 $PTAH,当时没有及时发现,并且保存后执行了立即生效命令,比如 source /etc/profile,那么你会发现所有命令都失效了,因为$PATH 被修改成了 $PTAH,而 $PTAH 并不存在,所以所有命令都找不到了。
  • 此时你想着改回 $PATH,但是vim命令找不到了,此时别慌,可以通过命令的全路径进行使用,比如 /usr/bin/vim,实际上大部分的系统命令都在/usr/bin目录下。
  • 修改正确后重新登录终端即可。