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

1·、bash shell的功能

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

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

• 历史命令:history

[root@linux ~]# history [n]
[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 呢! 如此一来,则不必修订系统的语系档案,比较安全啦!

时间: 2024-12-31 15:25:53

linux 基础学习之三:bash shell初识 上的相关文章

linux 基础学习之四:shell脚本学习(1)

1.shell脚本概述 什么是 shell script 呢?  shell 我们在 认识 bash 当中已经提过了,那是一个文字接口底下让我们与系统沟通的一个工具接口,那么 script 是啥? 字面上的意义, script 是『脚本.剧本』的意思.整句话是说, shell script 是针对 shell 所写的『剧本!』 什么东西啊?呵呵!其实, shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文字文件,将一些 shell 的语法

linux 基础学习之五:shell脚本学习(2)——基本语法

1. 第一行必须是"#!/bin/sh" 它不是注释,"#!/bin/sh"是对shell的声明,说明你所用的是那种类型的shell及其路径所在: 如果没有声明,则脚本将在默认的shell中执行,默认shell是由用户所在的系统定义为执行shell脚本的shell. 如果脚本被编写为在Kornshell ksh中运行,而默认运行shell脚本的为C shell csh,则脚本在执行过程中很可能失败. 所以建议大家就把"#!/bin/sh"当成C

使用Python脚本在Linux下实现部分Bash Shell的教程_python

对于Linux用户来说,命令行的名声相当的高.不像其他操作系统,命令行是一个可怕的命题,但是对于Linux社区中那些经验丰富的大牛,命令行却是最值得推荐鼓励使用的.通常,命令行对比图形用户界面,更能提供更优雅和更高效的解决方案. 命令行伴随着Linux社区的成长,UNIX shells,例如 bash和zsh,已经成长为一个强大的工具,也是UNIX shell的重要组成部分.使用bash和其他类似的shells,可以得到一些很有用的功能,例如,管道,文件名通配符和从文件中读取命令,也就是脚本.

linux基础命令(26) 用SecureCRT来上传和下载文件

用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的, SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. 文件传输协议: 文件传输是数据交换的主要形式.在进行文件传 输时,为使文件能被正确识别和传送,我们需要在两台计算机之间建立统一的传输协议.这个协议包括了文件的识别.传送的起 止时间.错误的判断与纠正等内容.常见的传输协议有以下几种: ASCII:这是最快的传输协议,但只能传送文本文件. Xmode

c/c++unix/linux基础学习笔记-常用命令和vi的使用

linux 基本命令的使用-命令在ubuntu下面执行,有些命令通用其他linux,有些不通用. 多条命令间用;号隔开,回车后可以一起执行. clear-前屏,pwd显示当前目录,cd跳转目录. sudo [命令]  -ubuntu 下以管理员身份运行命令. 一般情况下,运行当前目录下的程序,要用 ./文件名 执行. 查看当前shell名称:ps 进入另外一个shell,直接输入shell名称:ksh/tcsh/sh/bash,退出一个shell用:exit. 切换shell命令,如:exec

Linux进程自动监控bash shell脚本

该脚本的用途: 主要用于监控 linux VPS服务器负载及内存占用,如 MySQl.php-fpm,当负载或内存占用达到设置值后,便自动重启该进程以避免宕机. 代码如下: # 设置最大内存占用百分比 PID_MEM_MAX="85" # 设置最大系统负载 SYS_LOAD_MAX="3" # 设置需要监控的服务名称 NAME_LIST="php-fpm mysql" for NAME in $NAME_LIST do # 初始化内存统计 PID

linux 基础学习之一:文件管理

1.目录与文件 首先我们要明白,对于文件和目录的权限是不同 的,同样是x权限,放在目录和文件上的意思不同.在这里杨老师给了一个最简单的理解,x可以理解问windows下的双击事件,对文件来说,可以执行:对目录来说,你可以进入这个目录. 执行ls -l 之后,不论是文件或者目录都会列出如下属性: [root@localhost root]#ls -l total  5921 -rw-r--r--      1 root root 1581 11月 24 18:14 anaconda-ks.cfg 

linux 基础学习之二:ext2文件系统研究

ext2归纳的几个特点: • Blocks 与 inodes 在一开始格式化时 (format) 就已经固定了: • 一个 partition 能够容纳的档案数与 inode 有关: • 一般来说,每 4Kbytes 的硬盘空间分配一个 inode : • 一个 inode 的大小为 128 bytes: • Block 为固定大小,目前支持 1024/2048/4096 bytes 等: • Block 越大,则损耗的硬盘空间也越多. • 关于单一档案: 若 block size=1024,最

Linux命令学习教程

linux基础命令(1) ls命令 linux基础命令(2) cd命令 linux基础命令(3) pwd命令 linux基础命令(4) mkdir命令 linux基础命令(5) rm命令 linux基础命令(6) rmdir命令 linux基础命令(7) mv命令 linux基础命令(8) cp命令 linux基础命令(9) touch命令 linux基础命令(10) cat命令 linux基础命令(11) nl命令 linux基础命令(12) more命令 linux基础命令(13) less