Linux基础入门 第二章 Linux终端和shell

时间:2023-03-09 22:56:52
Linux基础入门 第二章 Linux终端和shell

Linux终端

  进入编辑IP地址命令:vi /etc/sysconfig/network-scripts/ifcfg-eth0

    按键“i”:进行编辑

    按键“ESC”:退出编辑

     按键“:”:输入wq,退出

  重启网络服务命令:/etc/init.d/network restart

  虚拟终端 mingetty 程序产生

  切换终端 ctrl+alt+FN N=1~6

  输入tty显示当前的那个终端

  模拟终端 使用ssh通过网络连接到Linux

  /dev/pts/0

  Secure shell    SSH TCP22端口连接到Linux

Linux的shell

  GUI

    Gnome C语言开发

    KDE C++开发

    Xface 轻量级图形界面

  CLI

    Bsh Unix提供的shell 功能弱

    sh 安全稳定

    csh Bill joy 研发Csh语法接近C语言 功能比sh强

    ksh 商业版的ksh改进了csh GNU组织开发了免费的ksh 比商业版的ksh功能少

    bash GNU组织融合了Ksh Csh 和sh特性重新开发 能够操纵Liunx和Unix

    zsh

    tcsh

查看当前使用的shell

[root@WebServer ~]# echo $0

-bash

查看Linux可用的shell

[root@WebServer ~]# cat /etc/shells

/bin/sh

/bin/bash

bash功能

  1. 命令行编辑
  2. 内部命令和外部命令
  3. 命令补全 路径补全
  4. 命令历史
  5. 文件名通配符
  6. 命令别名
  7. 命令替换
  8. 命令行展开{} 多项式
  9. 管道和重定向

命令行编辑

  光标快速移动

  CTRL+a    快速跳转到行首

  CTRL+e    快读跳转到行尾

  删除命令行中的内容

  CTRL+w   删除光标前一个单词

  CTRL+u    删除光标到行首的字符

  CTRL+k     删除光标到行尾的字符

  清屏

  CTRL+l      Windows命令提示符 cls

  取消不执行的命令

  CTRL+c

内部命令和外部命令

内部命令         shell程序自带的命令

外部命令         在系统的某个路径下的可执行程序

外部命令查找         依赖于PATH变量

查看外部命令搜索路径 查看PATH变量

echo $PATH

  [root@localhost ~]# echo $PATH

  /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

type pwd 查看是否是内部命令还是外部命令

[root@localhost ~]# type pwd

  pwd is a shell builtin

命令补全和路径补全

命令补全         按tab键补全命令          连按tab键 列出所有可能的命令

hash表缓存命令所在位置

hash –d wc 删除wc命令缓存

hash –r     清空hash缓存表

路径补全         按tab键补全路径          连按tab键 列出所有可能的命令

命令历史

  查看命令历史:history

  缓存中的命令覆盖历史文件中:history –w

  将缓存的新命令 追加到历史文件中:history –a

  查看缓存大小命令:echo $HISTSIZE

  [root@localhost ~]# echo $HISTSIZE

  1000

  查看历史文件大小命令:echo $HISTFILESIZE

  [root@localhost ~]# echo $HISTFILESIZE

  1000

  查看历史文件命令:echo $HISTFILE

  [root@localhost ~]# echo $HISTFILE

  /root/.bash_history

查看$HISTCONTROL变量的值

  echo $HISTCONTROL=ignoreups

  [root@localhost ~]# echo $HISTCONTROL

  Ignoredups       不记录后面重复的命令,只记录第一个

  export HISTCONTROL=ignorespace

  [root@localhost ~]# export HISTCONTROL=ignorespace

  [root@localhost ~]# echo $HISTCONTROL

  Ignorespace     不记录以空格开始的命令

  export HISTCONTROL=ignoreboth

  [root@localhost ~]# export HISTCONTROL=ignoreboth

  [root@localhost ~]# echo $HISTCONTROL

  Ignoreboth       不记录以空格开始的命令,也不记录后面重复的命令

  执行之前的命令

  History 查看命令历史

  !10   可以执行命令历史中第10行命令

  !-1    可以执行命令历史中倒数第1行命令

  上下键可以翻命令历史

  Ctrl+p       向上翻

  Ctrl+n       向下翻

  当前命令 调用上一条命令的最后一个参数

  第一种方法:

  ESC松开 再按“.”

  第二种方法:

  输入“!$”

  清空命令历史:history -c

  [root@localhost ~]# history -c

  [root@localhost ~]# history

  1         history

  History 命令参数

  -c      清空命令历史

  -w     保存命令历史到历史文件

  -a      附加命令历史到历史文件

  -d 4  删除命令历史的第4条命令

文件名通配符

通配符 特殊的字符       不表示字符的表面意思         而是能够匹配符合指定特征的字符

“*”       代表任意长度的字符

“?”       代表任意单个字符

“[]”

“[^]”

“[‘ ‘]”

查看当前目录下所有的文件名字

[root@WebServer tmp]# ls

   a1c  a5b  a b  acb  bac  bca  cab         yum.log

   a3d  a7c  abc  b9c  bba  caa  lost+found

  通配符“*”

  [root@WebServer tmp]# ls a*

  a1c  a3d  a5b  a7c  a b  abc  acb

  通配符“?”

  [root@WebServer tmp]# ls a?b

  a5b  a b  acb

  通配符“[字母区间]”

  [root@WebServer tmp]# ls a[a-z]b

  Acb

  通配符“[数字区间]”

  [root@WebServer tmp]# ls a[1-9]c

  a1c  a7c

通配符“[‘ ‘]” 查找文件名中间有空格的文件

[root@WebServer tmp]# ls a[' ']b

a b

[:digit:]     代表数字 [0-9]

[root@WebServer tmp]# ls a[[:digit:]]c

a1c  a7c

[:space:]  代表空格

[root@WebServer tmp]# ls a[[:space:]]b

a b

[:lower:]   代表[a-z]

[:upper:]  代表[A-Z]

[:alpha:]   代表[a-Z]

通配符“[^ ]”排除所选范围内的文件

[root@WebServer tmp]# ls a[^1-5]c

a7c  abc

命令别名

alias cmdalias=’command [option][argument]’

查看alias命令为shell内部命令

[root@WebServer ~]# type alias

alias is a shell builtin

查看定义的别名

[root@WebServer ~]# alias

alias cp='cp -i'

alias l.='ls -d .* --color=auto'

alias ll='ls -l --color=auto'

alias ls='ls --color=auto'

alias mv='mv -i'

alias rm='rm -i'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

定义命令别名

[root@WebServer ~]# alias if1='ifconfig eth0'

调用定义命令

[root@WebServer ~]# if1

eth0      Link encap:Ethernet  HWaddr 00:0C:29:5B:9F:95

inet addr:192.168.80.222  Bcast:192.168.80.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe5b:9f95/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:1413 errors:0 dropped:0 overruns:0 frame:0

TX packets:552 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:108205 (105.6 KiB)  TX bytes:60165 (58.7 KiB)

调用命令本身

[root@WebServer ~]# \ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:5B:9F:95

inet addr:192.168.80.222  Bcast:192.168.80.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe5b:9f95/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:1648 errors:0 dropped:0 overruns:0 frame:0

TX packets:667 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:127043 (124.0 KiB)  TX bytes:74955 (73.1 KiB)

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING  MTU:16436  Metric:1

RX packets:5 errors:0 dropped:0 overruns:0 frame:0

TX packets:5 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:490 (490.0 b)  TX bytes:490 (490.0 b)

查看当前目录下所有隐藏文件

[root@WebServer ~]# ls –a

将命令别名添加到用户环境配置文件

[root@WebServer ~]# vi .bashrc

# .bashrc

# User specific aliases and functions

alias rm='rm -i'

alias cp='cp -i'

alias mv='mv -i'

编辑/etc/bashrc 添加命令别名对所有用户生效

[root@WebServer ~]# vi /etc/bashrc

删除别名unalias cmdalias

命令替换

使用命令执行的结果替换该命令

使用“反引号”命令替换`命令`

[root@WebServer tmp]# touch file-`date +%Y-%m-%d-%H-%M-%S`

使用$(命令)替换命令

[root@WebServer tmp]# echo "The current directory is $(pwd)"

The current directory is /tmp

[root@WebServer ~]# date --help

[root@WebServer tmp]# touch file-$(date +%Y-%m-%d-%H-%M-%S)

在bash中反引号` `弱引用 能够实现命令替换,单引号‘ ‘强引用不能够实现命令替换

路径展开

mkdir /tmp/zz/a/b /tmp/yy/a/b等于mkdir /tmp/{zz,yy}/a/b

[root@WebServer ~]# mkdir /tmp/{a,b}{c,d} -v

mkdir: 已创建目录 "/tmp/ac"

mkdir: 已创建目录 "/tmp/ad"

mkdir: 已创建目录 "/tmp/bc"

mkdir: 已创建目录 "/tmp/bd"

[root@WebServer ~]# mkdir /tmp/{zz,yy}/a/b -pv

mkdir: 已创建目录 "/tmp/zz"

mkdir: 已创建目录 "/tmp/zz/a"

mkdir: 已创建目录 "/tmp/zz/a/b"

mkdir: 已创建目录 "/tmp/yy"

mkdir: 已创建目录 "/tmp/yy/a"

mkdir: 已创建目录 "/tmp/yy/a/b

mkdir /tmp/{etc/{init.d,sysconfig},usr/{lib,bin,include},var/{spool,run},proc,sys,bin,lib}

输入输出重定向

标准输入(stdin)

标准输出(stdout)

标准错误输出(stderr)

查看标准输入输出设备

ls –l /dev/std*

查看文件内容

tail –f /etc/passwd

ctrl+z 将进程转到后台

ps 查看运行的进程

ls –l /proc/进程号/fd       查看进程下的文件描述符

[root@WebServer ~]# ps

PID TTY          TIME CMD

1235 pts/0    00:00:00 bash

1253 pts/0    00:00:00 tail

1274 pts/0    00:00:00 ps

[root@WebServer ~]# ls -l /proc/1253/fd

总用量 0

lrwx------. 1 root root 64 3月  11 04:47 0 -> /dev/pts/0

lrwx------. 1 root root 64 3月  11 04:47 1 -> /dev/pts/0

lrwx------. 1 root root 64 3月  11 04:47 2 -> /dev/pts/0

lr-x------. 1 root root 64 3月  11 04:47 3 -> /etc/passwd

lr-x------. 1 root root 64 3月  11 04:47 4 -> inotify

重定向:改变标准输入、标准输出的方向叫做重定向

重定向标准输出

操作符“>”将命令的执行结果输出到指定的文件中,而不是直接显示在屏幕上

将标准输出和标准错误输出重定向到同一个文件

[zzy@WebServer ~]$ find /etc/ -name "*.conf" &>ab

[zzy@WebServer ~]$ cat ab

将标准输出和标准错误输出重定向到不同文件

[zzy@WebServer ~]$ find /etc/ -name "*.conf" 1>a 2>b

[zzy@WebServer ~]$ cat a

操作符“>>”将命令执行的结果追加输出到指定文件

[zzy@WebServer ~]$ echo "12345">hn

[zzy@WebServer ~]$ cat hn

[zzy@WebServer ~]$ echo "abcde">>hn

[zzy@WebServer ~]$ cat hn

abcde

重定向标准输入

操作符“<”将命令中接受输入的途径由默认的键盘更改为指定的文件

Here document

操作符“<<”指定输入结束符

重定向     标准输出

Ifconfig eth0 1>123

[root@WebServer ~]# ifconfig eth0 1>123

[root@WebServer ~]# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:5B:9F:95

inet addr:192.168.80.222  Bcast:192.168.80.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe5b:9f95/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:775 errors:0 dropped:0 overruns:0 frame:0

TX packets:309 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:59300 (57.9 KiB)  TX bytes:37335 (36.4 KiB)

重定向     标准错误输出

Ifconfig eth1 2>234

[root@WebServer ~]# ifconfig eth1 2>234

[root@WebServer ~]# cat 234

eth1: error fetching interface information: Device not found

[zzy@WebServer ~]$ find /etc/ -name "*.conf"

/etc/security/group.conf

find: “/etc/audit”: 权限不够

管道技术

1、  在管道后面的命令,都不应该再加文件名

2、  再管道中只有标准输出才能传递给下一个命令 标准错误输出直接输出到终端

可以把标准错误输出给重定向

[worker@WebServer ~]$ find /etc –name “*.conf” 2>/dev/null | grep rc

3、  有些命令不支持管道技术

xargs 让ls支持管道技术

[root@WebServer ~]# which cat | xargs ls –l

谢谢韩立辉老师