centos 7 变量,centos7查看配置
Centos7:Linux环境变量配置文件
Linux系统环境变量配置文件是系统管理和编程中至关重要的组件,它们指导Linux系统如何设置环境变量,从而影响程序运行的特性。本文将详细介绍Linux系统中环境变量配置文件的主要部分及其功能。
首先,我们关注的是/etc/profile文件,这是系统级的环境配置文件。当用户登录时,此文件会被执行,为整个系统提供环境信息。它适用于所有用户,用于设置系统级的环境变量和启动程序。
接下来是每个用户的个性化环境配置文件。对于终端用户,文件名可能为~/.bash_profile或~/.profile。在登录时,该文件仅执行一次,用于设置特定于用户的shell环境。它通常包含环境变量的设置和执行~/.bashrc文件的指令。
每个用户还能自定义~/.bashrc文件,其中存储了与当前bash shell相关的环境变量和函数。当用户打开新的shell或登录时,这个文件会被读取,确保用户特定的配置得到应用。
最后,我们有/etc/bashrc文件,用于系统中所有运行bash shell的用户。它在shell打开时被读取,允许为所有用户设置通用的环境变量和自定义功能。
此外,每个用户还拥有其他重要文件。如~/.bash_history,用于存储用户执行的命令历史;~/.bash_logout,用于存储用户退出时执行的命令。管理这些文件有助于维护用户环境的一致性和高效性。
为了验证配置文件的效果,您可以将特定命令(如 echo)添加到不同文件中。例如,将 echo'/etc/profile'添加到/etc/profile文件中,可以检查该文件是否已正确执行。使用这种方法,您可以轻松地了解不同配置文件的用途和作用。
最后,使用历史命令快捷键和操作来提高效率。例如,使用 `!!`指令可以执行最近的命令,`history-a`可以将历史命令写入硬盘,而 `history-c`可以清除历史记录。此外,可以使用快捷键如 `ctrl+a`、`ctrl+e`、`ctrl+u`、`ctrl+d`和 `ctrl+方向键`实现高效地移动和操作历史命令。
【UTC】CentOS7修改时区的正确姿势
整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC,Universal Time Coordinated)。
格林威治标准时间(Greenwich Mean Time)指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。(UTC与GMT时间基本相同,本文中不做区分)
中国标准时间(China Standard Time)【GMT + 8 = UTC + 8 = CST】
夏令时(Daylight Saving Time)指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用。(中国不使用)
RTC(Real-Time Clock)或CMOS时钟,一般在主板上靠电池供电,服务器断电后也会继续运行。仅保存日期时间数值,无法保存时区和夏令时设置。
一般在服务器启动时复制RTC时间,之后独立运行,保存了时间、时区和夏令时设置。
在CentOS 6版本,时间设置有date、hwclock命令,从CentOS 7开始,使用了一个新的命令timedatectl。
Centos7修改系统时区timezone ,解决快、慢8小时问题
如果服务器用非 UTC的时间,时区转换很容易不一致,而且对于有 daylight saving的时区,每年多一小时少一小时的那两天,系统就会出现各种诡异现象。
服务器使用UTC时间,如要显示用户所在时区的本地时间,在客户端转化即可。
# timedatectl
我们可以看到,服务器使用的CST时间
# timedatectl set-timezone UTC
# timedatectl set-time"YYYY-MM-DD HH:MM:SS"
# timedatectl set-time "HH:MM:SS"
# timedatectl
我们可以看到,服务器时间类型更改为UTC了
# ll /etc/locatime
lrwxrwxrwx. 1 root root 25 1月 14 08:30 /etc/localtime->../usr/share/zoneinfo/UTC
实际上是做了一个将
文件 /etc/localtime 做了一个软连接到 /usr/share/zoneinfo/UTC
# ln -s /usr/share/zoneinfo/UTC /etc/localtime
ln:无法创建符号链接"/etc/localtime":文件已存在
# ln -sf /usr/share/zoneinfo/UTC /etc/localtime
做软连接时,需要加-f参数,强制覆盖,不然会显示软链接已存在
# timedatectl set-time"YYYY-MM-DD HH:MM:SS"
# timedatectl set-time "HH:MM:SS" //只设置时分秒
# timedatectl
# clock -w
# date -u //显示UTC时间
CentOS7修改时区的正确姿势
CentOS7上运行Java程序,发现程序生成的时间与当前时间匹配不上,还以为是数据停止更新了,后来发现没有正确使用修改时区的姿势,导致程序时区错误。
正确的修改CentOS7时区的姿势:
# ln -sf/usr/share/zoneinfo/Asia/Shanghai /etc/localtime
其他系统的修改文件可能是/var/etc/localtime.
错误的姿势:通过cp命令覆盖/etc/localtime时间
# cp-f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
通过cp命令修改时区,通过date, data-R命令显示的时区都是正确的,可是对于java程序而言,是错误的。
具体原因在于Java访问系统时区的方式上,可参见文章:
Java TimeZone和 Linux TimeZone问题
该文章很好的说明了Java访问系统时区的方式:
1.如有环境变量 TZ设置,则用TZ中设置的时区
2.在/etc/sysconfig/clock文件中找“ZONE”的值
3.如何2)都没,就用/etc/localtime和/usr/share/zoneinfo下的时区文件进行匹配,如找到匹配的,就返回对应的路径和文件名。
问题在于,如果使用cp命令来修改/etc/localtime文件,那么可能就会导致修改的不是/etc/localtime文件,而是原时区的文件内容。
/etc/localtime是通过符号链接链接/usr/share/zoneinfo下的文件,而java是通过文件名来确认时区的,data命令是通过文件内容确认时区的,这样就导致了data命令时区正确,而java的时区是错误的!
如上图所示:CentOS7是通过符号链接到/usr/share/zoneinfo/下的时区文件的,如果通过cp指令只会修改原时区文件内容,这样,通过date的系统命令,查看时间是OK的,可是java是通过读取文件名的方式确认时区信息的。所以时区还是纽约。
Centos7环境变量设置
在搭建Centos7服务器时,环境变量的配置显得尤为重要。环境变量是程序执行所需的运行环境组成部分,它们分为系统环境变量和用户环境变量,分别对所有用户或单个用户生效。系统环境变量如PATH,用于指定可执行程序的搜索路径,而用户环境变量如LANG,控制系统的语言设置。
查看环境变量有多种方式,如使用env命令查看全部变量,通过grep筛选特定变量,或利用echo命令查看。常用的环境变量包括PATH、LANG、HOSTNAME等,它们分别控制程序搜索路径、语言设置和服务器主机名等重要信息。
设置环境变量时,如无特殊字符,无需单引号包围。系统环境变量可以通过/etc/profile、/etc/profile.d或/etc/bashrc进行配置,后者不推荐用于系统环境变量,而推荐在每个用户的.bash_profile中配置用户环境变量,如.bashrc只应在打开新的Shell时读取,效率更高。
PATH环境变量的设置至关重要,它决定了可执行程序的查找路径。默认情况下,系统命令位于PATH中,但用户可以自定义添加。LANG环境变量同样重要,它影响系统的语言和字符集。此外,C/C++和JAVA程序员需关注LD_LIBRARY_PATH和CLASSPATH,它们分别用于动态链接库和类库的搜索路径。
在Shell中,使用export设置的环境变量会立即生效,但退出Shell后会失效;而在脚本文件中设置的环境变量需重新登录或使用source命令使其生效。因此,为了管理方便和减少错误,建议将系统环境变量配置在/etc/profile.d,用户环境变量在用户的.bash_profile中。