Linux shell基础知识
1.shell(Bourne Agin shell)是一个命令解析器,提供用户和机器之间的交互,还有zsh、ksh
2.我们敲过的命令在什么地方存的呢?在家目录下的.bash_history文件中,最多可以保存1000条命令,可以用户history命令查看。
[root@bogon ~]# ls /root/.bash_history /root/.bash_history [root@bogon ~]#
3.1000条的个数是有环境变量$HISTSIZE 控制的
[root@bogon ~]# echo $HISTSIZE 1000 [root@bogon ~]#
4.清空当前的命令历史记录,不能清空配置文件中的命令
[root@bogon ~]# history -c [root@bogon ~]#
[root@bogon ~]# history 1 history [root@bogon ~]#
5.刚敲得命令不是直接保存到文件中,先保存到内存中,当我们退出终端才保存到文件中。
6.HISTSIZE环境变量控制命令保存条数配置文件在etc/profile中
7.我们将这个值改成5000变量值并不会立即生效,必须source下才生效
[root@bogon ~]# echo $HISTSIZE 1000 [root@bogon ~]# source /etc/profile [root@bogon ~]# echo $HISTSIZE 5000 [root@bogon ~]#
8.想要查看命令是什么时间执行的可以在当前终端定义环境变量
[root@bogon ~]# HISTTIMEFORMAT="%Y%m/%d %H:%M:%S " [root@bogon ~]#
9.再执行history发现可以看到时间了
[root@bogon ~]# history 1 201712/29 16:15:32 history 2 201712/29 16:19:51 vim /etc/profile 3 201712/29 16:22:32 echo $HISTSIZE 4 201712/29 16:23:10 source /etc/profile 5 201712/29 16:23:20 echo $HISTSIZE 6 201712/29 16:24:49 history 7 201712/29 16:28:56 HISTTIMEFORMAT="%Y%m/%d %H:%M:%S " 8 201712/29 16:29:19 history [root@bogon ~]#
10.如果想永久生效需要将环境变量添加到/etc/profile文件中,然后保存推出source一下/etc/profile文件
11.永久生效了
[root@bogon ~]# echo $HISTTIMEFORMAT %Y%m/%d %H:%M:%S [root@bogon ~]#
12.永久保存命令文件,执行了命令以后用户运行的所有命令都会已追加的形式被保存下来(直接关闭终端不会记录刚敲的命令)
[root@bogon ~]# chattr +a ~/.bash_history [root@bogon ~]#
13.!!就是上一条命令
14.!n 就是运行多少条命令,n指的是多少条
15.!word 是从下往上找以单词word开头的执行过的命令执行
命令补全和别名
1.默认不支持命令产生补全,需要安装bash-completion包,按完之后重启系统
[root@bogon ~]# yum install -y bash-completion
2.如果命令太长可以给命令起别名,然后直接执行restartnet就行了
[root@bogon ~]# alias restartnet='systemctl restart network.service' [root@bogon ~]#
3.查看所有的alias别名命令
[root@bogon ~]# alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias restartnet='systemctl restart network.service' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' [root@bogon ~]#
4.用户家目录下的.bashrc文件中有系统配置的alias
[root@bogon ~]# vim .bashrc
5.其他的alias配置在/etc/profile.d/下
[root@bogon profile.d]# cd /etc/profile.d/ [root@bogon profile.d]# ls 256term.csh colorls.csh PackageKit.sh vim.sh 256term.sh colorls.sh qt.csh vte.sh abrt-console-notification.sh lang.csh qt-graphicssystem.csh which2.csh bash_completion.sh lang.sh qt-graphicssystem.sh which2.sh colorgrep.csh less.csh qt.sh colorgrep.sh less.sh vim.csh [root@bogon profile.d]#
6.取消自定义的别名
[root@bogon profile.d]# unalias restartnet [root@bogon profile.d]#
通配符
1.* 匹配0或多个字符、?匹配任意一个字符 、[0-3]匹配0-3中的字符 、[12] 1或2、[1-9a-zA-Z]、{1,2,3}也是或
[root@bogon test]# ls 1.txt dnsmasq.txt gzip [root@bogon test]# ls *.txt 1.txt dnsmasq.txt [root@bogon test]# ls ?.txt 1.txt [root@bogon test]#
[root@bogon test]# ls [0-3].txt 1.txt [root@bogon test]#
[root@bogon test]# ls [12].txt 1.txt [root@bogon test]#
[root@bogon test]# ls [1-9a-zA-Z].txt 1.txt [root@bogon test]#
[root@bogon test]# ls {1,2,3}.txt ls: 无法访问2.txt: 没有那个文件或目录 ls: 无法访问3.txt: 没有那个文件或目录 1.txt [root@bogon test]#
输入输出重定向
1.> 正确的输出到文件中
2.>>追加输出
3.2>将错误输出到什么位置
[root@bogon test]# lse bash: lse: 未找到命令... [root@bogon test]# lse 2> e.txt [root@bogon test]# cat e.txt bash: lse: 未找到命令... [root@bogon test]#
4.2>>追加重定向
[root@bogon test]# lse 2>> e.txt [root@bogon test]# cat e.txt bash: lse: 未找到命令... bash: lse: 未找到命令... [root@bogon test]#
5.&> 结合了正确和错误,将正确和错误都输出到文本中。
[root@bogon test]# ls 1.txt dnsmasq.txt e.txt gzip [root@bogon test]# ls 1.txt aaa &> e1.txt [root@bogon test]# cat e1.txt ls: 无法访问aaa: 没有那个文件或目录 1.txt [root@bogon test]# ls 1.txt aaa &>> e1.txt [root@bogon test]# cat e1.txt ls: 无法访问aaa: 没有那个文件或目录 1.txt ls: 无法访问aaa: 没有那个文件或目录 1.txt [root@bogon test]#
6.>1.txt 2>a.txt 将正确的和错误的输出分别保存到文件中
[root@bogon test]# ls 1.txt dnsmasq.txt e1.txt e.txt gzip [root@bogon test]# ls [12].txt aaa.txt > 1.txt 2>a.txt [root@bogon test]# cat 1.txt 1.txt [root@bogon test]# cat a.txt ls: 无法访问aaa.txt: 没有那个文件或目录 [root@bogon test]#
7.<输入重定向
[root@bogon test]# wc -l 1.txt 1 1.txt [root@bogon test]#
管道符和作业控制
1.管道符的作用是把文件的输出内容传递给后面的命令
[root@bogon test]# ls |wc -l 6 [root@bogon test]# cat 1.txt |wc -l 2 [root@bogon test]#
2.ctrl+z暂停一个任务
[root@bogon test]# vim 1.txt [1]+ 已停止 vim 1.txt [root@bogon test]#
3.fg将一个命令调到前台
[root@bogon test]# jobs [1]+ 已停止 vim 1.txt [root@bogon test]# fg vim 1.txt [root@bogon test]#
4.jobs命令列出后台任务
[root@bogon test]# vim 2.txt [1]+ 已停止 vim 2.txt [root@bogon test]# vim 1.txt [2]+ 已停止 vim 1.txt [root@bogon test]# jobs [1]- 已停止 vim 2.txt [2]+ 已停止 vim 1.txt [root@bogon test]#
5.fg + 任务ID 调起后台命令放到前台
[root@bogon test]# jobs [1]- 已停止 vim 2.txt [2]+ 已停止 vim 1.txt [root@bogon test]# fg 2 vim 1.txt [root@bogon test]#
6.bg + 任务id 将任务放到后台并运行
[root@bogon test]# bg 1 [1]+ vim 1.txt & [root@bogon test]#
7.vmstat 1不停的显示系统的状态
[root@bogon test]# vmstat 1 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 281464 324872 32 246636 0 1 29 6 56 94 0 0 99 0 0 0 0 281464 324872 32 246668 0 0 0 0 54 78 1 0 99 0 0 0 0 281464 324872 32 246668 0 0 0 0 45 66 0 1 99 0 0 0 0 281464 324872 32 246668 0 0 0 0 47 72 0 0 100 0 0 ^Z [2]+ 已停止 vmstat 1 [root@bogon test]#
8.&直接将任务放到后台
[root@bogon test]# sleep 100 & [3] 49905 [root@bogon test]# jobs [1]- 已停止 vim 1.txt [2]+ 已停止 vmstat 1 [3] 运行中 sleep 100 & [root@bogon test]#
shell变量
1.evn 获取系统变量
[root@bogon test]# env XDG_SESSION_ID=577 HOSTNAME=bogon TERM=xterm SHELL=/bin/bash HISTSIZE=5000 SSH_CLIENT=10.21.95.218 50134 22 QTDIR=/usr/lib64/qt-3.3 QTINC=/usr/lib64/qt-3.3/include SSH_TTY=/dev/pts/2 QT_GRAPHICSSYSTEM_CHECKED=1 USER=root
2.set 用set 命令可以设置各种shell选项或者列 出shell变量,自己设置变量a,用set命令可以找的。
[root@bogon test]# a=111 [root@bogon test]# echo $a 111 [root@bogon test]# set |grep 111 _=111 a=111 [root@bogon test]#
3.变量名首位不能是数字
[root@bogon test]# a=1 [root@bogon test]# echo $a 1 [root@bogon test]# 1a = 2 bash: 1a: 未找到命令... [root@bogon test]#
4.变量值有特殊符号的时候要用单引号括起来
[root@bogon test]# a=1 [root@bogon test]# a=a b c bash: b: 未找到命令... [root@bogon test]# a='a b c' [root@bogon test]#
[root@bogon test]# a=1 [root@bogon test]# b=2 [root@bogon test]# echo $a$b 12 [root@bogon test]#
5.w命令 用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。
[root@bogon test]# w 11:34:37 up 5 days, 11:49, 4 users, load average: 0.08, 0.03, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root :0 :0 2612月17 ?xdm? 43:29 2.45s gdm-session-wor root pts/0 :0 二09 2days 0.04s 0.04s /bin/bash root pts/1 :0 五18 5days 0.06s 0.06s /bin/bash root pts/2 10.21.95.218 二09 5.00s 1.81s 0.71s w [root@bogon test]#
6.查看当前用户是在哪个TTY下
[root@bogon test]# echo $SSH_TTY /dev/pts/2 [root@bogon test]#
7.执行bash再开一个子进程(子shell),pstree查看
├─sshd───sshd───bash─┬─bash───pstree │ ├─vim │ └─vmstat
[root@bogon test]# bash [root@bogon test]# pstree systemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager─┬─dhclient │ └─2*[{NetworkManager}] ├─abrt-dbus───3*[{abrt-dbus}] ├─2*[abrt-watch-log] ├─abrtd ├─accounts-daemon───2*[{accounts-daemon}] ├─alsactl ├─at-spi-bus-laun─┬─dbus-daemon │ └─3*[{at-spi-bus-laun}] ├─at-spi2-registr───2*[{at-spi2-registr}] ├─atd ├─auditd─┬─audispd─┬─sedispatch │ │ └─{audispd} │ └─{auditd} ├─avahi-daemon───avahi-daemon ├─bluetoothd ├─caribou───2*[{caribou}] ├─colord───2*[{colord}] ├─crond ├─cupsd ├─2*[dbus-daemon] ├─dbus-launch ├─dconf-service───2*[{dconf-service}] ├─dhclient ├─dnsmasq───dnsmasq ├─evolution-calen───5*[{evolution-calen}] ├─evolution-sourc───2*[{evolution-sourc}] ├─gconfd-2 ├─gdm─┬─Xorg │ ├─gdm-session-wor─┬─gnome-session─┬─abrt-applet───2*[{abrt-applet+ │ │ │ ├─gnome-settings-───4*[{gnome-s+ │ │ │ ├─gnome-shell─┬─ibus-daemon─┬─i+ │ │ │ │ │ ├─i+ │ │ │ │ │ └─2+ │ │ │ │ └─6*[{gnome-shell+ │ │ │ ├─gnome-software───3*[{gnome-so+ │ │ │ ├─nautilus───3*[{nautilus}] │ │ │ ├─ssh-agent │ │ │ ├─tracker-extract───13*[{tracke+ │ │ │ ├─tracker-miner-a───2*[{tracker+ │ │ │ ├─tracker-miner-f───3*[{tracker+ │ │ │ ├─tracker-miner-u───2*[{tracker+ │ │ │ └─3*[{gnome-session}] │ │ └─2*[{gdm-session-wor}] │ └─3*[{gdm}] ├─gnome-keyring-d───4*[{gnome-keyring-d}] ├─gnome-shell-cal───5*[{gnome-shell-cal}] ├─gnome-terminal-─┬─2*[bash] │ ├─gnome-pty-helpe │ └─3*[{gnome-terminal-}] ├─goa-daemon───3*[{goa-daemon}] ├─goa-identity-se───3*[{goa-identity-se}] ├─gsd-printer───2*[{gsd-printer}] ├─gssproxy───5*[{gssproxy}] ├─gvfs-afc-volume───3*[{gvfs-afc-volume}] ├─gvfs-goa-volume───2*[{gvfs-goa-volume}] ├─gvfs-gphoto2-vo───2*[{gvfs-gphoto2-vo}] ├─gvfs-mtp-volume───2*[{gvfs-mtp-volume}] ├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}] ├─gvfsd───2*[{gvfsd}] ├─gvfsd-fuse───5*[{gvfsd-fuse}] ├─gvfsd-metadata───2*[{gvfsd-metadata}] ├─gvfsd-trash───2*[{gvfsd-trash}] ├─httpd───6*[httpd] ├─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}] │ └─2*[{ibus-daemon}] ├─2*[ibus-x11───2*[{ibus-x11}]] ├─ksmtuned───sleep ├─libvirtd───15*[{libvirtd}] ├─lsmd ├─lvmetad ├─mission-control───3*[{mission-control}] ├─mysqld_safe───mysqld───15*[{mysqld}] ├─nginx───nginx ├─packagekitd───2*[{packagekitd}] ├─php-fpm───3*[php-fpm] ├─polkitd───5*[{polkitd}] ├─pulseaudio───2*[{pulseaudio}] ├─rsyslogd───2*[{rsyslogd}] ├─rtkit-daemon───2*[{rtkit-daemon}] ├─smartd ├─sshd───sshd───bash─┬─bash───pstree │ ├─vim │ └─vmstat ├─systemd-journal ├─systemd-logind ├─systemd-udevd ├─tracker-store───7*[{tracker-store}] ├─tuned───4*[{tuned}] ├─udisksd───4*[{udisksd}] ├─upowerd───2*[{upowerd}] ├─vmtoolsd───{vmtoolsd} ├─vmtoolsd └─wpa_supplicant [root@bogon test]#
8.使用exit可以退出刚才的bash
[root@bogon test]# exit exit [root@bogon test]# pstree systemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager─┬─dhclient │ └─2*[{NetworkManager}] ├─2*[abrt-watch-log] ├─abrtd ├─accounts-daemon───2*[{accounts-daemon}] ├─alsactl ├─at-spi-bus-laun─┬─dbus-daemon │ └─3*[{at-spi-bus-laun}] ├─at-spi2-registr───2*[{at-spi2-registr}] ├─atd ├─auditd─┬─audispd─┬─sedispatch │ │ └─{audispd} │ └─{auditd} ├─avahi-daemon───avahi-daemon ├─bluetoothd ├─caribou───2*[{caribou}] ├─colord───2*[{colord}] ├─crond ├─cupsd ├─2*[dbus-daemon] ├─dbus-launch ├─dconf-service───2*[{dconf-service}] ├─dhclient ├─dnsmasq───dnsmasq ├─evolution-calen───5*[{evolution-calen}] ├─evolution-sourc───2*[{evolution-sourc}] ├─gconfd-2 ├─gdm─┬─Xorg │ ├─gdm-session-wor─┬─gnome-session─┬─abrt-applet───2*[{abrt-applet}] │ │ │ ├─gnome-settings-───4*[{gnome-settings-}] │ │ │ ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}] │ │ │ │ │ ├─ibus-engine-sim───2*[{ibus-engine-sim}] │ │ │ │ │ └─2*[{ibus-daemon}] │ │ │ │ └─6*[{gnome-shell}] │ │ │ ├─gnome-software───3*[{gnome-software}] │ │ │ ├─nautilus───3*[{nautilus}] │ │ │ ├─ssh-agent │ │ │ ├─tracker-extract───13*[{tracker-extract}] │ │ │ ├─tracker-miner-a───2*[{tracker-miner-a}] │ │ │ ├─tracker-miner-f───3*[{tracker-miner-f}] │ │ │ ├─tracker-miner-u───2*[{tracker-miner-u}] │ │ │ └─3*[{gnome-session}] │ │ └─2*[{gdm-session-wor}] │ └─3*[{gdm}] ├─gnome-keyring-d───4*[{gnome-keyring-d}] ├─gnome-shell-cal───5*[{gnome-shell-cal}] ├─gnome-terminal-─┬─2*[bash] │ ├─gnome-pty-helpe │ └─3*[{gnome-terminal-}] ├─goa-daemon───3*[{goa-daemon}] ├─goa-identity-se───3*[{goa-identity-se}] ├─gsd-printer───2*[{gsd-printer}] ├─gssproxy───5*[{gssproxy}] ├─gvfs-afc-volume───3*[{gvfs-afc-volume}] ├─gvfs-goa-volume───2*[{gvfs-goa-volume}] ├─gvfs-gphoto2-vo───2*[{gvfs-gphoto2-vo}] ├─gvfs-mtp-volume───2*[{gvfs-mtp-volume}] ├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}] ├─gvfsd───2*[{gvfsd}] ├─gvfsd-fuse───5*[{gvfsd-fuse}] ├─gvfsd-metadata───2*[{gvfsd-metadata}] ├─gvfsd-trash───2*[{gvfsd-trash}] ├─httpd───6*[httpd] ├─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}] │ └─2*[{ibus-daemon}] ├─2*[ibus-x11───2*[{ibus-x11}]] ├─ksmtuned───sleep ├─libvirtd───15*[{libvirtd}] ├─lsmd ├─lvmetad ├─mission-control───3*[{mission-control}] ├─mysqld_safe───mysqld───15*[{mysqld}] ├─nginx───nginx ├─packagekitd───2*[{packagekitd}] ├─php-fpm───3*[php-fpm] ├─polkitd───5*[{polkitd}] ├─pulseaudio───2*[{pulseaudio}] ├─rsyslogd───2*[{rsyslogd}] ├─rtkit-daemon───2*[{rtkit-daemon}] ├─smartd ├─sshd───sshd───bash─┬─pstree │ ├─vim │ └─vmstat ├─systemd-journal ├─systemd-logind ├─systemd-udevd ├─tracker-store───7*[{tracker-store}] ├─tuned───4*[{tuned}] ├─udisksd───4*[{udisksd}] ├─upowerd───2*[{upowerd}] ├─vmtoolsd───{vmtoolsd} ├─vmtoolsd └─wpa_supplicant [root@bogon test]#
9.如何定义全局环境变量,使用export
[root@bogon test]# a=linux [root@bogon test]# echo $a linux [root@bogon test]# bash [root@bogon test]# echo $a [root@bogon test]#
[root@bogon test]# exit exit [root@bogon test]# export a=linux [root@bogon test]# bash [root@bogon test]# echo $a linux [root@bogon test]#
10.unset 删除变量
[root@bogon test]# echo $a linux [root@bogon test]# unset a [root@bogon test]# echo $a [root@bogon test]#
11.Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量。
环境变量配置文件有两类一个是系统的 /etc/下的 一个是用户家目录下。
系统变量
/etc/profile:这个文件预设了几个重要的变量,例如PATH、USER、LOGNAME、MAIL、INPUTRC、HOSTNAME、HISTSIZE、umask等等。
/etc/bashrc:这个文件主要预设umasky以及PS1。这个PS1就是我们在输入命令时,前面的那串字符。例如Linux系统的PS1就是“[root@localhost ~]”,我们不妨看一下PS1的值,如下所示:
#echo $PS1
[\u@\h \W]\$
其中,\u指用户,\h指主机名,\W指当前目录,\$指字符“#”(如果是普通用户则显示为“¥”)。
个人环境变量
.bash_profile:该文件定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专属于自己的shell信息,当前用户登入时,该文件仅仅执行一次。
.bashrc:该文件包含专属于自己的shell的bash信息,当登入或每次打开新的shell时,该文件被读取。例如你可以将用户自定义的alais或者自定义变量写到这个文件中。
.bash_history:该文件用于记录命令历史。
.bash_logout:当退出shell时,会执行该文件。你可以将一些清理的工作放到这个文件中。
12. source 和 . 是一个意思,都是加载一个配置文件
13.PS1在/etc/bashrc下定义,作用是定义 [root@bogon test]
14.特殊符号
例子
[root@bogon ~]# #ls [root@bogon ~]# a=1 [root@bogon ~]# b=2 [root@bogon ~]# c bash: c: 未找到命令... [root@bogon ~]# c=3 [root@bogon ~]# echo $c 3 [root@bogon ~]# echo \$c $c [root@bogon ~]#
15.cut 截取字符串 -d 指定分割符 截取第一段 -f 1,截取12段-f 1,2 ,截取1到3 -f 1-3 ,-c 指定第几个字符
[root@bogon ~]# cat /etc/passwd |head -2 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@bogon ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1 root bin [root@bogon ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,2 root:x bin:x [root@bogon ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1-3 root:x:0 bin:x:1 [root@bogon ~]#
16.sort命令对文件内容排序
[root@bogon ~]# sort /etc/passwd abrt:x:173:173::/etc/abrt:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin chrony:x:991:988::/var/lib/chrony:/sbin/nologin colord:x:995:993:User for colord:/var/lib/colord:/sbin/nologin
17.将passwd文件的头10行追加到1.txt
[root@bogon ~]# head /etc/passwd >> 1.txt [root@bogon ~]# vim 1.txt [root@bogon ~]#
18.sort -n 以数字排序 -r 倒序排
19wc -l 统计行数 -m 统计字符数 -w 统计词
20.cat -A 查看文件的所有内容包括换行符
21.uniq 去重需要先排序再去重
[root@bogon ~]# sort 1.txt |uniq -c 1 adm:x:3:4:adm:/var/adm:/sbin/nologin 1 bin:x:1:1:bin:/bin:/sbin/nologin 1 daemon:x:2:2:daemon:/sbin:/sbin/nologin 1 halt:x:7:0:halt:/sbin:/sbin/halt 1 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 1 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 1 operator:x:11:0:operator:/root:/sbin/nologin 1 root:x:0:0:root:/root:/bin/bash 1 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 1 sync:x:5:0:sync:/sbin:/bin/sync [root@bogon ~]#
22.|tee 类似 > tee命令会在执行完显示执行结果 -a 选项是追加
[root@bogon ~]# sort 1.txt |uniq -c |tee a.txt 1 adm:x:3:4:adm:/var/adm:/sbin/nologin 1 bin:x:1:1:bin:/bin:/sbin/nologin 1 daemon:x:2:2:daemon:/sbin:/sbin/nologin 1 halt:x:7:0:halt:/sbin:/sbin/halt 1 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 1 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 1 operator:x:11:0:operator:/root:/sbin/nologin 1 root:x:0:0:root:/root:/bin/bash 1 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 1 sync:x:5:0:sync:/sbin:/bin/sync [root@bogon ~]#
[root@bogon ~]# sort 1.txt |uniq -c |tee -a a.txt 1 adm:x:3:4:adm:/var/adm:/sbin/nologin 1 bin:x:1:1:bin:/bin:/sbin/nologin 1 daemon:x:2:2:daemon:/sbin:/sbin/nologin 1 halt:x:7:0:halt:/sbin:/sbin/halt 1 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 1 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 1 operator:x:11:0:operator:/root:/sbin/nologin 1 root:x:0:0:root:/root:/bin/bash 1 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 1 sync:x:5:0:sync:/sbin:/bin/sync [root@bogon ~]# cat a.txt
tr命令 替换字符
[root@bogon ~]# echo "linux" |tr '[ln]' '[Ln]' Linux [root@bogon ~]#
1.将所有的字符变成大写
[root@bogon ~]# echo "linux" |tr '[a-z]' '[A-Z]' LINUX [root@bogon ~]#
2.split 切割 -b 按大小 -l按行数
[root@bogon ~]# split -l 1000
[root@bogon ~]# split -b 1k 1.txt [root@bogon ~]# du -sh * 4.0K 1.txt 4.0K anaconda-ks.cfg 4.0K a.txt 2.2M lnmp-install.log 4.0K xaa
3.指定切割文件的前缀为abc
[root@bogon ~]# split -b 1k 1.txt abc
特殊符号
1.循环
[root@bogon ~]# for i in `seq 1 10` > do > echo $i > done 1 2 3 4 5 6 7 8 9 10 [root@bogon ~]#
2.[ -d dir] 判断目录是否存在
[root@bogon ~]# [ -d linux ] || mkdir linux [root@bogon ~]# [ -d linux ] && mkdir linux mkdir: 无法创建目录"linux": 文件已存在 [root@bogon ~]#