Ubuntu服务器上的locale设置

在用apt-get install安装软件的时候提示:
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
应该是语言设置的问题
locale-gen en_US
locale-gen –lang zh_CN

相关命令:
locale   查看现在的locale配置环境
localepurge 配置需要的locale(如果没有这个命令,用apt-get install localepurge安装)
locale-gen 生成需要的locale文件
Ubuntu下设置中文locale
一般VPS刚开通不没有装中文的locale,通常会报这样的错误。
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LANG = “zh_CN.utf8”
    are supported and installed on your system.
perl: warning: Falling back to the standard locale (“C”).
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
这个要自己去设定。
1.查看当前系统语言环境
locale
2.查看系统内安装的locale
root@ubuntu-vps:~# locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
POSIX
3.安装zh_CN.utf8
root@ubuntu-vps:~# cd /usr/share/locales
root@ubuntu-vps:/usr/share/locales# ls
install-language-pack  remove-language-pack
root@ubuntu-vps:/usr/share/locales# ./install-language-pack zh_CN
Generating locales…
  zh_CN.UTF-8… done
Generation complete.
dpkg-trigger: dpkg-trigger 必须从维护者脚本中调用(或者通过 –by-package 选项)
4.验证locale安装是否成功
root@ubuntu-vps:/usr/share/locales# locale
LANG=zh_CN.utf8
LC_CTYPE=”zh_CN.utf8″
LC_NUMERIC=”zh_CN.utf8″
LC_TIME=”zh_CN.utf8″
LC_COLLATE=”zh_CN.utf8″
LC_MONETARY=”zh_CN.utf8″
LC_MESSAGES=”zh_CN.utf8″
LC_PAPER=”zh_CN.utf8″
LC_NAME=”zh_CN.utf8″
LC_ADDRESS=”zh_CN.utf8″
LC_TELEPHONE=”zh_CN.utf8″
LC_MEASUREMENT=”zh_CN.utf8″
LC_IDENTIFICATION=”zh_CN.utf8″

Ubuntu下的环境变量

环境变量文件包括

/etc下:(bash.bashrc[Ubuntu]或bashrc[CentOS]);environment;profile

普通用户及root用户家目录下:.bashrc;(.profile[Ubuntu]或.bash_profile[CentOS])
环境变量配置文件
1、/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。
2、/etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量。
3、~/.bash_profile:在登录时用到的第三个文件是.bash_profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。/etc/bash.bashrc:为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。
4、~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
几个文件的优先级:1>2>3
在linux下,如果是bash环境,用户登录时读取设置文件的顺序是/etc/profile --> ~/.bash_profile --> ~/.bashrc --> /etc/bash.bashrc。注意在~/.bash_profile这一步,如果没有~/.bash_profile ,则默认读取~/.bash_login,如果没有~/.bash_login 才读取~/.profile。
根据发行版本的情况,有两个基本的系统级配置文件:/etc/bash.bashrc和/etc/profile。这些配置文件包含两组不同的变量:shell变量和环境变量。前者只是在特定的shell中固定(如bash),后者在不同shell中固定。shell变量是局部的,而环境变量是全局的。
注意:尽量避免修改root用户的环境变量配置文件,因为那样可能会造成潜在的危险。最好不要把当前路径”./”放到PATH里,这样可能会受到意想不到的攻击。
使用:
把设置的环境变量给所有用户使用:/etc/bashrc;/etc/profile
修改全局的环境变量在/etc/profile
修改某个用户的环境变量在/home/用户名/.bash_profile相关命令:
1、echo显示环境变量
# echo $HOME
/root
2、export设置环境变量
$ export HELLO=”Hello!”
3、env显示所有环境变量
$ env
4、set显示所有本地定义的shell变量
$ set
5、unset清除环境变量
$ export TEST=”test”
$ env | grep TEST #此命令有输出,证明环境变量TEST已经存在了
TEST=test
$ unset TEST        #注意不是unset $TEST !!!
$ env | grep TEST #此命令无输出,证明环境变量TEST已经不存在了
6、readonly设置只读变量(变量不可以被修改或清除)
$ export TEST=”Test”
$ readonly TEST

让/etc/profile的修改立即生效:
1)$.  /etc/profile          注意:.和/etc之间有空格
2)$source  /etc/profile

常见的环境变量
PATH      决定了shell将到哪些目录中寻找命令或程序
HOME      当前用户主目录
HISTSIZE    历史记录数
LOGNAME     当前用户的登录名
HOSTNAME    指主机的名称
SHELL      前用户Shell类型
LANGUGE     语言相关的环境变量,多语言可以修改此环境变量
MAIL      当前用户的邮件存放目录
PS1       基本提示符,对于root用户是#,对于普通用户是$
PS2       附属提示符,默认是“>”
通过C程序来访问和设置环境变量
对于C程序的用户来说,可以使用下列三个函数来设置或访问一个环境变量。
getenv()访问一个环境变量。输入参数是需要访问的变量名字,返回值是一个字符串。如果所访问的环境变量不存在,则会返回NULL。
setenv()在程序里面设置某个环境变量的函数。
unsetenv()清除某个特定的环境变量的函数。
另外,还有一个指针变量environ,它指向的是包含所有的环境变量的一个列表。下面的程序可以打印出当前运行环境里面的所有环境变量:
#include <stdio.h>
extern char**environ;
int main ()
{
char**var;
for (var =environ;*var !=NULL;++var)
printf (”%s \n “,*var);
return 0;
}

TIME_WAIT链接数过多的问题

起因是一台服务器再重启glassfish的时候经常提示一些高端口冲突,后来发现服务器上的链接数已经达到17000左右,而其中15000左右的链接状态为TIME_WAIT。
这样的话很多高端口就被用掉了,都是TIME_WAIT状态,所以启动glassfish用到高端口的时候经常会提示端口冲突。
查了一下资料,找到一个解决办法:
修改/etc/sysctl.conf文件,在文件最后加上以下两行:
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
第一个参数reuse表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接
第二个参数recyse是加速TIME-WAIT状态的socket回收
这两个配置分别会去修改/proc/sys/net/ipv4/tcp_tw_reuse以及/proc/sys/net/ipv4/tcp_tw_recycle的值,由0改为1