linux杂记(十)what is BASH Shell
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}
现在我们知道了变量与变量内的之间的相关性了,那么我要如何【设定】或者是【修改】 某个
变量的内容呢?用【等号(=)】连接变量与他的内容。当一个变量名称尚未被设定时,预设的内容是【空】的。 另外,变量在设定时,还是需要符合某些规定的,否则会设定失败喔! 这些规则如下所示。
- 变量与变量内容以等号【=】来连结;
- 等号两边不能直接接空格符;
- 变量名称只能是英文字母与数字,但是数字不能是开头字符;
- 若有空格符可以使用双引号【"】或单引号【'】来将变量内容结合起来,但必须要特别注意,双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符;
- 必要时需要以跳脱字符【\】来将特殊符号(如Enter,$,\,空格符,'等)变成一般符号;
- 在一串指令汇总,还需要藉由其它的指令提供的信息,可以使用quote【`command`】:(注意,`是键盘上方数字键1左边那个按键,不是单引号)
- 若该变量为扩增变量内容时,则需以双引号及$变量名称,如【"$PATH":/home】继续累加内容;
- 若该变量需要在其它子程序执行,则需要以export来使变量变成环境变量,如【export PATH】;
- 通常大写字符为系统预设变量,自行设定变量可以使用小写字符,方便判断;
- 取消变量的方法:【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的更多相关文章
- Linux命令行–基本的bash shell命令
启动shell: /etc/passwd:包含系统用户账户列表以及每个用户的基本配置信息 每个条目有七个字段,每个字段用冒号隔开 用户名 用户密码 用户的系统UID 用户的系统GID 用户的全名 用户 ...
- linux杂记(十一)Bash Shell的使用环境
Bash Shell使用环境 Bash Shell使用环境 1.登录讯息显示数据:/etc/issue,/etc/motd 我们在终端机接口(tty1~tty6)登入的时候,会有几行提示的字符串,那个 ...
- Linux 常用命令解析和Bash Shell使用示例脚本演示
摘要 Linux命令是基于文本格式输入输出的一种程序,依照Unix哲学中强调的程序功能简单,输入宽松,输出严谨,各种程序组合能够具有更强大的功能,而具有这样的灵活性的主要原因是Linux规定程序 ...
- linux命令(26):Bash Shell 获取进程 PID
转载地址:http://weyo.me/pages/techs/linux-get-pid/ 根据pid,kill该进程:http://www.cnblogs.com/lovychen/p/54113 ...
- Linux基础篇二:Bash shell(壳,命令解释器)介绍
shell执行方式: 第一:输入命令 (简单工作) 第二: 脚本 (适合大量工作) Bash shell 实际上的叫法是 GNU/Bash 如何查询呢: bash - version ...
- Linux 学习笔记 基本的bash shell命令
Linux 文件系统 Linux讲文件存储在单个目录结构(虚拟目录)中,虚拟目录包含了安装在PC上的所有存储设备的文件路径. Linux虚拟目录中比较复杂的部分是它如何来协调管理各个存储设备.Linu ...
- Linux 学习笔记 更多的bash shell命令
一 监测程序 1.ps 输出运行在系统上的所有程序的许多信息 运行ps命令,也会开启一个进程 默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程. Unix风格的参数(单破折号) - ...
- 常见linux命令释义(第八天)—— Bash Shell 的操作环境
换了新公司,公司的领导很不错.自己感受比较多的地方是,自己的工作效率明显比以前高了.以前会对频繁变动的需求十分不耐烦,现在接到需求后会仔细的思考,进行整体构建.即使以后需求有变动,也能够比较轻易的在原 ...
- Linux Bash Shell 快速入门
BASH 的基本语法 最简单的例子 —— Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 ...
随机推荐
- Java面试题之J2EE是什么
J2EE是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application ...
- CSS3 简易照片墙
代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title& ...
- globalCompositeOperation 学习
globalCompositeOperation globalCompositeOperation即Canvas中的合成操作. 1.source-over 这是默认值,他表示绘制的图形将画在现有画布之 ...
- 执行CMD代码
/// <summary> /// 发送CMD命令(执行命令行) /// </summary> public static void SendCMD(string pwd) { ...
- 关于NGINX下开启PHP-FPM 输出PHP错误日志的设置(已解决)
最近在本地搭建的LNMP的开发环境.为了开发的时候不影响前端的正常开发就屏蔽的PHP里面php.ini中的一些错误提示.但是这样一来,就影响到了后端开发的一些问题比如不能及时调试开发中的一些问题. n ...
- requirejs + vue 项目搭建
以前都是支持 司徒正美 的,毕竟咱们也是跟着 司徒正美 一起走进了前端的世界.所以一般MVVM都是用avalon的,当然也是考虑到项目需要支持IE6,7,8的考虑.当然在用的时候也有一些小坑和bug, ...
- Nodejs学习笔记——Assert(断言)
Assert - a:actual e:expected m:message o:operator v:value b:block assert.fail(a, e, m, o) assert(v, ...
- 一个php创建webservice,并通过c#调用的真实实例
最近需要用php创建webservice供C#和JAVA来调用,通过3天的搜索和尝试,终于成功在C#下调用,JAVA的调用还没开始,为防止忘记,在这里记录下来全过程. 本文参考了许多文章,文中也采用了 ...
- hdu 2828 Lamp 重复覆盖
题目链接 给n个灯和m个开关, 每个灯可以由若干个开关控制, 每个开关也可以控制若干个灯, 问你能否找到一种开关的状态, 使得所有的灯都亮. 将灯作为列, 然后把每个开关拆成两行, 开是一行, 关是一 ...
- Python的编码规范(PEP 8 & Google Python guide)
PEP 8 Python 代码规范整理 click here Goole Python 风格指南 中文版 click here 大家有取舍的看吧. 因为文章不是原创的,所以只贴地址,给大家造成麻烦了, ...