Linux shell基础知识

Posted jack的网络日志

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ~]# 

 

  

 

以上是关于Linux shell基础知识的主要内容,如果未能解决你的问题,请参考以下文章

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

20155307刘浩《网络对抗》逆向及Bof基础

20155311高梓云《网络对抗》逆向及Bof基础

20145301赵嘉鑫《网络对抗》逆向及Bof基础

代码片段:Shell脚本实现重复执行和多进程

Linux系统Bash(Shell)基础知识