您的位置:首页 > 运维架构 > Shell

linux 基础学习之三:bash shell初识 上

2011-12-29 20:57 726 查看
1·、bash shell的功能

• 命令编修能力(类似 DOS 的 doskey 功能):

只要在指令列按『上下键』就可以找到前一个输入的指令!而在很多 distribution 里头,预设的指令记忆功能可以到达 1000 个!也就是说, 你曾经下达过的指令都被记录下来了,记录的档案在你的家目录内的 .bash_history!不过,需要留意的是, ~/.bash_history 记录的是前一次登入以前所执行过的指令, 而至于这一次登入所执行的指令都被暂存在暂内存中,当您成功的注销系统后,该指令记忆才会记录到
.bash_history 当中!

 这有什么功能呢?最大的好处就是可以『查询曾经做过的举动!』, 如此可以知道你的执行步骤,那么就可以追踪您曾下达的指令,以作为除错的工具! 但如此一来也有个烦恼,就是如果被黑客入侵了,那么他只要翻你曾经执行过的指令, 刚好你的指令又跟系统有关(例如直接输入 MySQL 的密码在指令列上面)那么很容易就被破解你的 Linux 主机!所以,最好是将记录的指令数目减小一点较好!

• 历史命令:history

[root@linux ~]# history

[root@linux ~]# history [-c]

[root@linux ~]# history [-raw] histfiles

参数:

n :数字,意思是『要列出最近的 n 笔命令列表』的意思!

-c :将目前的 shell 中的所有 history 内容全部消除

-a :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,

则预设写入 ~/.bash_history

-r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;

-w :将目前的 history 记忆内容写入 histfiles 中!

范例一:列出目前最近的 3 笔资料

[root@linux ~]# history 3

1019 history

1020 history

1021 history 3

范例二:立刻将目前的资料写入 histfile 当中

[root@linux ~]# history -w

# 在预设的情况下,会将历史纪录写入 ~/.bash_history 当中!

[root@linux ~]# echo $HISTSIZE

1000

 那么 history 这个历史命令只可以让我查询命令而已吗?呵呵!当然不止啊! 我们可以利用相关的功能来帮我们执行命令呢!举例来说啰:

[root@linux ~]# !number

[root@linux ~]# !command

[root@linux ~]# !!

参数:

number :执行第几笔指令的意思;

command :由最近的指令向前搜寻『指令串开头为 command』的那个指令,并执行;

!! :就是执行上一个指令(相当于按↑按键后,按 Enter)

范例:

[root@linux ~]# history

66 man rm

67 alias

68 man history

69 history

[root@linux ~]# !66 <==执行第 66 笔指令

[root@linux ~]# !! <==执行上一个指令,本例中亦即 !66

[root@linux ~]# !al <==执行最近以 al 为开头的指令(上头列出的第 67 个)

• 命令与档案补全功能:

• [Tab] 接在一串指令的第一个字的后面,则为命令补全;

• [Tab] 接在一串指令的第二个字以后时,则为『档案补齐』!

如果我想要知道我的环境中,所有可以执行的指令有几个? 就直接在 bash 的提示字符后面输入两个 [tab][tab] 就能够输出所有的可执行指令了。 那如果想要知道系统当中所有以 c 为开头的指令呢?就按下 c[tab][tab] 就好啦! 

• 命令别名(alias)设定功能:

假如我需要知道这个目录底下的所有档案(包含隐藏档)及所有的档案属性,那么我就必须要下达 ls -al 这样的指令列,麻烦,有没有更快的取代方式?呵呵!就使用命令别名呀!例如我最喜欢直接以 lm 这个自订的命令来取代上面的命令,也就是说, lm 会等于 ls -al 这样的一个功能,嘿!那么要如何作呢?就使用 alias 即可!你可以在指令列输入 alias 就可以知道目前的命令别名有哪些了!也可以直接下达命令来设定别名呦:
alias lm='ls -al'

这个到底是修改的哪个文件呢?或者说,哪个文件记录了别名的对应关系?恩,就是跟 .bash_history同在一个目录的文件:.bashrc文件咯(这个是对本用户生效), 在/etc 下还有一个对全局生效的文件/etc/bashrc。。。

至于如果要取消命令别名的话,那么就使用 unalias 吧!例如要将刚刚的 lm 命令别名拿掉,就使用:

[root@linux ~]# unalias lm

• 工作控制(jobs)、前景背景控制:

这部分我们在之后的资源管理章节中会再提及! 使用前、背景的控制可以让工作进行的更为顺利!至于工作控制(jobs)的用途则更广, 可以让我们随时将工作丢到背景中执行!而不怕不小心使用了 [Ctrl] + c 来停掉该程序!真是好样的!此外,也可以在单一登入的环境中,达到多任务的目的呢!

2、bash shell的内建命令:type

为了方便 shell 的操作,其实 bash 已经『内建』了很多指令了,例如cd ,  umask 等指令,都是内建在 bash 当中的! 那我怎么知道这个指令是来自于外部指令(指的是其它非 bash 套件所提供的指令) 或是内建在 bash 当中的呢? 利用 type 这个指令来观察即可!

[root@linux ~]#
type [-tpa] name

参数:
:不加任何参数时,则 type 会显示出那个 name 是外部指令还是 bash 内建的指令!

-t :当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义:
 file :表示为外部指令;
alias :表示该指令为命令别名所设定的名称;
builtin :表示该指令为 bash 内建的指令功能;

-p :如果后面接的 name 为指令时,会显示完整文件名(外部指令)或显示为内建指令;

-a  :会将由 PATH 变量定义的路径中,将所有含有 name 的指令都列出来,包含 alias

范例:

范例一:查询一下 ls 这个指令是否为 bash 内建?

[root@linux ~]#
type ls

ls is aliased to `ls --color=tty'

# 没有加上任何参数,仅列出 ls 这个指令的最主要使用情况

[root@linux ~]# type -t ls

alias

# -t 参数则仅列出 ls 这个指令的最主要使用情况说明

[root@linux ~]# type -a ls

ls is aliased to `ls --color=tty'

ls is /bin/ls

# 利用所有方法找出来的 ls 相关信息都会被列出来!

3、bash shell中的变量

[root@linux ~]# echo $PATH

/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin

[root@linux ~]# echo ${PATH}

变量的取用就如同上面的范例,利用 ehco 就能够读出,只是需要在变量名称前面加上 $ , 或者是以 ${variable} 的方式来取用都可以!当然啦,那个 echo 的功能可是很多的, 我们这里单纯是拿 echo 来读出变量的内容而已,更多的 echo 使用,请自行给他 man echo 吧! ^_^

例题一:请在屏幕上面显示出您的环境变量 HOME 与 MAIL:

 答:

echo $HOME          echo $MAIL

[root@linux ~]# echo $myname

<==这里并没有任何数据~因为这个变量尚未被设定!是空的!

[root@linux ~]# myname=VBird

[root@linux ~]# echo $myname

VBird <==出现了!因为这个变量已经被设定了!

取消变量:[root@linux ~]#unset  myname

4、环境变量env,set,export等命令

环境变量可以帮我们达到很多功能~包括家目录的变换啊、提示字符的显示啊、执行文件搜寻的路径啊等等的,要查询目前我的 shell 环境中, 有多少变量啊?可以利用两个指令来查阅,分别是envexport

[root@linux ~]#
env

HOSTNAME=linux.dmtsai.tw           <== 这部主机的主机名称

SHELL=/bin/bash                               <== 目前这个环境下,使用的 Shell 是哪一个程序?

TERM=xterm                                       <== 这个终端机使用的环境是什么类型

HISTSIZE=1000                                <== 这个就是『记录指令的笔数』在 FC4 预设可记录 1000 笔

USER=root                                          <== 使用者的名称啊!

LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:
                 <== 一些颜色显示

ENV=/root/.bashrc                                       <== 使用的个人环境设定档

MAIL=/var/spool/mail/root                              
 <== 这个使用者所取用的 mailbox 位置

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin:

/root/bin                                                      
 <== 不再多讲啊!是执行文件指令搜寻路径

INPUTRC=/etc/inputrc                                    <== 与键盘按键功能有关。可以设定特殊按键!

PWD=/root                                                    
 <== 目前使用者所在的工作目录 (利用 pwd 取出!)

LANG=en_US.UTF-8                                   <== 这个与语系有关,底下会再介绍!

HOME=/root                                                     <== 这个使用者的家目录啊!

_=/bin/env                                                            <== 上一次使用的指令的最后一个参数(或指令本身)

而除了这些环境变量之外,还有没有什么重要的变量呢?当然有啊!
我们在 bash 的环境下,其实还有一些挺重要的变量,这些变量是『在这个 shell 环境下有效』的, 如果是在『子程序』,这些变量值就不会相同了。 那么如何观察目前 shell 环境下的所有变量呢?很简单啊,就用 set 即可!set 这个指令除了会将环境变量列出来之外,其它我们的自订变量,与所有的变量,都会被列出来喔!信息多好多。 底下仅列出几个重要的内容。

[root@linux ~]# set

BASH=/bin/bash                                     <== bash 的主程序放置路径

BASH_VERSINFO=([0]="3" [1]="00" [2]="16" [3]="1" [4]="release"[5]="i386-redhat-linux-gnu")                <== bash 的版本啊!

BASH_VERSION='3.00.16(1)-release'                                                        <== bash 的版本啊!

COLORS=/etc/DIR_COLORS.xterm                                                           <== 使用的颜色纪录文件

COLUMNS=115                                                                                  <== 在目前的终端机环境下,使用的字段有几个字符长度

HISTFILE=/root/.bash_history                                                          <== 历史命令记录的放置档案,隐藏档

HISTFILESIZE=1000                                        
 <== 存起来(与上个变量有关)的档案之指令的最大纪录笔数。

HISTSIZE=1000                                                
<== 目前环境下,可记录的历史命令最大笔数。

HOSTTYPE=i386                                          
   <== 主机安装的软件主要类型。我们用的是 i386 兼容机器软件

IFS=$' \t\n'                                                    
 <== 预设的分隔符

LINES=35                                                  
    <== 目前的终端机下的最大行数

MACHTYPE=i386-redhat-linux-gnu                                    
 <== 安装的机器类型

MAILCHECK=60                                                 <== 与邮件有关。每 60 秒去扫瞄一次信箱有无新信!

OLDPWD=/home                                                        
<== 上个工作目录。我们可以用 cd - 来取用这个变量。

OSTYPE=linux-gnu                                                      <== 操作系统的类型!

PPID=20046                                                            <== 父程序的 PID (会在后续章节才介绍)

PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"'    <== 上面这个是命令提示字符!与底下也有关。

PS1='[\u@\h \W]\$ '                     <== PS1 就厉害了。这个是命令提示字符,也就是我们常见的[root@linux ~]# 或 [dmtsai ~]$ 的设定值啦!可以更动的!

RANDOM=13586                       <== 随机数啊!上面已经提过啰~

SUPPORTED=zh_TW.UTF-8:zh_TW:zh:en_US.UTF-8                       <== 本系统所支持的语系

name=VBird                                                
  <== 刚刚设定的自订变量也可以被列出来喔!

$                                                          <== 目前这个 shell 所使用的 PID

?                                                      
  <== 刚刚执行完指令的回传值。

一般来说,不论是否为环境变量,只要跟我们目前这个 shell 的操作接口有关的变量, 通常都会被设定为大写字符,也就是说,『基本上,在 Linux 预设的情况中,使用{大写的字母}来设定的变量一般为系统由于你登入 Linux 之后会取得一个 PID ,而你的设定将只对这个 PID 与子程序有关!此外, 这次登入所进行的变量设定,如果没有更动到设定档, 那么这次设定的变量在下次登入时将被取消掉 ( 因为程序 PID 不见啰! ) !所以啰, 如果你想要你的变量每次都能在你登入的时候自动就设定好了,那么就必须将你的设定写入登入时加载的设定档!

$:(关于本 shell 的 PID) 其实这个咚咚代表的是『目前这个 Shell 的执行绪代号』,亦即是所谓的 PID (Process ID)。 更多的程序观念,我们会在第四章的时候提及。想要知道我们的 shell 的 PID ,就可以: echo $$ 即可!

• ?:(关于上个执行指令的回传码) 虾密?问号也是一个特殊的变数?没错!在 bash 里面这个变量可重要的很! 这个变数是:『上个执行的指令所回传的值』, 上面这句话的重点是『上一个指令』与『回传值』两个地方。当我们执行某些指令时, 这些指令都会回传一个执行后的代码。一般来说,如果成功的执行该指令, 则会回传一个 0 值,如果执行过程发生错误,就会回传『错误代码』才对!一般就是以非为 0 的数值来取代。
我们以底下的例子来看看:

[root@linux ~]# echo $SHELL

/bin/bash

[root@linux ~]# echo $?

0

# 因为上个指令执行过程中,并没有错误,为成功的执行完毕,所以回传 0 。

[root@linux ~]# 12name=VBird

-bash: 12name=VBird: command not found

[root@linux ~]# echo $?

127

# 发生错误啦!所以 echo $? 时,就会出现错误的代码!

# 我们可以利用这个代码来搜寻错误的原因喔!

[root@linux ~]# echo $?

0

# 咦!怎么又变成正确了?这是因为 "?" 只与『上一个执行指令』有关,所以,我们上一个指令是执行『 echo $? 』,当然没有错误,所以是 0 没错!

自订变量转成环境变量: export

功能说明:设置或显示环境变量。(比如我们要用一个命令,但这个命令的执行文件不在当前目录,这样我们每次用的时候必须指定执行文件的目录,麻烦,在代码中先执行export,这个相当于告诉程序,执行某某东西时,需要的文件或什么东东在这些目录里)

语  法:export [-fnp][变量名称]=[变量设置值]

补充说明:在shell中执行程序时,shell会提供一组环境变量。 export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。

参  数:

    -f  代表[变量名称]中为函数名称。 

   -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。 

   -p  列出所有的shell赋予程序的环境变量。

一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。

在 linux 里设置环境变量的方法 ( export PATH )

 一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量。例如我的mips-linux-gcc编译器在“/opt/au1200_rm
/build_tools/bin”目录下,build_tools就是我的编译工具,则有如下三种方法来设置环境变量:

1、直接用export命令:
#export
PATH=$PATH:/opt/au1200_rm/build_tools/bin
查看是否已经设好,可用命令export查看:

[root@localhost bin]#export
declare -x BASH_ENV="/root/.bashrc"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="localhost.localdomain"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.GB18030"
declare -x LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/opt/au1200_rm/build_tools"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/au1200_rm/build_tools/bin"
declare -x PWD="/opt/au1200_rm/build_tools/bin"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_AUTH_SOCK="/tmp/ssh-XX3LKWhz/agent.4242"
declare -x SSH_CLIENT="10.3.37.152 2236 22"
declare -x SSH_CONNECTION="10.3.37.152 2236 10.3.37.186 22"
declare -x SSH_TTY="/dev/pts/2"
declare -x TERM="linux"
declare -x USER="root"
declare -x USERNAME="root"

可以看到灰色部分有设置的路径,说明环境变量已经设好,PATH里面已经有了我要加的编译器的路径。

2、修改profile文件:
#vi /etc/profile
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"

3. 修改.bashrc文件:
# vi /root/.bashrc
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"

后两种方法一般需要重新注销系统才能生效,最后可以通过echo命令测试一下:
# echo $PATH
看看输出里面是不是已经有了 /my_new_path这个路径了。

另有:4. 修改/etc/re.local文件:
            # vi /etc/re.local
            在里面加入:
            export PATH="$PATH:/opt/au1200_rm/build_tools/bin"

“/bin”、“/sbin”、“ /usr/bin”、“/usr/sbin”、“/usr/local/bin”等路径已经在系统环境变量中了,如果可执行文件在这几个标准位置,在终端命令行输入该软件可执行文件的文件名和参数(如果需要参数),回车即可。

  如果不在标准位置,文件名前面需要加上完整的路径。不过每次都这样跑就太麻烦了,一个“一劳永逸”的办法是把这个路径加入环境变量。命令 export
$PATH="路径”(或“PATH=$PATH:路径”) ($PATH为环境变量名,如DVSDK;调用时用$DVSDK)可以把这个路径加入环境变量,但是退出这个命令行就失效了。要想永久生效,需要把这行添加到环境变量文件里。有两个文件可选:“/etc/profile”和用户主目录下的“.bash_profile”,“/etc/profile”对系统里所有用户都有效,用户主目录下的“.bash_profile”只对这个用户有效。

  export $PATH="$PATH:路径1:路径2:...:路径n” (或“PATH=$PATH:路径1:路径2:...:路径n" ),意思是可执行文件的路径包括原先设定的路径,也包括从“路径1”到“路径n”的所有路径。当用户输入一个一串字符并按回车后,shell会依次在这些路径里找对应的可执行文件并交给系统核心执行。那个“$PATH”表示原先设定的路径仍然有效,注意不要漏掉。某些软件可能还有“PATH”以外类型的环境变量需要添加,但方法与此相同,并且也需要注意“$”。

  注意,与DOS/Window不同,UNIX类系统环境变量中路径名用冒号分隔,不是分号。另外,软件越装越多,环境变量越添越多,为了避免造成混乱,建议所有语句都添加在文件结尾,按软件的安装顺序添加。

  格式如下():

  # 软件名-版本号

  PATH=$PATH:路径1:路径 2:...:路径n

  其他环境变量=$其他环境变量:...

  在“profile”和“.bash_profile”中,“#”是注释符号,写在这里除了视觉分隔外没有任何效果。

  设置完毕,注销并重新登录,设置就生效了。如果不注销,直接在shell里执行这些语句,也能生效,但是作用范围只限于执行了这些语句的shell。

  相关的环境变量生效后,就不必老跑到软件的可执行文件目录里去操作了。

 

----------------------------------------------------------------------------------------------------------------------------------------------

  

执行一个脚本时,会先开启一个子shell环境(不知道执行其它程序是不是这样),然后将父shell中的所有系统环境变量复制过来,这个脚本中的语句就在子shell中执行。(也就是说父shell的环境变量在子shell中可以调用,但反过来就不行,如果在子shell中定义了环境变量,则只对该shell或者它的子shell有效,当该子shell结束时,也可以理解为脚本执行完时,变量消失。)为了证明这一点,请看脚本内容:

  test=’value’

  export test

  这样的脚本执行完后,test实际上是不存在的。接着看下面的:

  test=’value’

  export test

  bash

  这里在脚本最后一行再开一个子shell,该shell应该是脚本文件所在shell的子shell,这个脚本执行完后,是可以看到test这个变量的,因为现在是处于它的子shell中,当用exit退出子shell后,test变量消失。

  如果用source对脚本进行执行时,如果不加export,就不会在子shell中看到这个变量,因为它还不是一个系统环境变量呀,如脚本内容是:

  test=’value’

  用source执行后,在shell下是能看到这个变量,但再执行bash开一个子shell时,test是不会被复制到子shell中的,因为执行脚本文件其实也是在一个子shell中运行,所以我再建另一个脚本文件执行时,是不会输入任何东西的,内容如:echo $test。所以这点特别注意了,明明在提示符下可以用echo $test输出变量值,为什么把它放进脚本文件就不行了呢?

  所以得出的结论是:

1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;

2、一个shell中的系统环境变量才会被复制到子shell中(用export定义的变量);

3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失(并不能返回到父shell中)。

4、不用export定义的变量只对该shell有效,对子shell也是无效的。

  后来根据版主的提示,整理了一下贴子:为什么一个脚本直接执行和用source执行不一行呢?这也是我自己碰到的一个问题。manual原文是这样的:Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename.明白了为什么不一样了吧?直接执行一个脚本文件是在一个子shell中运行的,而source则是在当前shell环境中运行的。

语系档案的变量 (locale)

还记得我们在首次进入 Linux 那个章节里面提到的,关于语系编码的问题吗? 就是当我们使用 man command 的方式去查询某个数据的说明文件时,该说明档的内容可能会因为我们使用的语系, 而产生一些乱码。另外,利用 ls 查询档案的时间时,也可能会有乱码出现在时间的部分。 那个问题其实就是语系的问题啦。 目前大多数的 Linux distributions 已经都是支持万国码,此外,也都支持大部分的语言语系了。 这有

[root@linux ~]# LANG                                   <==主语言的环境

[root@linux ~]# LC_CTYPE                          <==字符辨识的编码

[root@linux ~]# LC_NUMERIC                    <==数字系统的显示讯息

[root@linux ~]# LC_TIME                              <==时间系统的显示数据

[root@linux ~]# LC_COLLATE                      <==字符串的比较与排序等

[root@linux ~]# LC_MONETARY                  <==币值格式的显示等

[root@linux ~]# LC_MESSAGES                  <==讯息显示的内容,如菜单、错误讯息等

[root@linux ~]# LC_ALL                                  <==语言环境的整体设定。

当我使用 locale这个命令时,系统 就会显示系统支持的语系,这个记录在文件/usr/lib/locale文件中。但是目前此shell支持的语系,要看SUPPORTED这个变量才行的。

那么,如果我想要修订系统的语系支持呢?可以修订 /etc/sysconfig/i18n 这个档案呢! 这个档案的内容有点像这样:

[root@linux ~]# vi /etc/sysconfig/i18n

LANG="en_US.UTF-8"

SYSFONT="latarcyrheb-sun16"

SUPPORTED="zh_TW.UTF-8:zh_TW:zh:en_US.UTF-8"

你可以在这个档案当中加入 LC_TIME 或者其它语系相关变量的设定内容, 也可以直接修改 LANG 那个变量即可啊! ^_^ 但,事实上,我们还可以透过个人的环境设定档来设定 LANG 呢! 如此一来,则不必修订系统的语系档案,比较安全啦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 扩展