linux杂记(十)what is BASH Shell

时间:2023-01-07 17:30:07

first,what is shell?其实只要是碰过计算机的,对于OS(Operation System操作系统,不管是linux、unix、windows)有点概念的人大多都听过这个名词,因为只要有OS那么就离不开Shell。其实Shell就是将我们输入的指令与kernel(核心)的沟通,使kernel可以控制hardware硬件(例如声卡,网卡,显卡)来正确无误工作。

基本上,替我们工作的是【hardware】,控制硬件的是【kernel】,而我们user则是利用【shell】控制一些kernel通过的【utility(工具)】来操控硬件替我们正确工作。更进一步,由于kernel听不懂人类语言,而人类也没办法直接记得kernel的语言,所以两者的沟通就得由shell来支持。

系统的shell与/etc/shells功能

由于早年Unix年代,发展者众,所以由于shell依赖发展者的不同就有许多版本,例如Bourne SHell(sh)、在Sun里头预设的C SHell、商业上常用的K SHell、还有TCSH等等。linux使用的版本就称为【Bourne Again SHell(简称bash)】,这个shell是Bourne Shell增强版,也是基准于GNU的架构下发展出来的。

那么目前我们linux有多少我们可以使用的shells?check一下/etc/shells这个档案,至少就有底下这几个可以用的shells:

/bin/sh (已经被 /bin/bash 所取代)
/bin/bash (就是 Linux 预设的 shell)

为什么我们系统上的 shell 要写入 /etc/shells 这个档案啊? 这是因为系统某些服务在运行过程中, 会去检查使用者能够使用的 shells ,而这些 shell 的查询就是藉由 /etc/shells 这个档案!

举例来说,某些 FTP 网站会去检查使用者的可用 shell ,而如果你不想要让这些使用者使用 FTP 以外的主机资源时,可能会给予该使用者一些怪怪的 shell,让使用者无法以其它服务登入主机。 这个时候,你就得将那些怪怪的 shell 写到 /etc/shells 当中了。举例来说,我们的 FC4 的 /etc/shells 里头就有
个 /sbin/nologin 档案的存在,这个就是我们说的怪怪的 shell了。

Bash shell的功能

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

使用bash里头相当nice的一个功能就是【能记忆使用过的指令】,只要在指令列使用【上下键】就可以找到前一个输入的指令。在很多distribution里头,预设的指令记忆功能就可以达1000个。记录的档案就在你的HOME目录内的.bash_history里。不过,~/.bash_history记录的是前一次登入以前所执行过的指令,而至于这一次登入所执行的指令都被暂存在内存中,当你成功注销系统后,该指令记忆才会记录到.bash_history当中。

这最大的好处就是可以【查询曾经做过的举动】,以作为除错工具。但如果被黑客入侵,那么他只要翻你曾经执行过的指令,而刚好你的指令又跟系统有关(如直接输入MySQL的密码在指令列上面),那么就很容易破解你的linux主机。所以最好是将记录的指令数目减小一点。

  • 命令与档案补全功能

[tab]按键的功能是bash里头特有的,常常在bash环境中使用[tab]是个很好的习惯,因为让你少打很多字,而且确定输入的数据是正确的。

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

如果我需要知道这个目录底下所有档案(包含隐藏档)及所有档案属性,那么就必须下达ls -al,有没有使用自定命令lm来取代前面的命令呢?有,使用alias即可。在指令列输入alias就可以知道目前的命令别名有哪些了。也可以直接下达命令来设定别名:

alias lm='ls -al'

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

  • Shell scripts的强大功能

在 DOS 年代还记得将一堆指令写在一起的所谓的『批次档』吧?在 Linux 底下的 shell scripts 则发挥的更为强大的功能,可以将您日常生活当中常需要下达的连续指令写成一个档案, 该档案并且可以透过对谈交互式的方式来进行主机的侦测工作!也可以藉由 shell 提供的环境变量及相关指令来进行设计,整个设计下来几乎是一个小型的程序语言。

  • 万用字符

除了完整的字符串之外, bash 还支持许多的万用字符来帮助使用者查询与指令下达。 举例来说,想要知道 /usr/X11R6/bin 底下有多少以 xt 为开头的档案吗?使用: ls -l /usr/X11R6/bin/xt* 就能够知道。

Bash shell的内建命令:type

我怎么知道这个指令是来自于外部指令(指的是其它非 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

shell的变量功能

举个简单的例子来说, sendmail 的 smtp 存放 mail 路径是经由/etc/profile 里头的:MAIL="/var/spool/mail/$USER"来设定的,而当我修改了上面这一个咚咚,然后重新开机之后! 我的邮件就可以存放到不同的路径去了!而且不会有问题!可以顺利的【在 Linux 主机上面】收发。然而问题发生在 pop3这个服务上面,由于 pop3 的预设路径是在 source code 里头,而且就正是 /var/spool/mail 这个路径,也就是说,不论我怎么修正我的【变量】, pop3 都不为所动!所以就无法直接以 pop3 来收信了(例如OutLook 就不能工作了)!会发生密码不接受的问题!

再来继续讲到其它的变量功能好了,关于能不能执行某个指令, 与 PATH 这个变量也有很大的关系的。举例来说,我们在任何地方下达 ls 这个指令时,系统就是透过 PATH 这个变量里面的内容所记录的路径顺序来搜寻指令的呢!如果在搜寻完 PATH 变量内的路径还找不到 ls 这个指令时,就会在屏幕上显示『 command not found 』的错误讯息了。

那么什么是变量?变量就是以一组文字或符号等,来取代一些设定或者是一串保留的数据!

如何显示变量?使用 echo!

变量的取用与设定:echo, 变量设定规则, unset

利用 echo 这个指令来取用变量,但是,变量在被取用时,前面必须要加上$ 才行,举例来说,要知道 PATH 的内容,怎么办好?

[KANO@kelvin ~]$ echo $variable
[KANO@kelvin ~]$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/KANO/.local/bin:/home/KANO/bin
[KANO@kelvin ~]$ echo ${PATH}

现在我们知道了变量与变量内的之间的相关性了,那么我要如何【设定】或者是【修改】 某个
变量的内容呢?用【等号(=)】连接变量与他的内容。当一个变量名称尚未被设定时,预设的内容是【空】的。 另外,变量在设定时,还是需要符合某些规定的,否则会设定失败喔! 这些规则如下所示。

  1. 变量与变量内容以等号【=】来连结;
  2. 等号两边不能直接接空格符;
  3. 变量名称只能是英文字母与数字,但是数字不能是开头字符;
  4. 若有空格符可以使用双引号【"】或单引号【'】来将变量内容结合起来,但必须要特别注意,双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符;
  5. 必要时需要以跳脱字符【\】来将特殊符号(如Enter,$,\,空格符,'等)变成一般符号;
  6. 在一串指令汇总,还需要藉由其它的指令提供的信息,可以使用quote【`command`】:(注意,`是键盘上方数字键1左边那个按键,不是单引号)
  7. 若该变量为扩增变量内容时,则需以双引号及$变量名称,如【"$PATH":/home】继续累加内容;
  8. 若该变量需要在其它子程序执行,则需要以export来使变量变成环境变量,如【export PATH】;
  9. 通常大写字符为系统预设变量,自行设定变量可以使用小写字符,方便判断;
  10. 取消变量的方法:【unset 变量名称】
范例一:设定一变量 name ,且内容为 XXXX。
[root@linux ~]# 1name=XXXX
-bash: 1name=XXXX: command not found<==屏幕会显示错误!因为不能以数字开头!
[root@linux ~]# name = XXXX<==还是错误!因为有空白!
[root@linux ~]# name=XXXX <==OK
范例二:承上题,若变量内容为 XXXX's name 呢?
[root@linux ~]# name=XXXX's name
# 因为单引号可以将 Enter 这个特殊字符取消,所以,您可以继续在下一行输入内容
# 不过,这与我们要达到的功能不同,所以,算是失败的!
[root@linux ~]# name="XXXX's name"<==OK
[root@linux ~]# name=XXXX\'s\ name
# 利用反斜线 (\) 跳脱特殊字符,例如单引号与空格键
范例三:我要在 PATH 这个变量当中『累加』:/home/dmtsai/bin 这个目录
[root@linux ~]# PATH=$PATH:/home/dmtsai/bin
[root@linux ~]# PATH="$PATH":/home/dmtsai/bin
# 上面这两种格式在 PATH 里头的设定都是 OK 的!但是底下的例子就不见得了!
范例四:呈范例三,我要将 name 的内容多出 "yes" 呢?
[root@linux ~]# name=$nameyes
# 知道了吧?如果没有双引号,那么变量成了啥?name 的内容是 $nameyes 这个变量!
# 呵呵!我们可没有设定过 nameyes 这个变量吶!所以,应该是底下这样才对!
[root@linux ~]# name="$name"yes
[root@linux ~]# name=${name}yes
范例五:如何让我刚刚设定的 name=XXXX可以用在下个 shell 的程序?
[root@linux ~]# name=XXXX
[root@linux ~]# bash <==进入到所谓的子程序
[root@linux ~]# echo $name <==并没有刚刚设定的内容
[root@linux ~]# exit <==离开刚刚的子程序
[root@linux ~]# export name
[root@linux ~]# bash <==进入到所谓的子程序
[root@linux ~]# echo $name <==出现了设定值
[root@linux ~]# exit <==离开刚刚的子程序
# 什么是【子程序】呢?就是说,在我目前这个 shell 的情况下,
# 去启用另一个新的 shell ,新的那个 shell 就是子程序啦!在一般的状态下,
# 父程序的自订变量是无法在子程序内使用的。但是透过 export 将变量变成
# 环境变量后,就能够在子程序底下应用了!
范例六:如何进入到您目前核心的模块目录?
[root@linux ~]# cd /lib/modules/`uname -r`/kernel
# 每个操作系统核心版本都不相同,以 FC4 为例,他的预设核心版本是
# -.1369_FC4 所以,他的模块目录在 /lib/modules/-.1369_FC4/kernel 。
# 因为每个 distributions 的这个值都不相同,但是我们却可以利用 uname -r 这个指令
# 先取得版本信息,所以啰,就可以透过上面指令当中的内含指令 `uname -r`
# 先取得版本输出到 cd .. 那个指令当中,就能够顺利的进入目前核心的驱动程序所放置
# 的目录。
范例七:取消刚刚设定的 name 这个变量内容
[root@linux ~]# unset name

环境变量的功能

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

  • env
范例以:列出目前的shell环境下所有环境变量与其内容[KANO@kelvin ~]$ env
XDG_VTNR=
XDG_SESSION_ID=
HOSTNAME=kelvin   <== 这部主机的主机名称
GIO_LAUNCHED_DESKTOP_FILE_PID=
IMSETTINGS_INTEGRATE_DESKTOP=yes
GPG_AGENT_INFO=/run/user//keyring/gpg::
TERM=xterm   <== 这个终端机使用的环境是什么类型
SHELL=/bin/bash   <== 目前这个环境下,使用的 Shell 是哪一个程序?
XDG_MENU_PREFIX=gnome-
HISTSIZE=1000   <== 这个就是【记录指令的笔数】预设可记录 1000 笔
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
IMSETTINGS_MODULE=FCITX
QT_GRAPHICSSYSTEM_CHECKED=
USER=KANO   <== 使用者的名称
LS_COLORS=rs=:di=;:;:mh=:pi=;:so=;:;:bd=;;:cd=;;:or=;;:mi=;;;:;:sg=;:ca=;:tw=;:ow=;:st=;:ex=;:*.;:*.tgz=;:*.arc=;:*.arj=;:*.taz=;:*.lha=;:*.lz4=;:*.lzh=;:*.lzma=;:*.tlz=;:*.txz=;:*.tzo=;:*.t7z=;:*.;:*.z=;:*.Z=;:*.dz=;:*.gz=;:*.lrz=;:*.lz=;:*.lzo=;:*.xz=;:*.bz2=;:*.bz=;:*.tbz=;:*.tbz2=;:*.tz=;:*.deb=;:*.rpm=;:*.jar=;:*.war=;:*.ear=;:*.sar=;:*.rar=;:*.alz=;:*.ace=;:*.zoo=;:*.cpio=;:*.7z=;:*.rz=;:*.cab=;:*.jpg=;:*.jpeg=;:*.gif=;:*.bmp=;:*.pbm=;:*.pgm=;:*.ppm=;:*.tga=;:*.xbm=;:*.xpm=;:*.tif=;:*.tiff=;:*.png=;:*.svg=;:*.svgz=;:*.mng=;:*.pcx=;:*.mov=;:*.mpg=;:*.mpeg=;:*.m2v=;:*.mkv=;:*.webm=;:*.ogm=;:*.mp4=;:*.m4v=;:*.mp4v=;:*.vob=;:*.qt=;:*.nuv=;:*.wmv=;:*.asf=;:*.;:*.rmvb=;:*.flc=;:*.avi=;:*.fli=;:*.flv=;:*.gl=;:*.dl=;:*.xcf=;:*.xwd=;:*.yuv=;:*.cgm=;:*.emf=;:*.ogv=;:*.ogx=;:*.aac=;:*.au=;:*.flac=;:*.m4a=;:*.mid=;:*.midi=;:*.mka=;:*.mp3=;:*.mpc=;:*.ogg=;:*.ra=:*.wav=;:*.oga=;:*.opus=;:*.spx=;:*.xspf=;:   <== 一些颜色显示
DESKTOP_AUTOSTART_ID=102b42e5d3dc2ed48f144454270326433800000159530002
SSH_AUTH_SOCK=/run/user//keyring/ssh
SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/,unix/unix:/tmp/.ICE-unix/
USERNAME=KANO
GIO_LAUNCHED_DESKTOP_FILE=/home/KANO/.config/autostart/guake.desktop
PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/KANO/.local/bin:/home/KANO/bin   <==是执行文件指令搜寻路径
MAIL=/var/spool/mail/KANO   <== 这个使用者所取用的 mailbox 位置
DESKTOP_SESSION=gnome
QT_IM_MODULE=xim
XDG_SESSION_TYPE=x11
PWD=/home/KANO   <== 目前使用者所在的工作目录 (利用 pwd 取出!)
XMODIFIERS=@im=fcitx
LANG=zh_CN.UTF-8   <== 这个与语系有关
MODULEPATH=/etc/scl/modulefiles:/etc/scl/modulefiles:/usr/share/Modules/modulefiles:/etc/modulefiles:/usr/share/modulefiles
GDM_LANG=zh_CN.UTF-
LOADEDMODULES=
GDMSESSION=gnome
HISTCONTROL=ignoredups
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
XDG_SEAT=seat0
HOME=/home/KANO   <== 这个使用者的HOME目录
SHLVL=
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
XDG_SESSION_DESKTOP=gnome
LOGNAME=KANO
QTLIB=/usr/lib64/qt-3.3/lib
CVS_RSH=ssh
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-nS4TZ10ND8,guid=7b99d27fc5c1a7bd3fc55c625619f8ed
MODULESHOME=/usr/share/Modules
LESSOPEN=|/usr/bin/lesspipe.sh %s
WINDOWPATH=
DISPLAY=:
XDG_RUNTIME_DIR=/run/user/
GTK_IM_MODULE=fcitx
XDG_CURRENT_DESKTOP=GNOME
XAUTHORITY=/run/user//gdm/Xauthority
BASH_FUNC_module()=() {  eval `/usr/bin/modulecmd bash $*`
}
BASH_FUNC_scl()=() {  local CMD=$;
 if [ "$CMD" = "load" -o "$CMD" = "unload" ]; then
 eval "module $@";
 else
 /usr/bin/scl "$@";
 fi
}
_=/usr/bin/env   <== 上一次使用的指令的最后一个参数(或指令本身)

env 是 environment (环境) 的简写。上面的例子当中,是列出来所有的环境变量。当然,如果使用
export 也会是一样的内容。 只不过, export 还有其它额外的功能就是了,我们等一下再提这个 export
指令。那么上面这些变量有些什么功用呢?

HOME : 代表使用者的家目录。
SHELL : 告知我们,目前这个环境使用的 SHELL 是哪支程序? 如果是 bash 的话,预设是/bin/bash !
HISTSIZE : 这个与【历史命令】有关,即是我们曾经下达过的指令可以被系统记录下来,而记录的【笔数】则是由这个值来设定的。
ENV : 这个使用者所使用的个人化环境设定档的读取档案。
MAIL : 当我们使用 mail 这个指令在收信时,系统会去读取的邮件信箱档案 (mailbox)。
PATH : 就是执行文件搜寻的路径。目录与目录中间以冒号(:)分隔, 由于档案的搜寻是依序由 PATH 的变量内的目录来查询,所以,目录的顺序也是重要的。
LANG : 这个重要!就是语系档案。很多数据都会用到他, 举例来说,当我们在启动某些 perl的程序语言档案时,他会主动的去分析语系数据文件, 如果发现有他无法解析的编码语系,可能会产生错误!一般来说,我们中文编码通常是 zh_CN.UTF-8 或者是 zh_CN.gb2312,这两个编码偏偏不容易被解译出来,所以,有的时候,可能需要修订一下语系数据。
RANDOM : 这个玩意儿就是【随机随机数】的变量啦!目前大多数的 distributions 都会有随机数产生器,那就是 /dev/random 这个档案。 我们可以透过这个随机数档案相关的变量 ($RANDOM)来随机取得随机数值喔。在 BASH 的环境下,这个 RANDOM 变量的内容,介于 0~32767 之间,所以,你只要 echo $RANDOM 时,系统就会主动的随机取出一个介于 0~32767 的数值。万一我想要使用 0~9 之间的数值呢?利用 declare 宣告数值类型, 然后这样做就可以了:

[root@linux ~]# declare -i number=$RANDOM*/ ; echo $number
<== 此时会随机取出 ~ 之间的数值
  • 其它所有变量说明:set

如何观察目前 shell 环境下的所有变量呢?就用 set 即可。set 这个指令除了会将环境变量列出来之外,其它我们的自订变量,与所有的变量,都会被列出来!

[root@linux ~]# set
BASH=/bin/bash<== bash 的主程序放置路径
BASH_VERSINFO=([]=]=]=]=]="release"
[]="i386-redhat-linux-gnu")<== bash 的版本啊!
BASH_VERSION='3.00.16(1)-release' <== bash 的版本啊!
COLORS=/etc/DIR_COLORS.xterm<== 使用的颜色纪录档案
COLUMNS=<== 在目前的终端机环境下,使用的字段有几个字符长度
HISTFILE=/root/.bash_history<== 历史命令记录的放置档案,隐藏档
HISTFILESIZE= <== 存起来(与上个变量有关)的档案之指令的最大纪录笔数。
HISTSIZE= <== 目前环境下,可记录的历史命令最大笔数。
HOSTTYPE=i386 <== 主机安装的软件主要类型。我们用的是 i386 兼容机器软件
IFS=$' \t\n' <== 预设的分隔符
LINES= <== 目前的终端机下的最大行数
MACHTYPE=i386-redhat-linux-gnu<== 安装的机器类型
MAILCHECK= <== 与邮件有关。每  秒去扫瞄一次信箱有无新信!
OLDPWD=/home <== 上个工作目录。我们可以用 cd - 来取用这个变量。
OSTYPE=linux-gnu <== 操作系统的类型!
PPID= <== 父程序的 PID (会在后续章节才介绍)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}\007"'
<== 上面这个是命令提示字符!与底下也有关。
PS1='[\u@\h \W]\$ '<== PS1 就厉害了。这个是命令提示字符,也就是我们常见的[root@linux ~]# 或 [dmtsai ~]$ 的设定值!可以更动的!
RANDOM=<== 随机数!
SUPPORTED=zh_TW.UTF-:zh_TW:zh:en_US.UTF- <== 本系统所支持的语系
name=XXXX<== 刚刚设定的自订变量也可以被列出来!
$ <== 目前这个 shell 所使用的 PID
? <== 刚刚执行完指令的回传值。

一般来说,不论是否为环境变量,只要跟我们目前这个 shell 的操作接口有关的变量, 通常都会被设定为大写字符,也就是说,【基本上,在 Linux 预设的情况中,使用{大写的字母}来设定的变量一般为系统内定需要的变量】。

  • PS1:(提示字符的设定)

这是 PS1 (数字的 1 不是英文字母!),这个东西就是我们的『命令提示字符』! 当我们每次按下 [Enter] 按键去执行某个指令后,最后要再次出现提示字符时, 就会主动去读取这个变数值了。上头 PS1 内显示的是一些特殊符号,每个版本 bash 的 PSI 变量内的特殊符号可能有些许的差异, 你应该主动的以 man bash 去查询一下相关的变数。底下我列出 FC4 的环境下, 预设的 bash 的 PS1 变量内的特殊符号代表意义:

\d :代表日期,格式为 Weekday Month Date,例如 "Mon Aug 1"
\H :完整的主机名称。
\h :仅取主机名称的第一个名字。
\t :显示时间,为 24 小时格式,如: HH:MM:SS
\T :显示时间,12 小时的时间格式!
\A :显示时间,24 小时格式, HH:MM
\u :目前使用者的账号名称;
\v :BASH 的版本信息;
\w :完整的工作目录名称。家目录会以 ~ 取代;
\W :利用 basename 取得工作目录名称,所以仅会列出最后一个目录名。
\# :下达的第几个指令。
\$ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $

假设我想要有类似底下的提示字符:

[root@linux /home/dmtsai 16:50 #12]#

那个 # 代表第 12 次下达的指令。 那么应该如何设定 PS1 呢?

[root@linux home]# PS1='[\u@\h \w \A #\#]\$ '
[root@linux /home : #]#
# 看到了吗?提示字符变了!
# 如果您按下 [Enter] 后,该数字就会增加!

$:(关于本 shell 的 PID)
其实这个代表的是【目前这个 Shell 的执行绪代号】,亦即是所谓的 PID (Process ID)。想要知道我们的 shell 的 PID ,就可以: echo $$即可
?:(关于上个执行指令的回传码)
这个变数是:【上个执行的指令所回传的值】, 上面这句话的重点是【上一个指令】与【回传值】两个地方。当我们执行某些指令时, 这些指令都会回传一个执行后的代码。一般来说,如果成功的执行该指令,则会回传一个 0 值,如果执行过程发生错误,就会回传『错误代码』才对!一般就是以非为 0 的数值来取代。 我们以底下的例子来看看:

[root@linux ~]# echo $SHELL
/bin/bash
[root@linux ~]# echo $?

# 因为上个指令执行过程中,并没有错误,为成功的执行完毕,所以回传  。
[root@linux ~]# 12name=XXXX-bash: 12name=XXXX: command not found
[root@linux ~]# echo $?

# 发生错误啦!所以 echo $? 时,就会出现错误的代码!
# 我们可以利用这个代码来搜寻错误的原因
[root@linux ~]# echo $?

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

OSTYPE, HOSTTYPE, MACHTYPE:(主机硬件与核心的等级)

linux杂记(十)what is BASH Shell的更多相关文章

  1. Linux命令行–基本的bash shell命令

    启动shell: /etc/passwd:包含系统用户账户列表以及每个用户的基本配置信息 每个条目有七个字段,每个字段用冒号隔开 用户名 用户密码 用户的系统UID 用户的系统GID 用户的全名 用户 ...

  2. linux杂记(十一)Bash Shell的使用环境

    Bash Shell使用环境 Bash Shell使用环境 1.登录讯息显示数据:/etc/issue,/etc/motd 我们在终端机接口(tty1~tty6)登入的时候,会有几行提示的字符串,那个 ...

  3. Linux 常用命令解析和Bash Shell使用示例脚本演示

     摘要 Linux命令是基于文本格式输入输出的一种程序,依照Unix哲学中强调的程序功能简单,输入宽松,输出严谨,各种程序组合能够具有更强大的功能,而具有这样的灵活性的主要原因是Linux规定程序 ...

  4. linux命令(26)&colon;Bash Shell 获取进程 PID

    转载地址:http://weyo.me/pages/techs/linux-get-pid/ 根据pid,kill该进程:http://www.cnblogs.com/lovychen/p/54113 ...

  5. Linux基础篇二:Bash shell(壳,命令解释器)介绍

    shell执行方式: 第一:输入命令  (简单工作) 第二:   脚本  (适合大量工作) Bash shell 实际上的叫法是  GNU/Bash    如何查询呢:  bash - version ...

  6. Linux 学习笔记 基本的bash shell命令

    Linux 文件系统 Linux讲文件存储在单个目录结构(虚拟目录)中,虚拟目录包含了安装在PC上的所有存储设备的文件路径. Linux虚拟目录中比较复杂的部分是它如何来协调管理各个存储设备.Linu ...

  7. Linux 学习笔记 更多的bash shell命令

    一  监测程序 1.ps 输出运行在系统上的所有程序的许多信息 运行ps命令,也会开启一个进程 默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程. Unix风格的参数(单破折号) - ...

  8. 常见linux命令释义(第八天)—— Bash Shell 的操作环境

    换了新公司,公司的领导很不错.自己感受比较多的地方是,自己的工作效率明显比以前高了.以前会对频繁变动的需求十分不耐烦,现在接到需求后会仔细的思考,进行整体构建.即使以后需求有变动,也能够比较轻易的在原 ...

  9. Linux Bash Shell 快速入门

    BASH 的基本语法 最简单的例子 —— Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     ...

随机推荐

  1. Ring0打开其他设备对象三种方式整理

    1.通过ZwCreateFile打开其他设备的Handle,此函数只能得到句柄.ZwCreateFile与NtCreateFile区别在于NtCreateFile更加底层,ZwCreateFile是基 ...

  2. 使用axis2 soapmonitor监控soap数据

    Using the SOAP Monitor SOAPMonitor使用 使用SOAPMonitor axis2开发笔记-消息监控 WebService大讲堂之Axis2(10):使用soapmoni ...

  3. nginx1

    简介: Nginx全程是什么? Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. 安装 配 ...

  4. golang全文搜索--使用sphinx

    不多废话,测试环境 `ubuntu 13.10` ## 安装 sudo apt-get install sphinxsearch ## 配置 nano /etc/sphinxsearch/sphinx ...

  5. The method onClick&lpar;View&rpar; of type new View&period;OnClickListener&lpar;&rpar;&lbrace;&rcub; must override a superclass

    最近在做一个jWebSocket Android客户端的Demo时遇到如下错误: ok —————— 最近在做一个jWebSocket Android客户端的Demo时遇到如下错误: ".. ...

  6. 【转】解析Java finally

    下文写的关于Java中的finally语句块什么时候执行的问题.什么时候执行呢?和return.continue.break.exit都有关系,尤其return语句非常有意思,于是分享给大家.谢谢Sm ...

  7. Liferay7 BPM门户开发之20&colon; 理解Asset Framework

    Asset框架用于将您开发的门户内容添加Liferay的核心系统功能.打个比方,你开发了一个事件TodoList管理的插件,在列表显示的时候,你可以集成Asset框架,让你的自定义内容支持Tag标签. ...

  8. 对象克隆及属性转换-JavaScript

    在某些项目中,需要将一些返回信息进行其他语言的翻译,可以为不同语言用户提供不同的语言版本.下面是一个实现: /** * @class Translate * @description 查询字典,翻译成 ...

  9. Java并发系列

    一.前言 多线程怎么防止竞争资源,即防止对同一资源进行并发操作,那就是使用加锁机制.这是Java并发编程中必须要理解的一个知识点.其实使用起来还是比较简单,但是一定要理解. 有几个概念一定要牢记: 加 ...

  10. 面试笔试总结(一)之 C&plus;&plus;基础

    C++ 1.智能指针 内存管理 垃圾回收 指针问题 资源管理(内存就是资源) 可以通过引用计数的机制...实现内存回收,不要让内存泄漏. 涉及到内存的泄露的问题: 当创建一个对象的时候(new)而在对 ...