Linux终端和shell

Linux终端

虚拟终端 mingetty程序产生

切换终端 ctrl+alt+fn  n=1-6

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

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

/dev/pts/0

Secure shell  SSH TCP 22端口连接到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特性重新开发 能够操作Linux和unix

  zsh

  tcsh

查看当前使用的shell

[root@WebServer ~]# echo $SHELL

/bin/bash

查看Linux可用的shell

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

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

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

which命令查看命令所在的目录

[root@WebServer home]# which ping

/bin/ping

[root@WebServer home]# which ifconfig

/sbin/ifconfig

[root@WebServer home]#

安装外部命令

命令补全和路径补全

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

hash表缓存命令所在位置

hash –d wc 删除wc命令的缓存

hash –r 清空缓存表

路径补全

命令历史

[root@WebServer ~]# echo $HISTSIZE         缓存多少条命令

1000

[root@WebServer ~]# echo $HISTFILESIZE    命令历史文件能够保存多少条命令

1000

[root@WebServer ~]# echo $HISTFILE         查看命令历史文件

/root/.bash_history

[root@WebServer ~]#

[root@WebServer ~]#cat /root/.bash_history  查看保存命令历史

[root@WebServer ~]# history –a   将缓存的新命令 追加到历史文件

查看$HISTCONTROL变量的值

[root@WebServer ~]# echo $HISTCONTROL

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

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

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

执行以前的命令

!!执行上一条命令

history查看命令历史

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

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

上下键可以翻命令历史

Ctrl+P 向上翻

Ctrl+N 向下翻

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

第一种方法

ESC松开 再按 .

第二种方法 输入!$

[root@WebServer ~]# tail -1 !$

tail -1 /etc/passwd

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

[root@WebServer ~]#

History命令参数

-c 清空命令历史

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

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

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

文件名通配符

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

* 代表任意长度的字符

? 代表任意单个字符

[] 代表指定范围的单个字符

[root@WebServer tmp]# touch a ab aab cab adb ayb a91xueitb

[root@WebServer tmp]# ls a*

a  a91xueitb  aab  ab  adb  ayb

[root@WebServer tmp]# ls a*b

a91xueitb  aab  ab  adb  ayb

[root@WebServer tmp]# ls a?b

aab  adb  ayb

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

aab  adb

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

aab  adb  ayb

[root@WebServer tmp]# touch a2b a3b a4b a9b

[root@WebServer tmp]# ls a[0-9]b

a2b  a3b  a4b  a9b

[root@WebServer tmp]# ls a[0-5]b

a2b  a3b  a4b

[root@WebServer tmp]# ls a[^0-5]b

a9b  aab  adb  ayb

查找文件名中间有空格的文件

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

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

a b

使用专门的方法标识特定字符

[[:space:]] 空格

[[:digit:]]    [0-9]

[[:lower:]]   [a-z]

[[:upper:]]   [A-Z]

[[:alpha:]]   [a-Z]

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

a b

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

a2b  a3b  a4b  a9b

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

a b

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

a2b  a3b  a4b  a9b

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

aab  adb  ayb

[root@WebServer tmp]# ls a[^[:lower:]]b

a2b  a3b  a4b  a9b  a b

命令别名

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

[root@WebServer ~]# type alias

查看定义的别名

[root@WebServer ~]# alias

定义命令别名

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

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

调用命令本身

[root@WebServer ~]# \ifconfig

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

[root@WebServer ~]# ls -a

 [root@WebServer ~]# vi .bashrc

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

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

删除别名

[root@WebServer ~]# unalias cdnet

命令替换

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

$(命令)

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

[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"

思考:

在/tmp路径下创建以下目录

etc/init.d

etc/sysconfig

usr/lib

usr/bin

usr/include

var/spool

var/run

proc

sys

bin

lib

media

mnt

[root@WebServer ~]# mkdir

/tmp/{etc/{init.d,sysconfig},usr/{lib,bin,include},var/{spool,run},proc,sys,bin,lib,media,mnt} -pv

重定向和管道

查看标准输入输出设备

ls –l /dev/std*

查看文件内容

tail –f /etc/passwd

ctrl+z将进程转到后台

ps 查看运行的进程

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

重定向 标准输出

Ifconfig eth0 1>abc

重定向 标准错误输出

Ifconfig eth1 2>123

[root@WebServer ~]# useradd hanlihui

[root@WebServer ~]# su hanlihui

[hanlihui@WebServer root]$ cd

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

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

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

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

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

重定向的用途

可以将命令输出保存到文件

可以向配置文件增加内容

可以合并文件内容

管道技术

1.在管道后面的命令 都不应该再跟文件名

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

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

[hanlihui@WebServer ~]$ find /etc -name "*.conf" 2> /dev/null | grep rc

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

xargs让ls支持管道技术

[hanlihui@WebServer ~]$ which cat | xargs ls -l

猜你喜欢

转载自www.cnblogs.com/DBlifeXu/p/10347804.html