认识bash这个shell

硬件、内核和shell

用户操作计算机流程如下:

用户——>用户界面(shell,KDE,application)——>核心(kernel)——>硬件(hardware)

应用程序处于最外层,因此称为shell,shell的功能是提供用户操作系统的一个接口。狭义的shell指的是命令行软件(包括bash),广义的shell包括图形界面软件

系统的合法shell和/etc/shells功能

系统合法的shell都写入到/etc/shells这个软件,查看该文件如下:

  1. [root@localhost wuchao_test]# cat /etc/shells
  2. /bin/sh            (已经被/bin/bash所替代)
  3. /bin/bash           (Linux默认的shell
  4. /sbin/nologin
  5. /usr/bin/sh
  6. /usr/bin/bash
  7. /usr/sbin/nologin
  8. /bin/tcsh
  9. /bin/csh
  10. [root@localhost wuchao_test]#

用户登陆后可以取得的默认shell都会记录在/etc/passwd文件内:

  1. [root@localhost wuchao_test]# cat /etc/passwd
  2. root:x:::root:/root:/bin/bash
  3. bin:x:::bin:/bin:/sbin/nologin
  4. daemon:x:::daemon:/sbin:/sbin/nologin
  5. adm:x:::adm:/var/adm:/sbin/nologin
  6. lp:x:::lp:/var/spool/lpd:/sbin/nologin
  7. sync:x:::sync:/sbin:/bin/sync
  8. shutdown:x:::shutdown:/sbin:/sbin/shutdown
  9. halt:x:::halt:/sbin:/sbin/halt
  10. mail:x:::mail:/var/spool/mail:/sbin/nologin
  11. operator:x:::operator:/root:/sbin/nologin
  12. games:x:::games:/usr/games:/sbin/nologin
  13. ftp:x:::FTP User:/var/ftp:/sbin/nologin
  14. nobody:x:::Nobody:/:/sbin/nologin
  15. avahi-autoipd:x:::Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
  16. systemd-bus-proxy:x:::systemd Bus Proxy:/:/sbin/nologin
  17. systemd-network:x:::systemd Network Management:/:/sbin/nologin
  18. dbus:x:::System message bus:/:/sbin/nologin
  19. polkitd:x:::User for polkitd:/:/sbin/nologin
  20. abrt:x::::/etc/abrt:/sbin/nologin
  21. tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
  22. unbound:x:::Unbound DNS resolver:/etc/unbound:/sbin/nologin
  23. usbmuxd:x:::usbmuxd user:/:/sbin/nologin
  24. colord:x:::User for colord:/var/lib/colord:/sbin/nologin
  25. amandabackup:x:::Amanda user:/var/lib/amanda:/bin/bash
  26. saslauth:x:::Saslauthd user:/run/saslauthd:/sbin/nologin
  27. libstoragemgmt:x:::daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
  28. geoclue:x:::User for geoclue:/var/lib/geoclue:/sbin/nologin
  29. rpc:x:::Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
  30. setroubleshoot:x::::/var/lib/setroubleshoot:/sbin/nologin
  31. rtkit:x:::RealtimeKit:/proc:/sbin/nologin
  32. ntp:x::::/etc/ntp:/sbin/nologin
  33. qemu:x:::qemu user:/:/sbin/nologin
  34. rpcuser:x:::RPC Service User:/var/lib/nfs:/sbin/nologin
  35. nfsnobody:x:::Anonymous NFS User:/var/lib/nfs:/sbin/nologin
  36. radvd:x:::radvd user:/:/sbin/nologin
  37. chrony:x::::/var/lib/chrony:/sbin/nologin
  38. sssd:x:::User for sssd:/:/sbin/nologin
  39. pulse:x:::PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
  40. gdm:x::::/var/lib/gdm:/sbin/nologin
  41. gnome-initial-setup:x::::/run/gnome-initial-setup/:/sbin/nologin
  42. avahi:x:::Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
  43. postfix:x::::/var/spool/postfix:/sbin/nologin
  44. sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  45. tcpdump:x::::/:/sbin/nologin
  46. wuchao:x:::rootUser(wuchao):/home/wuchao:/bin/bash

bash shell的功能

既然/bin/bash是Linux默认的shell,接下来了解下这个shell。

bash有以下优点:

命令记忆功能

可以记下使用过的命令,只要在命令行按上下关键就可以找到前/后输入过的命令。这些命令记录在~/.bash_history,注意的是该文件只记录上次之前的命令,本次的所有命令暂存在内存里

命令补全功能

tab键接在一串命令的第一个字后面,则为命令补全,tab键接在一串命令的第二个字以后,则为文件补全

命令别名设置

当我们想列出所有文件时,需要输入ls -al命令,更快捷的方式是使用别名代替这个命令,设置别名:alias lm=‘ls -al’

  1. //设置别名
  2. [root@localhost wuchao_test]# alias lm='ls -al'
  3. [root@localhost wuchao_test]# lm .
  4. total
  5. drwxr-xr-x. root root 6 : .
  6. drwxrwxrwt. root root 7 : ..
  7. -rw-r--r--. root root 6 : hosts
  8. -rw-r--r--. root root 4 : inittab
  9. -rw-------. root root 6 : test2.txt
  10. -rw-------. root root 6 : .test2.txt.swo
  11. -rw-r--r--. root root 6 : test.txt
  12.  
  13. //取消别名
  14. [root@localhost wuchao_test]# unalias lm
  15. [root@localhost wuchao_test]# lm .
  16. bash: lm: command not found...
  17. [root@localhost wuchao_test]#

作业控制、前台、后台控制

第17章Linux过程控制部分再讲

程序脚本(shell script)

可以将平时管理系统需要执行的连续命令写成一个文件

通配符

比如查询/usr/bin下有多少以X开头的文件,输入:ls -l /usr/bin/X*

bash shell的内置命令:type

使用type可以查看命令是bash内置的,还是来源于其他

  1. [root@localhost ~]# type ls
  2. ls is aliased to `ls --color=auto'
  3. [root@localhost ~]# type cd
  4. cd is a shell builtin
  5. [root@localhost ~]# type which
  6. which is aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

shell的变量功能

变量的显示与设置:echo,unset

变量的显示:echo $变量名或echo ${变量名}

  1. root@iZ28o1pcxtmZ:~# echo $PATH
  2. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/java/jdk1..0_77/bin:/usr/local/java/jdk1..0_77/bin
  3. root@iZ28o1pcxtmZ:~#

变量的设置规则:

1.变量与变量内容用“=”号连接

2.单引号内的字符仅为一般字符,双引号内的特殊字符可保持原有特性

  1. root@iZ28o1pcxtmZ:~# name1='$PATH'
  2. root@iZ28o1pcxtmZ:~# name2="$PATH"
  3.  
  4. root@iZ28o1pcxtmZ:~# echo $name1
  5. $PATH
  6. root@iZ28o1pcxtmZ:~# echo $name2
  7. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/java/jdk1..0_77/bin:/usr/local/java/jdk1..0_77/bin
  8.  
  9. root@iZ28o1pcxtmZ:~#

3.可用转义字符“\”将特殊字符变为一般字符

4.在一串命令中,如果还需要其他命令提供信息,使用反单引号`命令`或$(命令)

  1. root@iZ28o1pcxtmZ:~# version=$(uname -r)
  2. root@iZ28o1pcxtmZ:~# echo $version
  3. 3.13.--generic
  4. root@iZ28o1pcxtmZ:~#

5.在变量后追加变量内容,可用“$变量名称”或${变量名称}累加内容

  1. root@iZ28o1pcxtmZ:~# name1=hello
  2. root@iZ28o1pcxtmZ:~# name2=${name1}wuchao
  3.  
  4. root@iZ28o1pcxtmZ:~# echo $name2
  5. hellowuchao
  6. root@iZ28o1pcxtmZ:~#

6.若该变量需要在其他子进程使用,需要export来使变量称为环境变量

环境变量的功能

用env查看环境变量

  1. [root@localhost 桌面]# env
  2. XDG_VTNR=
  3. XDG_SESSION_ID=
  4. SSH_AGENT_PID=
  5. HOSTNAME=localhost.localdomain
  6. IMSETTINGS_INTEGRATE_DESKTOP=yes
  7. GPG_AGENT_INFO=/run/user//keyring/gpg::
  8. VTE_VERSION=
  9. XDG_MENU_PREFIX=gnome-
  10. SHELL=/bin/bash
  11. TERM=xterm-256color
  12. HISTSIZE=
  13. WINDOWID=
  14. IMSETTINGS_MODULE=IBus
  15. USER=root
  16. LS_COLORS=rs=:di=;;:ln=;;:mh=;;;:pi=;;;:so=;;:do=;;:bd=;;;;;:cd=;;;;;:or=;;;;;:mi=;;;;;;:su=;;;;;:sg=;;;;;:ca=;;;;;:tw=;;;;;:ow=;;;;;:st=;;;;;:ex=;;:*.tar=;;:*.tgz=;;:*.arc=;;:*.arj=;;:*.taz=;;:*.lha=;;:*.lz4=;;:*.lzh=;;:*.lzma=;;:*.tlz=;;:*.txz=;;:*.tzo=;;:*.t7z=;;:*.zip=;;:*.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=;;:*.rm=;;:*.rmvb=;;:*.flc=;;:*.avi=;;:*.fli=;;:*.flv=;;:*.gl=;;:*.dl=;;:*.xcf=;;:*.xwd=;;:*.yuv=;;:*.cgm=;;:*.emf=;;:*.axv=;;:*.anx=;;:*.ogv=;;:*.ogx=;;:*.aac=;;:*.au=;;:*.flac=;;:*.mid=;;:*.midi=;;:*.mka=;;:*.mp3=;;:*.mpc=;;:*.ogg=;;:*.ra=;;:*.wav=;;:*.axa=;;:*.oga=;;:*.spx=;;:*.xspf=;;:
  17. SSH_AUTH_SOCK=/run/user//keyring/ssh
  18. SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/,unix/unix:/tmp/.ICE-unix/
  19. USERNAME=root
  20. GNOME_SHELL_SESSION_MODE=classic
  21. DESKTOP_SESSION=gnome-classic
  22. MAIL=/var/spool/mail/root
  23. PATH=/usr/local/java/jdk1..0_91/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
  24. QT_IM_MODULE=ibus
  25. PWD=/root/桌面
  26. JAVA_HOME=/usr/local/java/jdk1..0_91
  27. XMODIFIERS=@im=ibus
  28. LANG=zh_CN.UTF-
  29. GDM_LANG=zh_CN.UTF-
  30. GDMSESSION=gnome-classic
  31. HISTCONTROL=ignoredups
  32. SHLVL=
  33. HOME=/root
  34. XDG_SEAT=seat0
  35. GNOME_DESKTOP_SESSION_ID=this-is-deprecated
  36. LOGNAME=root
  37. XDG_SESSION_DESKTOP=gnome-classic
  38. CLASSPATH=/usr/local/java/jdk1..0_91/jre/lib/ext:/usr/local/java/jdk1..0_91/lib/tools.jar
  39. DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-XFSA7YGZp6,guid=46b270284336ec9172459a4e5777171e
  40. LESSOPEN=||/usr/bin/lesspipe.sh %s
  41. WINDOWPATH=
  42. DISPLAY=:
  43. XDG_RUNTIME_DIR=/run/user/
  44. XDG_CURRENT_DESKTOP=GNOME-Classic:GNOME
  45. XAUTHORITY=/run/gdm/auth-for-root-Qkf798/database
  46. _=/usr/bin/env
  47. [root@localhost 桌面]#

以下对几个常见的环境变量简单的介绍下:

HOME:代表用户的主文件夹

SHELL:告知目前环境使用的shell是哪个程序

HISTSIZE:历史命令的记录数

MAIL:当我们使用mail命令时,系统读取的邮件信箱文件

LANG:语系数据,英文通常为en_US.UTF-8,中文通常是zh_CN.gb2312和zh_CN.UTF-8

RANDOM:随机数的变量,可以通过$RANDOM获取,范围为0~32767

set查看所有变量(环境变量和自定义变量)

  1. [root@localhost 桌面]# set
  2. ABRT_DEBUG_LOG=/dev/null
  3. BASH=/bin/bash
  4. BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath
  5. BASH_ALIASES=()
  6. BASH_ARGC=()
  7. BASH_ARGV=()
  8. BASH_CMDS=()
  9. BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
  10. BASH_LINENO=()
  11. BASH_SOURCE=()
  12. BASH_VERSINFO=([]="" []="" []="" []="" []="release" []="x86_64-redhat-linux-gnu")
  13. BASH_VERSION='4.2.46(1)-release'
  14. CLASSPATH=/usr/local/java/jdk1..0_91/jre/lib/ext:/usr/local/java/jdk1..0_91/lib/tools.jar
  15. COLUMNS=
  16. COMP_WORDBREAKS=$' \t\n"\'><=;|&(:'
  17. DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-XFSA7YGZp6,guid=46b270284336ec9172459a4e5777171e
  18. DESKTOP_SESSION=gnome-classic
  19. DIRSTACK=()
  20. DISPLAY=:
  21. EUID=
  22. GDMSESSION=gnome-classic
  23. GDM_LANG=zh_CN.UTF-
  24. GNOME_DESKTOP_SESSION_ID=this-is-deprecated
  25. GNOME_SHELL_SESSION_MODE=classic
  26. GPG_AGENT_INFO=/run/user//keyring/gpg::
  27. GROUPS=()
  28. HISTCONTROL=ignoredups
  29. HISTFILE=/root/.bash_history
  30. HISTFILESIZE=
  31. HISTSIZE=
  32. HOME=/root
  33. HOSTNAME=localhost.localdomain
  34. HOSTTYPE=x86_64
  35. ID=
  36. IFS=$' \t\n'
  37. IMSETTINGS_INTEGRATE_DESKTOP=yes
  38. IMSETTINGS_MODULE=IBus
  39. JAVA_HOME=/usr/local/java/jdk1..0_91
  40. LANG=zh_CN.UTF-
  41. LESSOPEN='||/usr/bin/lesspipe.sh %s'
  42. LINES=
  43. LOGNAME=root
  44. LPATHDIR=/root/.cache/abrt
  45. LS_COLORS='rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:'
  46. MACHTYPE=x86_64-redhat-linux-gnu
  47. MAIL=/var/spool/mail/root
  48. MAILCHECK=
  49. OPTERR=
  50. OPTIND=
  51. OSTYPE=linux-gnu
  52. PATH=/usr/local/java/jdk1..0_91/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
  53. PIPESTATUS=([]="")
  54. PPID=
  55. PROMPT_COMMAND=__vte_prompt_command
  56. PS1='[\u@\h \W]\$ '
  57. PS2='> '
  58. PS4='+ '
  59. PWD=$'/root/\346\241\214\351\235\242'
  60. QT_IM_MODULE=ibus
  61. SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/,unix/unix:/tmp/.ICE-unix/
  62. SHELL=/bin/bash
  63. SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
  64. SHLVL=
  65. SINCE=
  66. SINCEFILE=/root/.cache/abrt/lastnotification
  67. SSH_AGENT_PID=
  68. SSH_AUTH_SOCK=/run/user//keyring/ssh
  69. TERM=xterm-256color
  70. TMPPATH=/root/.cache/abrt/lastnotification.w46b8i8T
  71. UID=
  72. USER=root
  73. USERNAME=root
  74. VTE_VERSION=
  75. WINDOWID=
  76. WINDOWPATH=
  77. XAUTHORITY=/run/gdm/auth-for-root-Qkf798/database
  78. XDG_CURRENT_DESKTOP=GNOME-Classic:GNOME
  79. XDG_MENU_PREFIX=gnome-
  80. XDG_RUNTIME_DIR=/run/user/
  81. XDG_SEAT=seat0
  82. XDG_SESSION_DESKTOP=gnome-classic
  83. XDG_SESSION_ID=
  84. XDG_VTNR=
  85. XMODIFIERS=@im=ibus
  86. //后面省略

上面会列出很多变量,记住几个比较重要的变量:

PS1:提示符设置

\d:显示星期月日的日期格式

\H:完整的主机名

\h:主机名第一个小数点前面的部分

\t:显示时间,24小时格式,HH:MM:SS

\T:显示时间,12小时格式,HH:MM:SS

\A:显示时间,24小时格式,HH:MM

\@:显示时间,12小时,am/pm样式

\u:目前用户的账号名称

\v:BASH的版本

\w:完整的工作目录名称

\W:利用basename取得的工作目录名称,所有仅会列出最后一个目录名

\#:执行的第几个命令

\$:提示符,如果是root时显示#

查看上面内容可知PS1='[\u@\h \W]\$ ',故命令行显示[root@localhost ~]#

OSTYPE,HOSTYPE,MACHTYPE

主机硬件与内核等级

export:自定义变量转成环境变量

当我们登陆Linux时便取得一个bash,这个bash就是一个独立的进程,在这个bash执行的命令都是由这个bash衍生出来的,因此被执行的命令称为子进程,子进程仅会继承父进程的环境变量,不会继承自定义变量。

使用“export 变量名”将自定义变量设为环境变量,使用“export”可以查看所有的环境变量。

影响显示结果的语系变量(local)

使用locale -a查看所有支持的语系

  1. [root@localhost ~]# locale -a
  2. en_AG
  3. en_AG.utf8
  4. en_AU
  5. en_AU.iso88591
  6. en_AU.utf8
  7. en_BW
  8. en_BW.iso88591
  9. en_BW.utf8
  10. en_CA
  11. en_CA.iso88591
  12. en_CA.utf8
  13. en_DK
  14. en_DK.iso88591
  15. en_DK.utf8
  16. en_GB
  17. en_GB.iso88591
  18. en_GB.iso885915
  19. en_GB.utf8
  20. en_HK
  21. en_HK.iso88591
  22. en_HK.utf8
  23. en_IE
  24. en_IE@euro
  25. en_IE.iso88591
  26. en_IE.iso885915@euro
  27. en_IE.utf8
  28. en_IN
  29. en_IN.utf8
  30. en_NG
  31. en_NG.utf8
  32. en_NZ
  33. en_NZ.iso88591
  34. en_NZ.utf8
  35. en_PH
  36. en_PH.iso88591
  37. en_PH.utf8
  38. en_SG
  39. en_SG.iso88591
  40. en_SG.utf8
  41. en_US
  42. en_US.iso88591
  43. en_US.iso885915
  44. en_US.utf8
  45. en_ZA
  46. en_ZA.iso88591
  47. en_ZA.utf8
  48. en_ZM
  49. en_ZM.utf8
  50. en_ZW
  51. en_ZW.iso88591
  52. en_ZW.utf8
  53. //省略
  54. zh_CN
  55. zh_CN.gb18030
  56. zh_CN.gb2312
  57. zh_CN.gbk
  58. zh_CN.utf8
  59. zh_HK
  60. zh_HK.big5hkscs
  61. zh_HK.utf8
  62. zh_SG
  63. zh_SG.gb2312
  64. zh_SG.gbk
  65. zh_SG.utf8
  66. zh_TW
  67. zh_TW.big5
  68. zh_TW.euctw
  69. zh_TW.utf8
  70. zu_ZA
  71. zu_ZA.iso88591
  72. zu_ZA.utf8
  73. [root@localhost ~]#

查看需要设置的语系变量

直接输入locale

  1. [root@localhost ~]# locale
  2. LANG=zh_CN.UTF-
  3. LC_CTYPE="zh_CN.UTF-8"
  4. LC_NUMERIC="zh_CN.UTF-8"
  5. LC_TIME="zh_CN.UTF-8"
  6. LC_COLLATE="zh_CN.UTF-8"
  7. LC_MONETARY="zh_CN.UTF-8"
  8. LC_MESSAGES="zh_CN.UTF-8"
  9. LC_PAPER="zh_CN.UTF-8"
  10. LC_NAME="zh_CN.UTF-8"
  11. LC_ADDRESS="zh_CN.UTF-8"
  12. LC_TELEPHONE="zh_CN.UTF-8"
  13. LC_MEASUREMENT="zh_CN.UTF-8"
  14. LC_IDENTIFICATION="zh_CN.UTF-8"
  15. LC_ALL=
  16. [root@localhost ~]#

当设置了LANG或者LC_ALL时,其他的语系变量都会被这两个变量替换,所以我们通常只设置LANG变量即可。centos7以前在/etc/sysconfig/i18n设置,centos7在/etc/loacle.conf文件设置LANG="zh_CN.UTF-8"

变量的有效范围

环境变量可以被子进程使用,类似于全局变量,其余变量不可以被子进程使用,类似于局部变量。

变量键盘的读取、数组与声明:read,array,declare

read

读取来自键盘输入的变量

read [-pt] 变量名

参数:

-p:后面可以接提示符

-t:后面接等待的秒数

  1. [root@localhost 桌面]# read -p "please input your name:" -t name
  2. please input your name:wuchao
  3. [root@localhost 桌面]# echo $name
  4. wuchao
  5. [root@localhost 桌面]#

declare/typeset

declare和typeset是一样的功能,就是声明变量的类型

如果declare后面不接任何参数,功能和set一样,显示所有变量和内容

declare [-aixr] 变量名

参数:

-a:将变量定义为数组

-i:将变量定义为整型

-x:定义为环境变量

-r:将变量定义为readonly,不能更改内容,也不能重设

  1. //变量类型默认为字符串
  2. [root@localhost 桌面]# sum=++
  3. [root@localhost 桌面]# echo $sum
  4. ++
  5.  
  6. //定义为整型,后面才会当成计算式
  7. [root@localhost 桌面]# declare -i sum=++
  8. [root@localhost 桌面]# echo $sum
  9.  
  10. [root@localhost 桌面]#

数组类型:

  1. [root@localhost 桌面]# var[]="cat"
  2. [root@localhost 桌面]# var[]="dag"
  3. [root@localhost 桌面]# var[]="monkey"
  4. [root@localhost 桌面]# echo "${var[1]},${var[2]},${var[3]}"
  5. cat,dag,monkey
  6. [root@localhost 桌面]#

与文件系统及程序的限制关系:ulimit

ulimit [-SHacdfltu]  [配额]

变量内容的删除、替代与替换

变量的删除与替换

  1. #定义一个变量并赋值
  2. [wuchao@localhost 桌面]$ value=/wuchao/bin:/wuchao/sbin:/root/bin:/root/sbin
  3. [wuchao@localhost 桌面]$ echo $value
  4. /wuchao/bin:/wuchao/sbin:/root/bin:/root/sbin
  5.  
  6. #删除变量从左侧开始匹配的最短字符“/*wuchao/sbin:”,*表示匹配0到多个字符
  7. [wuchao@localhost 桌面]$ echo ${value#/*wuchao/sbin:}
  8. /root/bin:/root/sbin
  9.  
  10. #删除变量从左侧开始匹配的最短字符“/*:”,*表示匹配0到多个字符
  11. [wuchao@localhost 桌面]$ echo ${value#/*:}
  12. /wuchao/sbin:/root/bin:/root/sbin
  13.  
  14. #删除变量从左侧开始匹配的最长字符“/*:”,*表示匹配0到多个字符
  15. [wuchao@localhost 桌面]$ echo ${value##/*:}
  16. /root/sbin

#表示从左侧匹配删除,%表示从右侧匹配删除,/表示匹配替换

变量设置方式 说明
${变量#关键字} 从头开始匹配,删除符合的最短匹配内容
${变量##关键字} 从头开始匹配,删除符合的最长匹配内容
${变量%关键字} 从尾开始匹配,删除符合的最短匹配内容
${变量%%关键字} 从尾开始匹配,删除符合的最长匹配内容
${变量/旧字符/新字符} 把第一个符合的旧字符用新字符替换
${变量//旧字符/新字符} 把所有符合的旧字符用新字符替换

变量的测试与内容替换

new_var=${old_var-content}

判断一个变量是否存在,若不存在,则设置该变量

  1. [wuchao@localhost 桌面]$ echo ${username-wuchao}
  2. wuchao

new_var=${old_var:-content}

判断一个变量是否存在,若不存在或者为空字符,则设置该变量

  1. [wuchao@localhost 桌面]$ username=""
  2. [wuchao@localhost 桌面]$ echo ${username:-wuchao}
  3. wuchao
  4. [wuchao@localhost 桌面]$

命令别名与历史命令

命令别名设置:alias,unalias

格式:alias lm='ls -l | more'

取消别名:unalias lm

历史命令:history

history [n] :列出最近n条命令

history:列出目前内存中的所有命令

历史命令的执行:

  1. //查看内存中的历史命令
  2. [wuchao@localhost 桌面]$ history
  3. tar VMware Tools
  4. tar --help
  5. cd /tmp
  6. ls -a
  7. ls mount-point
  8. mount
  9. df
  10. ls -a
  11. value=wuchao/bin:wuchao/sbin:root/bin/root/sbin
  12. echo $value
  13. echo ${value#/*wuchao/sbin:}
  14. 12 echo ${value#*wuchao/sbin:}
  15. 13 value=wuchao/bin:wuchao/sbin:root/bin/root/sbin
  16. 14 value=/wuchao/bin:/wuchao/sbin:/root/bin:/root/sbin
  17. 15 echo $value
  18. 16 echo ${value#/*wuchao/sbin:}
  19. 17 echo ${value#/*:}
  20. 18 echo ${value##/*:}
  21. 19 echo ${username-wuchao}
  22. 20 username=""
  23. 21 new_var=${old_var-content}
  24. 22 判断一个变量是否存在,若不存在,则设置该变量
  25. 23 username=""
  26. 24 echo ${username:wuchao}
  27. 25 echo ${username:-wuchao}
  28. 26 history
  29. 27 history -r
  30. 28 tar VMware Tools
  31. 29 tar --help
  32. 30 cd /tmp
  33. 31 ls -a
  34. 32 ls mount-point
  35. 33 mount
  36. 34 df
  37. 35 ls -a
  38. 36 history
  39.  
  40. //执行第4条历史命令
  41. [wuchao@localhost 桌面]$ !4
  42. ls -a
  43. . .. VMware Tools
  44.  
  45. //执行以d开头的历史命令
  46. [wuchao@localhost 桌面]$ !d
  47. df
  48. 文件系统 1K-块 已用 可用 已用% 挂载点
  49. /dev/mapper/centos-root 49746196 6395416 43350780 13% /
  50. devtmpfs 1417484 0 1417484 0% /dev
  51. tmpfs 1432772 156 1432616 1% /dev/shm
  52. tmpfs 1432772 9104 1423668 1% /run
  53. tmpfs 1432772 0 1432772 0% /sys/fs/cgroup
  54. /dev/sda1 508588 160376 348212 32% /boot
  55. tmpfs 286556 16 286540 1% /run/user/1000
  56. [wuchao@localhost 桌面]$

Bash Shell的操作环境

路径与命令查找顺序

  1. 以相对或绝对路径执行命令,如“/bin/ls“
  2. 由alias找到执行的命令
  3. 由bash内置命令来执行
  4. 通过$PATH这个变量的顺序找到的第一个命令

bash的登陆与欢迎信息:/etc/issue,/etc/motd

登陆时的提示符放在/etc/issue内

登陆后的欢迎信息放在/etc/motd内

bsh的环境配置文件

配置文件用于bash启动时的环境配置,比如自定义变量,别名等。

首先了解login shell和non-login shell的区别:

login shell:取得bash时所需的完整登录流程

non-login shell:取得bash接口的方法不需要重复登录的举动

login shell会读取以下两个配置文件:

1. /etc/profile:这是系统整体的设置,不建议修改

2. ~/.bash_profile或~/.bash_login或~/.profile :属于用户个人设置,可以在此修改

/etc/profile(login shell才会读)

配置用户的整体环境

PATH:会依据UID决定PATH变量要不要含有sbin的系统命令目录

MAIL:根据账号设置用户的邮箱到/var/spool/mail/账户名

USER:根据账户名设置

HOSTNAME:依据主机的hostname设置

HISTSIZE:设置历史纪录命令数

  1. [wuchao@localhost ~]$ cat /etc/profile
  2. # /etc/profile
  3.  
  4. # System wide environment and startup programs, for login setup
  5. # Functions and aliases go in /etc/bashrc
  6.  
  7. # It's NOT a good idea to change this file unless you know what you
  8. # are doing. It's much better to create a custom.sh shell script in
  9. # /etc/profile.d/ to make custom changes to your environment, as this
  10. # will prevent the need for merging in future updates.
  11.  
  12. pathmunge () {
  13. case ":${PATH}:" in
  14. *:"$1":*)
  15. ;;
  16. *)
  17. if [ "$2" = "after" ] ; then
  18. PATH=$PATH:$
  19. else
  20. PATH=$:$PATH
  21. fi
  22. esac
  23. }
  24.  
  25. if [ -x /usr/bin/id ]; then
  26. if [ -z "$EUID" ]; then
  27. # ksh workaround
  28. EUID=`id -u`
  29. UID=`id -ru`
  30. fi
  31. USER="`id -un`"
  32. LOGNAME=$USER
  33. MAIL="/var/spool/mail/$USER"
  34. fi
  35.  
  36. # Path manipulation
  37. if [ "$EUID" = "" ]; then
  38. pathmunge /usr/sbin
  39. pathmunge /usr/local/sbin
  40. else
  41. pathmunge /usr/local/sbin after
  42. pathmunge /usr/sbin after
  43. fi
  44.  
  45. HOSTNAME=`/usr/bin/hostname >/dev/null`
  46. HISTSIZE=
  47. if [ "$HISTCONTROL" = "ignorespace" ] ; then
  48. export HISTCONTROL=ignoreboth
  49. else
  50. export HISTCONTROL=ignoredups
  51. fi
  52.  
  53. export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
  54.  
  55. # By default, we want umask to get set. This sets it for login shell
  56. # Current threshold for system reserved uid/gids is
  57. # You could check uidgid reservation validity in
  58. # /usr/share/doc/setup-*/uidgid file
  59. if [ $UID -gt ] && [ "`id -gn`" = "`id -un`" ]; then
  60. umask
  61. else
  62. umask
  63. fi
  64.  
  65. for i in /etc/profile.d/*.sh ; do
  66. if [ -r "$i" ]; then
  67. if [ "${-#*i}" != "$-" ]; then
  68. . "$i"
  69. else
  70. . "$i" >/dev/null
  71. fi
  72. fi
  73. done
  74.  
  75. unset i
  76. unset -f pathmunge
  77. JAVA_HOME=/usr/local/java/jdk1.8.0_91
  78. PATH=$JAVA_HOME/bin:$PATH
  79. CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
  80. export PATH JAVA_HOME CLASSPATH
  81. [wuchao@localhost ~]$

~/.bash_profile(login shell才会读)

bash读取了整体环境配置文件/etc/profile后,利用该文件读取用户的个人配置。个人配置文件包括以下三个:

1. ~/.bash_profile

2. ~/.bash_login

3. ~/.profile

实际上,bash的login shell只会读取上面三个文件中的一个,依据顺序读取,第一个存在时,便只会读取第一个。

  1. [wuchao@localhost ~]$ cat ~/.bash_profile
  2. # .bash_profile
  3.  
  4. # Get the aliases and functions
  5. if [ -f ~/.bashrc ]; then
  6. . ~/.bashrc
  7. fi
  8.  
  9. # User specific environment and startup programs
  10.  
  11. PATH=$PATH:$HOME/.local/bin:$HOME/bin
  12.  
  13. export PATH
  14. [wuchao@localhost ~]$

source:读取环境配置

source 配置文件名:将主文件夹~/.bashrc的设置读入到目前的bash环境

也可以表示为“. ~/.bashrc”,如上面示例中的if语句内所示,如果~/.bashrc存在,则读取该文件。

~/.bashrc(non-login shell会读)

  1. # .bashrc
  2.  
  3. # Source global definitions
  4. if [ -f /etc/bashrc ]; then
  5. . /etc/bashrc
  6. fi
  7.  
  8. # Uncomment the following line if you don't like systemctl's auto-paging feature:
  9. # export SYSTEMD_PAGER=
  10.  
  11. # User specific aliases and functions
  12. [wuchao@localhost ~]$

可以看出,该配置文件还会调用/etc/bashrc

通配符与特殊符号

通配符如下:

符号 意义
* 代表0到无穷个任意字符
代表一定有一个字符
[] 代表一定有一个在括号内的字符
[-] 代表在编码顺序内的所有字符,[0-9]代表0-9直接的所有数字
[^] [^abc]表示不是abc的其他字符

bash环境的其他特殊符号:

符号 意义
# 批注符号,后面内容不执行
\ 转义
| 管道,分隔两个管道命令的界定
连续命令执行分隔符
~ 用户的主文件夹
$ 使用变量前导符
& 作业控制,将命令变成背景下工作
逻辑非
/ 路径分割符
>,>> 数据流重定向,输出导向,分别是“替换”和“累加”
<,<< 数据流重定向,输入导向
‘’ 单引号,不具有变量置换的功能
“” 具有变量置换的功能
·· 两个“·”中间为先执行的命令,也可以表示为$()
() 在中间为子shell的起始与结束
{} 在中间为命令块的组合

数据流重定向

什么是数据流重定向

将某个命令执行后应该要显示在屏幕上的数据传输到其他的地方。

1.标准输入:代码0,使用<或<<

2.标准输出:代码1,使用>或>>

3.标准错误输出:代码2,使用2>或2>>

  1. //列出根目录的文件名,重定向到~/rootfile文件中
  2. [wuchao@localhost ~]$ ls -l / > ~/rootfile
  3. //查看该文件
  4. [wuchao@localhost ~]$ ls -l ~/rootfile
  5. -rw-rw-r--. wuchao wuchao 7 : /home/wuchao/rootfile
  6. [wuchao@localhost ~]$

注意:使用“>”时,当文件不存在则创建文件,当存在时,覆盖文件内容,使用“>>”则在原来文件后追加数据。

注意:若要将标准输出和标准错误输出都指向同一个文件,可以使用“> filename 2>&1”或者"&> filename"

  1. //在cat后加入>后,catfile文件将主动创建,键盘输入内容放在该文件,ctrl+d退出
  2. [wuchao@localhost ~]$ cat > catfile
  3. this is a testing file
  4. test
  5. [wuchao@localhost ~]$ cat catfile
  6. this is a testing file
  7. test
  8. //用某个文件的内容代替键盘输入
  9. [wuchao@localhost ~]$ cat > catfile < ~/.bashrc
  10. [wuchao@localhost ~]$ ls -l catfile ~/.bashrc
  11. -rw-rw-r--. wuchao wuchao 7 : catfile
  12. -rw-r--r--. wuchao wuchao 11 /home/wuchao/.bashrc
  13. [wuchao@localhost ~]$

“<<”表示结束输入

  1. [wuchao@localhost ~]$ cat > catfile << "end"
  2. > this is test
  3. > test
  4. > end //输入end后,自动退出
  5. [wuchao@localhost ~]$

命令执行的判断依据: ; , && ||

cmd;cmd (不考虑命令相关性的连续执行)

比如:

  1. [wuchao@localhost ~]$ sync;sync;shutdown -h now

$?(命令回传码)与&&或||

命令 说明
cmd1 && cmd2

若cmd1执行完毕且正确执行($?=0),则开始执行cmd2

若cmd1执行完毕且为错误($?不为0),则不执行cmd2

cmd1 || cmd2

若cmd1执行完毕且正确执行($?=0),则不执行cmd2

若cmd1执行完毕且为错误($?不为0),则执行cmd2

管道命令

1.管道命令仅会处理标准输出,对于标注错误输出则会忽略

2.管道命令必须能够接受来自前一个命令的数据成为标准输入继续处理才行

选取命令:cut,grep

cut:将一段信息的某一段切出来

cut -d ‘分隔符’ -f fields

-d:后面接分隔符

-f:后面接选取第几段

-c:以字符的单位取出固定字符区间

  1. [wuchao@localhost ~]$ echo $PATH
  2. /usr/local/java/jdk1..0_91/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/wuchao/.local/bin:/home/wuchao/bin
  3. //以‘:’分割,选取第3和第5段
  4. [wuchao@localhost ~]$ echo $PATH | cut -d ':' -f ,
  5. /usr/local/sbin:/usr/sbin
  6. [wuchao@localhost ~]$ export
  7. declare -x XDG_CURRENT_DESKTOP="GNOME-Classic:GNOME"
  8. declare -x XDG_MENU_PREFIX="gnome-"
  9. declare -x XDG_RUNTIME_DIR="/run/user/1000"
  10. declare -x XDG_SEAT="seat0"
  11. declare -x XDG_SESSION_DESKTOP="gnome-classic"
  12. declare -x XDG_SESSION_ID=""
  13. declare -x XDG_VTNR=""
  14. declare -x XMODIFIERS="@im=ibus"
  15. //显示第12个及以后的字符
  16. [wuchao@localhost ~]$ export | cut -c -
  17. XDG_CURRENT_DESKTOP="GNOME-Classic:GNOME"
  18. XDG_MENU_PREFIX="gnome-"
  19. XDG_RUNTIME_DIR="/run/user/1000"
  20. XDG_SEAT="seat0"
  21. XDG_SESSION_DESKTOP="gnome-classic"
  22. XDG_SESSION_ID=""
  23. XDG_VTNR=""
  24. XMODIFIERS="@im=ibus"
  25. [wuchao@localhost ~]$

grep:分析一行信息,若有需要的则拿出来

grep [-acinv] [--color=auto] '查找字符串' filename

参数:

-a:将binary文件以test文件的方式查找

-c:计算查找到字符串的次数

-i:忽略大小写

-n:顺便输出行号

-v:反向选择,即显示没有查找到字符串的那一行

--color=auto:将查找到的关键字部分加颜色显示

  1. //显示最后登录用户信息中含有root字符串的行
    [wuchao@localhost ~]$ last | grep 'root'
  2. root pts/ : Sat Jul : - crash (+:)
  3. root pts/ : Sat Jul : - crash (+:)
  4. root : : Sat Jul : - crash (+:)
  5. root pts/ : Tue Jun : - : (:)
  6. root : : Tue Jun : - crash (+:)
  7. root pts/ : Mon Jun : - crash (:)
  8. root : : Mon Jun : - crash (:)
  9. root tty1 Mon Jun : - : (:)
  10. root tty2 Mon Jun : - crash (+:)
  11. root pts/ : Mon Jun : - : (:)
  12. root : : Sun Jun : - : (:)
  13. root : : Fri May : - crash (+:)
  14. root pts/ : Thu May : - crash (+:)
  15. root : : Thu May : - crash (+:)
  16. root pts/ : Thu May : - : (:)
  17. root : : Thu May : - : (:)
  18. root pts/ : Thu May : - : (:)
  19. root pts/ : Thu May : - : (:)
  20. root : : Thu May : - : (:)
  21. root pts/ : Thu Apr : - : (:)
  22. root pts/ : Thu Apr : - : (:)
  23. root : : Thu Apr : - : (:)

排序命令:sort,wc,uniq

sort

sort [-fbMnrtuk] [file or stdin]

参数:

-f:忽略大小写的差异

-b:忽略最前面的空格部分

-M:以月份的名称排序

-n:使用纯数字排序

-r:反向排序

-u:相同的数据,仅显示一行

-t:分隔符,默认是tab键来分割

-k:以那个区间来排序

  1. [wuchao@localhost ~]$ cat /etc/passwd | sort
  2. abrt:x::::/etc/abrt:/sbin/nologin
  3. adm:x:::adm:/var/adm:/sbin/nologin
  4. avahi-autoipd:x:::Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
  5. avahi:x:::Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
  6. bin:x:::bin:/bin:/sbin/nologin
  7. chrony:x::::/var/lib/chrony:/sbin/nologin
  8. colord:x:::User for colord:/var/lib/colord:/sbin/nologin
  9. daemon:x:::daemon:/sbin:/sbin/nologin
  10. dbus:x:::System message bus:/:/sbin/nologin
  11. ftp:x:::FTP User:/var/ftp:/sbin/nologin
  12. games:x:::games:/usr/games:/sbin/nologin
  13. gdm:x::::/var/lib/gdm:/sbin/nologin
  14. geoclue:x:::User for geoclue:/var/lib/geoclue:/sbin/nologin
  15. gnome-initial-setup:x::::/run/gnome-initial-setup/:/sbin/nologin
  16. halt:x:::halt:/sbin:/sbin/halt

uniq

uniq [-ic]

参数:

-i:忽略大小写

-c:进行计数

wc

计算数据有多少字,多少行,多少字符

wc [-lwm]

参数:

-l:仅列出行

-w:仅列出多少字

-m:多少字符

双向重定向:tee

tee会同时将数据流送到文件和屏幕

tee  [-a]  file

参数:

-a:以累加的方式,将数据写入file

  1. [wuchao@localhost 桌面]$ last | tee last.list | cut -d " " -f
  2. wuchao
  3. wuchao
  4. (unknown
  5. reboot
  6. wuchao
  7. wuchao
  8. wuchao
  9. wuchao
  10. wuchao
  11. (unknown
  12. reboot
  13. root
  14. root
  15. root
  16. (unknown
  17. reboot
  18. root
  19. root
  20. (unknown
  21. wuchao
  22.  
  23. //查看写入文件的内容
    [wuchao@localhost 桌面]$ cat last.list
    wuchao   pts/0        :0               Fri Jul 15 09:31   still logged in   
    wuchao   :0           :0               Fri Jul 15 09:29   still logged in   
    (unknown :0           :0               Fri Jul 15 09:16 - 09:29  (00:13)    
    reboot   system boot  3.10.0-327.el7.x Fri Jul 15 09:15 - 09:32  (00:16)    
    wuchao   pts/0        :0               Thu Jul 14 21:26 - crash  (11:48)    
    wuchao   pts/0        :0               Thu Jul 14 19:16 - 21:26  (02:10)    
    wuchao   pts/0        :0               Wed Jul 13 16:54 - 19:16 (1+02:22)   
    wuchao   pts/0        :0               Wed Jul 13 16:08 - 16:08  (00:00)    
    wuchao   :0           :0               Wed Jul 13 16:07 - crash (1+17:07)   
    (unknown :0           :0               Wed Jul 13 16:06 - 16:07  (00:00)    
    reboot   system boot  3.10.0-327.el7.x Wed Jul 13 16:06 - 09:32 (1+17:26)   
    root     pts/1        :0               Sat Jul  2 10:26 - crash (11+05:40)  
    root     pts/0        :0               Sat Jul  2 09:22 - crash (11+06:43)  
    root     :0           :0               Sat Jul  2 09:21 - crash (11+06:44)  
    (unknown :0           :0               Sat Jul  2 09:20 - 09:21  (00:01)    
    reboot   system boot  3.10.0-327.el7.x Sat Jul  2 09:19 - 09:32 (13+00:12)  
    root     pts/0        :0               Tue Jun 28 09:15 - 09:16  (00:01)    
    root     :0           :0               Tue Jun 28 08:47 - crash (4+00:31)   
    (unknown :0           :0               Tue Jun 28 08:47 - 08:47  (00:00)    
    wuchao   pts/0        :0               Tue Jun 28 08:46 - 08:47  (00:00)    
    wuchao   :0           :0               Tue Jun 28 08:43 - 08:47  (00:04)    
    (unknown :0           :0               Tue Jun 28 08:41 - 08:43  (00:01)    
    reboot   system boot  3.10.0-327.el7.x Tue Jun 28 08:40 - 09:32 (17+00:51)  
    root     pts/0        :0               Mon Jun 27 13:16 - crash  (19:23)    
    root     :0           :0               Mon Jun 27 13:15 - crash  (19:25)    
    (unknown :0           :0               Mon Jun 27 11:30 - 13:15  (01:44)    
    root     tty1                          Mon Jun 27 11:30 - 11:30  (00:00)    
    root     tty2                          Mon Jun 27 08:19 - crash (1+00:20)   
    root     pts/0        :0               Mon Jun 27 07:23 - 11:30  (04:07)    
    root     :0           :0               Sun Jun 26 20:56 - 11:30  (14:34)    
  24.  

字符转换命令:tr,col,join,paste,expand

tr

删除或替换一段信息中的文字

tr  [-ds] SET1 ...

参数:

-d:删除信息中的SET1字符串

-s:替换重复的字符串

  1. //将小写转为大写
  2. [wuchao@localhost 桌面]$ last | tr '[a-z]' '[A-Z'
  3. WUCHAO PTS/ : FRI JUL : STILL LOGGED IN
  4. WUCHAO : : FRI JUL : STILL LOGGED IN
  5. (UNKNOWN : : FRI JUL : - : (:)
  6. REBOOT SYSTEM BOOT 3.10.-.EL7.X FRI JUL : - : (:)
  7. WUCHAO PTS/ : THU JUL : - CRASH (:)
  8. WUCHAO PTS/ : THU JUL : - : (:)
  9. WUCHAO PTS/ : WED JUL : - : (+:)
  10. WUCHAO PTS/ : WED JUL : - : (:)
  11. WUCHAO : : WED JUL : - CRASH (+:)
  12. (UNKNOWN : : WED JUL : - : (:)
  13. REBOOT SYSTEM BOOT 3.10.-.EL7.X WED JUL : - : (+:)
  14. ROOT PTS/ : SAT JUL : - CRASH (+:)
  15. ROOT PTS/ : SAT JUL : - CRASH (+:)
  16. ROOT : : SAT JUL : - CRASH (+:)
  17. (UNKNOWN : : SAT JUL : - : (:)
  18. REBOOT SYSTEM BOOT 3.10.-.EL7.X SAT JUL : - : (+:)
  19. ROOT PTS/ : TUE JUN : - : (:)
  20. ROOT : : TUE JUN : - CRASH (+:)
  21. (UNKNOWN : : TUE JUN : - : (:)
  22. WUCHAO PTS/ : TUE JUN : - : (:)
  23. WUCHAO : : TUE JUN : - : (:)
  24.  
  25. //删除“:”后显示
  26. wuchao@localhost 桌面]$ cat /etc/passwd | tr -d ':'
  27. rootx00root/root/bin/bash
  28. binx11bin/bin/sbin/nologin
  29. daemonx22daemon/sbin/sbin/nologin
  30. admx34adm/var/adm/sbin/nologin
  31. lpx47lp/var/spool/lpd/sbin/nologin
  32. syncx50sync/sbin/bin/sync
  33. shutdownx60shutdown/sbin/sbin/shutdown
  34. haltx70halt/sbin/sbin/halt
  35. mailx812mail/var/spool/mail/sbin/nologin
  36. operatorx110operator/root/sbin/nologin
  37. gamesx12100games/usr/games/sbin/nologin
  38. ftpx1450FTP User/var/ftp/sbin/nologin

col

col [-xb]

参数:

-x:将tab键转换成对等的空格键

-b:在文字内有反斜杠(\)时,仅保留反斜杠最后接的那个字符

  1. //-A可显示所有特殊按键,^I便是tab键
  2. [wuchao@localhost ~]$ cat -A ./.bashrc
  3. # .bashrc$
  4. $
  5. # Source global definitions$
  6. if [ -f /etc/bashrc ]; then$
  7. ^I. /etc/bashrc$
  8. fi$
  9. $
  10. # Uncomment the following line if you don't like systemctl's auto-paging feature:$
  11. # export SYSTEMD_PAGER=$
  12. $
  13. # User specific aliases and functions$
  14.  
  15. //将tab替换成空格
  16. [wuchao@localhost ~]$ cat ./.bashrc | col -x | cat -A | more
  17. # .bashrc$
  18. $
  19. # Source global definitions$
  20. if [ -f /etc/bashrc ]; then$
  21. . /etc/bashrc$
  22. fi$
  23. $
  24. # Uncomment the following line if you don't like systemctl's auto-paging feature:$
  25. # export SYSTEMD_PAGER=$
  26. $
  27. # User specific aliases and functions$
    [wuchao@localhost ~]$

join

将两个文件当中有相同数据的那一行加在一起

join [-ti12] file1 file2

参数:

-t:join默认以空格符分隔数据,并且对比第一个字段的数据,如果两个文件相同,则将两条数据连成一行,且第一个字段放在第一个

-i:忽略大小写

-1:代表第一个文件要用哪个字段来分析

-2:代表第二个文件要用哪个字段来分析

  1. //查看两个文件前三行内容
  2. [root@localhost 桌面]# head -n /etc/passwd /etc/shadow
  3. ==> /etc/passwd <==
  4. root:x:::root:/root:/bin/bash
  5. bin:x:::bin:/bin:/sbin/nologin
  6. daemon:x:::daemon:/sbin:/sbin/nologin
  7.  
  8. ==> /etc/shadow <==
  9. root:$$vBW41vi8uts5DfMV$livdvlQNgxJGYHUPoO0NNgIoyZL8byHTpZu4x/wNJLzVB56n61gZX.VFz7qCuD36B7GOpgKWBGlAVzaK6iM/B0:::::::
  10. bin:*:::::::
  11. daemon:*:::::::
  12. [root@localhost 桌面]#
  13.  
  14. //使用“:”分隔,两个文件每行第一个字段相同的部分整合在一行,以“:”隔开,每行第一个为字段
  15. [root@localhost 桌面]# join -t ':' /etc/passwd /etc/shadow
  16. root:x:::root:/root:/bin/bash:$$vBW41vi8uts5DfMV$livdvlQNgxJGYHUPoO0NNgIoyZL8byHTpZu4x/wNJLzVB56n61gZX.VFz7qCuD36B7GOpgKWBGlAVzaK6iM/B0:::::::
  17. bin:x:::bin:/bin:/sbin/nologin:*:::::::
  18. daemon:x:::daemon:/sbin:/sbin/nologin:*:::::::
  19.  
  20. //当我们想把两个文件的不同字段作为同一字段比较时
  21. [root@localhost 桌面]# join -t ':' - /etc/passwd - /etc/group

paste

直接将两个文件的对应行整合在一起

join [-d]

参数:

-d:后面接分隔符,默认为tab

-:如果file部分写成-,表示来自标准输入的数据的意思

  1. [root@localhost 桌面]# paste -d '=' /etc/passwd /etc/shadow | head -n
  2. root:x:::root:/root:/bin/bash=root:$$vBW41vi8uts5DfMV$livdvlQNgxJGYHUPoO0NNgIoyZL8byHTpZu4x/wNJLzVB56n61gZX.VFz7qCuD36B7GOpgKWBGlAVzaK6iM/B0:::::::
  3. bin:x:::bin:/bin:/sbin/nologin=bin:*:::::::
  4. daemon:x:::daemon:/sbin:/sbin/nologin=daemon:*:::::::

expand

将tab键转成空格键

expand [-t] file

参数:

-t:定义转成几个空格键

切割命令:split

将大文件切割成多个小文件

split [-bl] file prefix

参数:

-b:切割的文件大小,比如200k,200b,200m

-l:以行数来切割

prefix:作为切割文件的前导文字

  1. [root@localhost 桌面]# ls -l /etc/shadow
  2. ----------. root root 4 : /etc/shadow
  3. //按1k大小切割
  4. [root@localhost 桌面]# split -b 1k /etc/shadow ~/shadow
  5. //查看切割的文件
  6. [root@localhost 桌面]# ls -l ~/shadow*
  7. -rw-r--r--. root root 7 : /root/shadowaa
  8. -rw-r--r--. root root 7 : /root/shadowab
  9. [root@localhost 桌面]#
  10.  
  11. //整合切割的文件
  12. [root@localhost 桌面]# cat ~/shadow* >> ~/shadow
  13. [root@localhost 桌面]# ls -l ~/shadow*
  14. -rw-r--r--. root root 7 : /root/shadow
  15. -rw-r--r--. root root 7 : /root/shadowaa
  16. -rw-r--r--. root root 7 : /root/shadowab
  17. [root@localhost 桌面]#

参数代换:xargs

  1. [root@localhost 桌面]#
  2. [root@localhost 桌面]# cut -d: -f1 < /etc/passwd | sort | xargs echo
  3. abrt adm avahi avahi-autoipd bin chrony colord daemon dbus ftp games gdm geoclue gnome-initial-setup halt libstoragemgmt lp mail nfsnobody nobody ntp operator polkitd postfix pulse qemu radvd root rpc rpcuser rtkit saslauth setroubleshoot shutdown sshd sssd sync systemd-bus-proxy systemd-network tcpdump tss unbound usbmuxd wuchao

关于“-”的用途

在管道命令中,经常需要前一个的stdout作为后一个的stdin,这是stdout和stdin用“-”来表示

  1. //将home里面的文件打包,打包的数据传送到stdout,作为后面指令的stdin
  2. [root@localhost 桌面]# tar -cvf - /home | tar -xvf -

第11章 认识和学习bash的更多相关文章

  1. 第十一章 认识与学习BASH

    系统支持的shell在   /etc/shells里面 Bash Shell 的功能: 1.命令修补能力(histroy) 2.命令与档案补全功能 3.命令别名设定功能 4.工作前景背景控制 5.支持 ...

  2. 别人的Linux私房菜(11)认识与学习BASH

    Linux下使用BASH   Bourne Again Shell        另外一种由用于Unix的伯克利大学的Bill Joy设计的C Shell 系统中合法的shell会写入到/etc/sh ...

  3. 《C++ Primer Plus》第11章 使用类 学习笔记

    本章介绍了定义和使用类的许多重要方面.一般来说,访问私有类成员的唯一方法是使用类方法.C++使用友元函数来避开这种限制.要让函数称为友元,需要在类声明中声明该函数,并在声明前加上关键字friend.C ...

  4. 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)

    第10章 vim程序编辑器 可以将vim看做vi的进阶版本,vim可以用颜色或底线等方式来显示出一些特殊的信息. 为何要学习vim?因为: a. 所有的 Unix Like 系统都会内建 vi 文书编 ...

  5. 第十一章、认识与学习BASH

    第十一章.认识与学习 BASH 最近升级日期:2009/08/25 1. 认识 BASH 这个 Shell 1.1 硬件.核心与 Shell 1.2 为何要学文字接口的 shell 1.3 系统的合法 ...

  6. 第十一章、认识与学习 BASH

    第十一章.认识与学习 BASH 1. 认识 BASH 这个 Shell 1.1 硬件.核心与 Shell 1.2 为何要学文字接口的 shell 1.3 系统的合法 shell 与 /etc/shel ...

  7. 《python基础教程(第二版)》学习笔记 文件和素材(第11章)

    <python基础教程(第二版)>学习笔记 文件和素材(第11章) 打开文件:open(filename[,mode[,buffering]]) mode是读写文件的模式f=open(r' ...

  8. 《Python学习手册 第五版》 -第11章 赋值、表达式和打印

    上一章对Python的语句和语法已经进行了基本的说明,接下来就是每个章节的详细说明,本章的主要内容就是标题中涵盖的三点:赋值语句.表达式语句.打印语句 本章重点内容如下: 1.赋值语句 1)赋值语句的 ...

  9. java JDK8 学习笔记——第11章 线程和并行API

    第11章 线程与并行API 11.1 线程 11.1.1 线程 在java中,如果想在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是操作在run( ...

随机推荐

  1. MongoDB安装及启动

    本机环境系统:Debian 9桌面系统:KDE Plasma ## 官网下载自己系统最新稳定版 https://www.mongodb.com/download-center#community 选择 ...

  2. MongoDB数据库 : 管道,用户管理,副本集等

    聚合(aggregate): db.集合.aggregate([{管道:{表达式}}]) db.集合.aggregate([ {管道1:{表达式1}}, {管道2:{表达式2}}, ... ...]) ...

  3. 学习ThinkPHP5的第一天(安装 连接数据库)

    参考文档:thinkPHP5.0完全手册  一.安装 采用的是git安装方式: 应用项目:https://github.com/top-think/think 核心框架:https://github. ...

  4. 使用nohup或者tmux将程序挂在后台

    程序挂在后台 nohup nohup 命令 & 这样的命令会将屏幕的输出重定向到同目录的nohup.out中,可以使用 > 来重定向输出. nohup 命令 > .log & ...

  5. unix文件共享

    UNIX系统支持在不同的进程间共享打开文件.内核使用3种数据结构表示打开文件,他们之间的关系决定了在文件共享方面一个进程对另一个进程产生的影响. (1)每个进程在进程表中都有一个记录项,记录项中包含一 ...

  6. Asp.Net Core存储Cookie不成功

    Asp.Net Core存储Cookie不成功 Asp.Net Core2.1生成的项目模板默认实现了<>,所以设置存储Cookie需要做一些处理. 1.第一种是在Startup的Conf ...

  7. PL/SQL轻量版(三)——游标与异常处理

    一.游标 1.概念 游标是一个 指向上下文的句柄( handle) 或指针.通过游标,PL/SQL 可以控制上下文区和处理语句时上下文区会发生些什么事情. 2.游标处理 处理显式游标 主要包含以下四个 ...

  8. flex tooltip css

    <?xml version="1.0"?> <!-- tooltips/ToolTipStyleManager.mxml --> <mx:Applic ...

  9. 20155329胡佩伦《Java程序设计》第2周学习总结

    学号 20155329 <Java程序设计>第2周学习总结 教材学习内容总结 基本类型 整数(short.int.long) 字节(byte) 浮点数(float/double) 字符(c ...

  10. Kali linux 安装

    df -m umount  /media exit