当前位置 : 首页 » 文章分类 :  开发  »  Linux-常用配置

Linux-常用配置

linux配置笔记


/proc

/proc/meminfo 内存信息

其实 free 命令中的信息都来自于 /proc/meminfo 文件。/proc/meminfo 文件包含了更多更原始的信息,只是看起来不太直观:

/proc/cpuinfo CPU信息

lscpu 命令的内容来自 cat /proc/cpuinfo


/proc/swaps 交换空间信息

swapon -s 查看系统交换空间使用状况:

$ swapon -s
文件名             类型      大小    已用   权限
/dev/nvme0n1p2  partition    839676    227688    -1

其实 swapon -s 命令查看的是 /proc/swaps 文件的内容,等价于:
cat /proc/swaps

$ cat /proc/swaps
Filename                Type        Size    Used    Priority
/swapfile1                              file        1048572    142592    -2

查看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 OOM killer机制

分配物理页面的方式,可以大大节省物理内存的使用,但有时会导致 Memory Overcommit。所谓 Memory Overcommit,也就是说,所有进程使用的虚拟内存超过了系统的物理内存和交换空间的总和。默认情况下,Linux 是允许 Memory Overcommit 的。并且在大多数情况下,Memory Overcommit 也是安全的,因为很多进程只是申请了很多内存,但实际使用到的内存并不多。
但万一很多进程都使用了申请来的大部分内存,就可能导致物理内存和交换空间不够用了,这时内核的 OOM Killer 就会出马,它会选择杀掉一个或多个进程,这样就能腾出一些内存给其它进程使用。

vm.overcommit_memory

在 Linux 中,可以通过内核参数 vm.overcommit_memory 去控制是否允许 overcommit:
默认值是 0,在这种情况下,只允许轻微的 overcommit,而比较明显的 overcommit 将不被允许。
如果设置为 1,表示总是允许 overcommit。
如果设置为 2,则表示总是禁止 overcommit。也就是说,如果某个申请内存的操作将导致 overcommit,那么这个操作将不会得逞。
查看 vm.overcommit_memory

$ cat /proc/sys/vm/overcommit_memory
0

有三种方式修改内核参数,但要有root权限:
(1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p使配置文件生效
(2)sysctl vm.overcommit_memory=1
(3)echo 1 > /proc/sys/vm/overcommit_memory

vm.overcommit_ratio

那么对内核来说,怎样才算 overcommit 呢?
Linux 设定了一个阈值,叫做 CommitLimit,如果所有进程申请的总内存超过了 CommitLimit,那就算是 overcommit 了。在/proc/meminfo中可以看到 CommitLimit 的大小:

$ cat /proc/meminfo | grep CommitLimit
CommitLimit:     3037408 kB

CommitLimit 的值是这样计算的:
CommitLimit = [swap size] + [RAM size] * vm.overcommit_ratio / 100
其中的 vm.overcommit_ratio 也是内核参数,它的默认值是 50。
查看 vm.overcommit_ratio

$ cat /proc/sys/vm/overcommit_ratio
50

改为 100
sysctl vm.overcommit_ratio=100

当物理内存和交换空间不够用时,OOM Killer 就会选择杀死进程,那么它是怎样知道要先杀死哪个进程呢?
其实 Linux 的每个进程都有一个 oom_score (位于 /proc/<pid>/oom_score),这个值越大,就越有可能被 OOM Killer 选中。oom_score 的值是由很多因素共同决定的,这里列举几个因素:
如果进程消耗的内存越大,它的 oom_score 通常也会越大。
如果进程运行了很长时间,并且消耗很多 CPU 时间,那么通常它的 oom_score 会偏小。
如果进程以 superuser 的身份运行,那么它的 oom_score 也会偏小。

每个进程都有一个 oom_adj (位于 /proc/<pid>/oom_adj),这个值的范围是 [-17, +15],进程的 oom_adj 会影响 oom_score 的计算,也就是说,我们可以通过调小进程的 oom_adj 从而降低进程的 oom_score。对于一些比较重要的进程,例如 MySQL,我们想尽量避免它被 OOM Killer 杀死,这时候就可以调低它的 oom_adj 的值,例如:
sudo echo -10 > /proc/$(pidof mysqld)/oom_adj

overcommit
https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

Linux 的 OOM Killer 机制分析
http://senlinzhan.github.io/2017/07/03/oom-killer/


/etc

/etc/hosts

其实hosts文件的作用相当如DNS,提供IP地址到hostname的对应。
早期的互联网计算机数量少,单机hosts文件里足够存放所有联网计算机。
不过随着互联网的发展,这就远远不够了。于是就出现了分布式的DNS系统。由DNS服务器来提供类似的IP地址到域名的对应。
具体可以man hosts查看相关信息。

Linux系统在向DNS服务器发出域名解析请求之前会查询 /etc/hosts 文件,如果里面有相应的记录,就会使用hosts里面的记录。
/etc/hosts文件通常里面包含这一条记录
127.0.0.1 localhost.localdomain localhost
hosts文件格式是一行一条记录,分别是IP地址 、hostname、 aliases,三者用空白字符分隔,aliases可选。
127.0.0.1到localhost这一条建议不要修改,因为很多应用程序会用到这个,比如sendmail,修改之后这些程序可能就无法正常运行。

设置主机名

hostname 命令用于显示和设置系统的主机名称。

hostname 显示当前主机名
hostname dell 临时设置主机名为dell

环境变量 $HOSTNAME 也保存了当前的主机名。
在使用hostname命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器之后还是原来的主机名。
如果需要永久修改主机名,需要同时修改 /etc/hosts/etc/sysconfig/network 的相关内容。

hostname newhostname 运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改
echo newhostname > /proc/sys/kernel/hostname 运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改
sysctl kernel.hostname=newhostname 运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改
修改 /etc/sysconfig/network 下的 HOSTNAME 变量 HOSTNAME=centos , 重启后生效,永久性修改。
修改 /etc/hosts 添加一行 127.0.0.1 centos, 使得本机的应用程序通过 centos 能够解析到本机

深入理解Linux修改hostname
https://www.cnblogs.com/kerrycode/p/3595724.html


/etc/passwd 用户信息

使用 useradd 指令所建立的帐号,实际上是保存在/etc/passwd文本文件中。
在该文件中,每一行用户记录的各个数据段用 “:” 分隔,分别定义了用户的各方面属性。各个字段的顺序和含义如下:
注册名:口令:用户标识号:组标识号:用户名:用户主目录:命令解释程序

口令(passwd):系统用口令来验证用户的合法性。超级用户root或某些高级用户可以使用系统命令passwd来更改系统中所有用户的口令,普通用户也可以在登录系统后使用passwd命令来更改自己的口令。
现在的Unix/Linux系统中,口令不再直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个“x”来代替,将/etc/shadow作为真正的口令文件,用于保存包括个人口令在内的数据。当然shadow文件是不能被普通用户读取的,只有超级用户才有权读取。


/etc/group 组信息

/etc/group文件是有关于系统管理员对用户和用户组管理的文件,linux用户组的所有信息都存放在/etc/group文件中。具有某种共同特征的用户集合起来就是用户组(Group)。用户组(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件。
将用户分组是Linux系统中对用户进行管理及控制访问权限的一种手段。每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不 同的组。当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。

用户组的所有信息都存放在/etc/group文件中。此文件的格式是由冒号(:)隔开若干个字段,这些字段具体如下:
组名:口令:组标识号:组内用户列表
组名:组名是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
口令:口令字段存放的是用户组加密后的口令字。一般Linux系统的用户组都没有口令,即这个字段一般为空,或者是x,密码存放在/etc/gshadow中
组标识号:组标识号与用户标识号类似,也是一个整数,被系统内部用来标识组。别称GID.
组内用户列表:是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。


/etc/sysctl.conf

vm.max_map_count

vm.max_map_count 文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量。虚拟内存区域是一个连续的虚拟地址空间区域。在进程的生命周期中,每当程序尝试在内存中映射文件,链接到共享内存段,或者分配堆空间的时候,这些区域将被创建。调优这个值将限制进程可拥有VMA的数量。限制一个进程拥有VMA的总数可能导致应用程序出错,因为当进程达到了VMA上线但又只能释放少量的内存给其他的内核进程使用时,操作系统会抛出内存不足的错误。如果你的操作系统在NORMAL区域仅占用少量的内存,那么调低这个值可以帮助释放内存给内核用。

默认值为 65536

调整示例,如下调整为默认的4倍
sysctl -w vm.max_map_count=262144

查看修改结果
sysctl -a|grep vm.max_map_count

注意如果使用

sysctl -w vm.max_map_count=262144
sysctl -p

来修改,操作系统重启后值会改变,如果想永久改变需要采用如下形式。
vm.max_map_count=262144 直接写到 /etc/sysctl.conf 中

echo "vm.max_map_count=262144" > /etc/sysctl.conf
sysctl -p

/etc/fstab 文件系统挂载信息

/etc/fstab 是用来存放文件系统的静态信息的文件。
当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。
它只是一个文本文件,你能够用你喜欢的编辑器打开它,但是必须是root用户才能编辑它。同时fsck、mount、umount的等命令都利用该文件。

$ cat /etc/fstab
#
# <file system>  <dir>  <type>  <options>     <dump> <pass>
LABEL=/     /           ext4    defaults,noatime  1   1
tmpfs       /dev/shm    tmpfs   defaults        0   0
devpts      /dev/pts    devpts  gid=5,mode=620  0   0
sysfs       /sys        sysfs   defaults        0   0
proc        /proc       proc    defaults        0   0

挂载设备 : 不是我们通常理解的文件系统,而是指设备(硬盘及其分区,DVD光驱等)。它告知我们设备(分区)的名字,这是你在命令行中挂载(mount)、卸载(umount)设备时要用到的。
挂载点:告诉我们设备挂载到哪里。
文件系统类型:Linux支持许多文件系统。 要得到一个完整的支持名单查找mount man-page。典型 的名字包括这些:ext2, ext3, reiserfs, xfs, jfs,iso9660, vfat, ntfs, swap和auto, ‘auto’ 不是一个文件系统,而是让mount命令自动判断文件类型,特别对于可移动设备,软盘,DVD驱动器,这样做是很有必要的,因为可能每次挂载的文件类型不一致。
文件系统参数:这部分是最有用的设置!!! 它能使你所挂载的设备在开机时自动加载、使中文显示不出现乱码、限制对挂载分区读写权限。它是与mount命令的用法相关的,要想得到一个完整的列表,参考mount manpage.
备份命令:dump utility用来决定是否做备份的. dump会检查entry并用数字来决定是否对这个文件系统进行备份。允许的数字是0和1。如果是0,dump就会忽略这个文件系统,如果是1,dump就会作一个备份。大部分的用户是没有安装dump的,所以对他们而言这个entry应该写为0。
是否以fsck检验扇区:启动的过程中,系统默认会以fsck检验我们的 filesystem 是否完整 (clean)。 不过,某些 filesystem 是不需要检验的,例如内存置换空间 (swap) ,或者是特殊文件系统例如 /proc 与 /sys 等等。fsck会检查这个头目下的数字来决定检查文件系统的顺序,允许的数字是0, 1, 和2。0 是不要检验, 1 表示最早检验(一般只有根目录会配置为 1), 2 也是要检验,不过1会比较早被检验啦!一般来说,根目录配置为1,其他的要检验的filesystem都配置为 2 就好了。

fstab (简体中文)
https://wiki.archlinux.org/index.php/Fstab_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)


/etc/sysconfig

/etc/sysconfig/network

设置主机名

临时设置
使用hostname命令设置主机名。格式为:hostname 主机名,如下:
hostname hadoop1
该设置为临时生效。重新启动系统后,设置失效。

永久设置
编辑/etc/sysconfig/network文件中的HOSTNAME字段就可以修改主机名。如下所示:

NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=hadoop1

HOSTNAME=hadoop1 表示主机设置为hadoop1 .
注意:修改主机名后,需要重启系统后永久生效。


/etc/sysconfig/iptables 防火墙

iptables简介

iptables的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能。

yum安装iptables

centos最小化安装也自带iptables防火墙,如果系统中没有iptables,可使用yum安装:
yum install iptables
如何检查系统中是否有iptables?
执行命令:service iptables status查看防火墙状态,如果提示 iptables:unrecognized service 则表示系统尚未安装。


iptables防火墙配置

安装完 iptables 后,配置文件默认在 /etc/sysconfig/iptables

查看防火墙状态

查看防火墙配置
/etc/init.d/iptables statusservice iptables status
结果为:

Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

开放指定端口

添加规则开放80端口:
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
保存配置:
/etc/rc.d/init.d/iptables saveservice iptables save
显示

iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

或者使用vi打开/etc/sysconfig/iptables文件修改手动添加

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

重启防火墙:
service iptables restart
再次查看防火墙状态可见多了一条

1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80

表明80端口开启成功

停止/启动防火墙

service iptables stop
重启系统后失效,防火墙依然存在

启动防火墙
service iptables restart

设置开机启动防火墙

chkconfig iptables off
即关闭iptables开机自启动
执行chkconfig命令,iptables行0-6全是off说明成功关闭:

iptables           0:off    1:off    2:off    3:off    4:off    5:off    6:off

永久关闭后启用
chkconfig iptables on
即添加iptables开机自启动


FirewallD防火墙(centos7自带)

Centos7 以上的发行版都试自带了 firewalld 防火墙的,firewalld 取代了 iptables 防火墙。
其原因是 iptables 的防火墙策略是交由内核层面的 netfilter 网络过滤器来处理的,而 firewalld 则是交由内核层面的 nftables 包过滤框架来处理。 相较于 iptables 防火墙而言,firewalld 支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是 firewalld 预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。

22 端口默认加入了允许规则,但其他比如 http 80 端口,以及其他中间件的 tcp 端口都是不通的。


/etc/security/limits.conf

限制系统用户对shell资源的访问。

用命令ulimit -a可以查看所有shell资源限制值
ulimit -n <文件数目>:指定同一时间最多可开启的文件数
但此命令修改的值只适用于当前shell登录,要想永久修改,需要修改/etc/security/limits.conf配置文件

limits.conf工作原理

limits.conf文件实际是Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so 的配置文件,突破系统的默认限制,对系统访问资源有一定保护作用。 limits.conf 和sysctl.conf区别在于limits.conf是针对用户,而sysctl.conf是针对整个系统参数配置。
limits.conf是 pam_limits.so的配置文件,然后/etc/pam.d/下的应用程序调用pam_*.so模块。譬如说,当用户访问服务器,服务程序将请求发送到PAM模块,PAM模块根据服务名称在/etc/pam.d目 录下选择一个对应的服务文件,然后根据服务文件的内容选择具体的PAM模块进行处理。

limits.conf文件格式

limits.conf文件格式:username|@groupname type resource limit

  • username|@groupname
    设置需要被限制的用户名,组名前面加@和用户名区别。也可用通配符*来做所有用户的限制

  • type
    类型有softhard-,其中soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比har 限制高。用 - 就表明同时设置了soft 和hard的值

  • resource
    表示要限制的资源,包括如下:

    • core - 限制内核文件的大小
      何谓core文件?当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存储图像。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。core文件是个二进制文件,需要用相应的工具来分析程序崩溃时的内存映像,系统默认core文件的大小为0,所以没有被创建。可以用ulimit命令查看和修改core文件的大小,但如果想让修改永久生效,则需要修改配置文件,如 .bash_profile、/etc/profile或/etc/security/limits.conf
    • date - 最大数据大小
    • fsize - 最大文件大小
    • memlock - 最大锁定内存地址空间
    • nofile - 打开文件的最大数目
      对于需要做许多套接字连接并使它们处于打开状态的应用程序而言,最好通过使用ulimit -n,或者通过设置nofile参数,为用户把文件描述符的数量设置得比默认值高一些
    • rss - 最大持久设置大小
    • stack - 最大栈大小
    • cpu - 以分钟为单位的最多 CPU 时间
    • noproc - 进程的最大数目
    • as - 地址空间限制
    • maxlogins - 此用户允许登录的最大数目

limits.conf设置生效

  • 暂时生效,适用于通过 ulimit 命令登录 shell 会话期间
  • 永久生效,通过将一个相应的 ulimit 语句添加到由登录 shell 读取的文件之一(例如 ~/.profile),即特定于 shell 的用户资源文件;或者通过编辑 /etc/security/limits.conf

注意:要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。
查看 /etc/pam.d/login 文件中有:session required /lib/security/pam_limits.so

永久修改所有用户打开文件最大数目

修改/etc/security/limits.conf,添加:* - nofile 1006154
修改/etc/pam.d/login,添加:session required /lib/security/pam_limits.so

限制admin用户登录到sshd的服务不能超过2个

在/etc/security/limits.conf中添加:admin - maxlogins 2
在/etc/pam.d/sshd中添加:session required pam_limits.so


/etc/profile环境变量配置

  • /etc/profile,系统级环境变量,对所有用户起作用。profile文件在系统启动时将被运行。在profile文件添加或修改的内容需要注销系统或执行source命令才能生效。

  • /etc/bashrc,系统级环境变量,对所有用户起作用。修改这个文件不用重启,重新打开一个bash即可生效。

  • ~/.bash_profile,需要需要重启才会生效,/etc/profile对所有用户生效,~/.bash_profile只对当前用户生效。

  • ~/.bashrc,此文件类似于/etc/bashrc,不需要重启生效,重新打开一个bash即可生效,/etc/bashrc对所有用户新打开的bash都生效,但~/.bashrc只对当前用户新打开的bash生效。


login方式与non-login方式

~/.bash_profile 是交互式、login 方式进入bash 运行的;
~/.bashrc 是交互式、non-login 方式进入bash 运行的;
简单地说,.bash_profile只在会话开始时被读取一次,而.bashrc则每次打开新的终端时,都会被读取。
所以一般优先把变量设置在.bashrc里面。
通常二者设置大致相同,所以通常前者会调用后者。

交互式的:顾名思义,这种shell中的命令时由用户从键盘交互式地输入的,运行的结果也能够输出到终端显示给用户看。
非交互式的:这种shell可能由某些自动化过程启动,不能直接从请求用户的输入,也不能直接输出结果给终端用户看。输出最好写到文件。


常见的环境变量

: 表示并列含义,例如A变量值有多个,用:符号进行分离。
. 表示你操作的当前目录。

使用env命令显示所有的环境变量 ,set命令显示所有本地定义的Shell变量。

  • PATH:决定了shell将到哪些目录中寻找命令或程序
  • HOME:当前用户主目录
  • MAIL:是指当前用户的邮件存放目录。
  • SHELL:是指当前用户用的是哪种Shell。
  • HISTSIZE:是指保存历史命令记录的条数。
  • LOGNAME:是指当前用户的登录名。
  • HOSTNAME:是指主机名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。
  • LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
  • PS1:是基本提示符,对于root用户是#,对于普通用户是$。
  • PS2:是附属提示符,默认是“>”。

Linux代理配置

vi /etc/profile
添加如下内容:

http_proxy=http://[username:password@]proxy_ip:port/
https_proxy=http://[username:password@]proxy_ip:port/
ftp_proxy=http://[username:password@]proxy_ip:port/
no_proxy = 192.168.20. # 访问局域网地址192.168.20.*时不使用代理,可以用逗号分隔多个地址
ALL_PROXY=socks5://127.0.0.1:1080 # 全局代理
export http_proxy
export https_proxy
export ftp_proxy
export no_proxy
export ALL_PROXY

之后
source /etc/profile 使配置生效

例如:

http_proxy=http://172.17.18.80:8080/
https_proxy=http://172.17.18.80:8080/
ftp_proxy=http://172.17.18.80:8080/
ALL_PROXY=socks5://127.0.0.1:1080 # 全局代理
export http_proxy
export https_proxy
export ftp_proxy
export ALL_PROXY

如果需要为某个用户设置一个系统级的代理,可以在~/.bash_profile中设置。


$PS1命令提示符配置

$PS1 是Linux终端用户的一个环境变量,用来说明命令行提示符的设置。
可以使用 man bash命令查看bash手册,找到该变量支持的特殊字符,以及这些特殊字符的意义:

\d :#代表日期,格式为weekday month date,例如:"Mon Aug 1"
\H :#完整的主机名称。
\h :#仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t :#显示时间为24小时格式,如:HH:MM:SS
\T :#显示时间为12小时格式
\A :#显示时间为24小时格式:HH:MM
\u :#当前用户的账号名称
\v :#BASH的版本信息
\w :#完整的工作目录名称。家目录会以 ~代替
\W :#利用basename取得工作目录名称,所以只会列出最后一个目录
\# :#下达的第几个命令
\$ :#提示字符,如果是root时,提示符为:# ,普通用户则为:$

centos 中默认命令提示符格式:

$ echo $PS1
[\u@\h \W]\$

写入 /etc/profile/etc/bashrc 对全部用户生效;
写入 ~/.bash_profile~/.bashrc 只对当前用户生效。

配置 ~/.bashrc 文件, 然后使用source使其生效

$ vi ~/.bashrc
#在文件最后添加如下设置
export PS1="[\u@\h \W] \$ "
$ source ~/.bashrc #使其设置生效

/etc/locatime Linux时区设置

查看当前时区date -R

$ date -R
Sun, 10 Mar 2019 05:05:22 +0000

下面以设置上海时区Asia/Shanghai为例:

修改linux时区

1、使用tzselect获取时间文件

$ tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
 1) Africa
 2) Americas
 3) Antarctica
 4) Asia
 5) Atlantic Ocean
 6) Australia
 7) Europe
 8) Indian Ocean
 9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the time zone using the Posix TZ format.
#?

输入序号选择大洲,输入4选择亚洲

#? 4
Please select a country whose clocks agree with yours.
 1) Afghanistan          18) Israel            35) Palestine
 2) Armenia          19) Japan            36) Philippines
 3) Azerbaijan          20) Jordan            37) Qatar
 4) Bahrain          21) Kazakhstan        38) Russia
 5) Bangladesh          22) Korea (North)        39) Saudi Arabia
 6) Bhutan          23) Korea (South)        40) Singapore
 7) Brunei          24) Kuwait            41) Sri Lanka
 8) Cambodia          25) Kyrgyzstan        42) Syria
 9) China          26) Laos            43) Taiwan
10) Cyprus          27) Lebanon            44) Tajikistan
11) East Timor          28) Macau            45) Thailand
12) Georgia          29) Malaysia            46) Turkmenistan
13) Hong Kong          30) Mongolia            47) United Arab Emirates
14) India          31) Myanmar (Burma)        48) Uzbekistan
15) Indonesia          32) Nepal            49) Vietnam
16) Iran          33) Oman            50) Yemen
17) Iraq          34) Pakistan
▽
#?

输入序号选择国家,输入9选择中国

#? 9
▽
ZONE="Asia/Shanghai"
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#?

输入序号选择时区,中国有两个时区,选择1北京时间

#? 1
The following information has been given:

    China
    Beijing Time

Therefore TZ='Asia/Shanghai' will be used.
Selected time is now:    Sun Mar 10 13:06:20 CST 2019.
Universal Time is now:    Sun Mar 10 05:06:20 UTC 2019.
Is the above information OK?
1) Yes
2) No
#?

输入序号确认,输入1确认yes

#? 1
You can make this change permanent for yourself by appending the line
    TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai

获取时间文件完成后,就有了时间文件:/usr/share/zoneinfo/Asia/Shanghai
注意:tzselect命令只告诉你选择的时区的写法,并不会生效。所以现在它还不是东8区北京时间。
你可以在.profile、.bash_profile或者/etc/profile中设置正确的TZ环境变量并导出。 例如在.bash_profile里面设置 TZ=’Asia/Shanghai’; export TZ并使其生效source .bash_profile

如果想全局生效,可以继续下面的步骤。

2、修改系统时区文件/etc/sysconfig/clock

注意, 有的系统 比如 centos7 中没有此时区文件,可以跳过步骤2
使用新时区更新 /etc/sysconfig/clock 文件。
(1)使用您常用的文本编辑器(如 vim 或 nano)打开 /etc/sysconfig/clock 文件。您需要在编辑器命令中使用 sudo,因为 /etc/sysconfig/clock 归 root 所有。
(2)查找 ZONE 条目,将其更改为时区文件 (忽略路径的 /usr/share/zoneinfo 部分)。例如,要更改为上海时区,请将 ZONE 条目更改为以下内容:

ZONE="Asia/Shanghai"

(3)保存文件,退出文本编辑器。

3、替换或链接/etc/locatime的时区文件

/etc/localtime 与时区文件之间创建一个符号链接,以便实例在引用本地时间信息时找到此时区文件。

sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

或者直接替换

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

查看时区:

$ date -R
Sun, 10 Mar 2019 14:36:00 +0800

看到已经修改为+8区

/etc/sysconfig/clock和/etc/localtime的区别

1)/etc/sysconfig/clock 文件,只对 hwclock 命令有效,且只在系统启动和关闭的时候才有用
在 /etc/sysconfig/clock 中 UTC=false 时,date、hwclock、hwclcok –localtime 输出的时间应该都一致,且此时 hwclock –utc是没有意义的;
在 /etc/sysconfig/clock 中 UTC=ture 时,date、hwclock 的输出是一致的,hwclock –localtime 的输出则是UTC时间;
系统关闭时会同步系统时间到硬件时钟,系统启动时会从硬件时钟读取时间更新到系统,这2个步骤都要根据 /etc/sysconfig/clock 文件中UTC的参数来设置时区转换。

2)/etc/localtime
这个文件用来设置系统的时区,将 /usr/share/zoneinfo/ 中相应文件拷贝到 /etc 下并重命名为 localtime 即可修改时区设置,而且这种修改对 date 命令是及时生效的。不论是 date 还是 hwclock 都会用到这个文件,会根据这个文件的时区设置来进行UTC和本地之间之间的换算。

linux修改时区
http://coolnull.com/235.html

Linux查看设置系统时区
https://www.cnblogs.com/kerrycode/p/4217995.html

/etc/localtime和/etc/timezone区别

/etc/timezone 是一个纯文本文件

$ cat /etc/timezone
Asia/shanghai

/etc/localtime 通常链接到一个时区文件

$ ll /etc/localtime
lrwxrwxrwx. 1 root root 33 12月 21 21:15 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai

/etc/localtime 是用来描述本机时间,而 /etc/timezone 是用来描述本机所属的时区


上一篇 2016年第三季度运动记录

下一篇 VPS

阅读
评论
7,676
阅读预计31分钟
创建日期 2016-06-17
修改日期 2020-06-27
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论