zoukankan      html  css  js  c++  java
  • Linux基础入门之Linux终端和shell

    linux终端和shell

    linux终端

    虚拟终端由mingetty程序产生

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

    虚拟终端(输入tty显示当前是那个终端)

    [root@learn ~]# tty

    /dev/tty1

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

    [root@learn ~]# tty

    /dev/pts/0       

    linuxshell

    查看系统使用的shell

    [root@learn ~]# echo $SHELL

    /bin/bash

    查看系统可用的shell

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

    /bin/sh

    /bin/bash

    /sbin/nologin

    /bin/dash

    /bin/tcsh

    /bin/csh

    bash功能

    命令行编辑

    1) 光标快速移动

    ctrl+a 跳到行首

    ctrl+e 跳到行尾

    2) 删除命令中的内容

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

    ctrl+u删除光标行首的字符

    ctrl+k删除光标行尾的字符

    3) 清屏

    ctrl+l  windows命令提示符 cls

    4) 取消不执行的命令

    ctrl+c

    内部命令和外部命令

    内部命令shell自带的命令

    外部命令 在系统的某个路径下的可执行程序,依赖于PATH环境变量进行查找命令

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

    [root@learn ~]# type ls

    ls is aliased to `ls --color=auto'

    [root@learn ~]# type alias

    alias is a shell builtin

    也可用以下命令查看哪些属于内部命令

    [root@learn ~]# man builtin

    查看外部命令搜索路径

    [root@learn ~]# echo $PATH

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

    命令补全 路径补全

    使用tab键进行命令和路径补全操作

    命令历史

    echo $HISTSIZE   缓存多少条命令

    [root@learn ~]# echo $HISTSIZE

    1000

    echo $HISTFILE   查看历史文件

    [root@learn ~]# echo $HISTFILE

    /root/.bash_history

    echo $HISTFILESIZE   命令历史文件能保存的条数

    [root@learn ~]# echo $HISTFILESIZE

    1000

    cat  /root/.bash_history  查看保存命令历史

    [root@learn ~]# cat /root/.bash_history |head -1    #通过管道过滤显示一条命令

    ifconfig

    1) 显示历史记录规则

    [root@learn ~]# echo $HISTCONTROL

    ignoredups

    含义:

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

    ignorespace 不记录以空格开头的命令

    ignoreboth 不记录后面重复的命令和不记录以空格开头的命令

    永久生效

    echo 'export HISTCONTROL=ignoreboth' >> /etc/profile

    通过export 修改历史记录规则

    [root@learn ~]# export HISTCONTROL=ignoreboth

    [root@learn ~]#  history |tail -2  

      480  history |tail -1

      481  history |tail

    前面有空格则不记录历史命令

    2) 执行以前的命令(快捷键)

    !!执行上一条命令

    history查看历史命令

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

    !-1执行命令历史中倒数第一条命令

    上下键可以翻命令

    ctrl+p向上翻

    ctrl+n向下翻

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

    方法一:

    ESC松开按.

    方法二:

    新命令后加!$

    [root@learn ~]# head !$

    head /etc/passwd

    history命令参数

    -c 清空历史命令

    -w覆盖命令到历史文件

    -a 追加命令到历史文件

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

    479  export HISTCONTROL=ignoreboth

      480  history |tail -1

      481  history |tail

      482  history |tail -3

    [root@learn ~]# history -d 480

    [root@learn ~]# history |tail -5

      479  export HISTCONTROL=ignoreboth

      480  history |tail

      481  history |tail -3

      482  history -d 480

      483  history |tail -5

    文件名通配符

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

    * 代表任意长度的字符

    [root@learn lisi]# touch a acb addb cdb ateb

    [root@learn lisi]# ls a*

    a  acb  addb  ateb

    [root@learn lisi]# ls a*b

    acb  addb  ateb

    ? 代表任意单个字符

    [root@learn lisi]# touch a acb addb cdb ateb

    [root@learn lisi]# ls a?

    ls: cannot access a?: No such file or directory

    [root@learn lisi]# ls a?b

    acb

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

    [root@learn lisi]# ls a[0-9]*

    a23b  a3b  a4b  a9b

    [root@learn lisi]# ls a[0-9]b

    a3b  a4b  a9b

    ^ 排除

    [root@learn lisi]# touch a23b a3b a9b a4b

    [root@learn lisi]# ls a[^0-5]b

    a9b  acb

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

    [root@learn lisi]# touch 'a b'

    [root@learn lisi]# ls *[' ']b

    a b

    [root@learn lisi]# ls *[' ']*

    a b

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

    [root@learn lisi]# ls a[[:space:]]b      #空格

    a b

    [root@learn lisi]# ls a[[:digit:]]b       #[0-9]

    a3b  a4b  a9b

    特定字符的含义:

    [[:space:]] 空格

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

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

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

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

    命令别名

    格式: alias cmdalias='command [option] [argument]'

    查看别名类型

    [root@learn ~]# type alias

    查看定义的别名

    [root@learn ~]# alias

    定义别名

    [root@learn ~]# alias if='ifconfig eth0'

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

    调用命令本身(去掉别名含义)

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

    [root@learn ~]# ifconfig

    eth0      Link encap:Ethernet  HWaddr 00:0C:29:41:FA:11  

              ......

    [root@learn ~]# \ifconfig    #去掉别名,使用命令本身

    eth0      Link encap:Ethernet  HWaddr 00:0C:29:41:FA:11  

      ......

    eth1      Link encap:Ethernet  HWaddr 00:0C:29:41:FA:1B  

    ......

    lo        Link encap:Local Loopback  

    ......

    将别名添加到用户配置文件

    [root@learn ~]# vim .bashrc

    编辑/etc/bashrc添加别名,对所有用户生效(全局)

    [root@learn ~]# vim /etc/bashrc

    删除别名

    [root@learn ~]# unalias if1

    [root@learn ~]# if1

    -bash: if1: command not found

    命令替换

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

    格式: 命令 $(命令)

    [root@learn home]# echo "The current directory is $(pwd)"

    The current directory is /home

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

    [root@learn home]# ls

    file-2017-01-05-11:47:38

    格式:使用反引号实现命令替换

    [root@learn home]# touch file-`(date +%Y-%m-%d-%H:%M:%S)`

    [root@learn home]# ls

    file-2017-01-05-11:47:38

    bash" "是弱引用能够实现命令替换

    [root@learn home]# echo "The current directory is $(pwd)"

    The current directory is /home

    bash' ' 是强引用不能实现命令替换

    [root@learn home]# echo 'The current directory is $(pwd)'

    The current directory is $(pwd)

    命令行展开{}多项式

    工作中会遇到如新建很多文件,使用一条命令来解决此问题,这时就需要使用命令行展开来实现,例:

    [root@learn lisi]# touch a.txt b.txt.c.txt.d.txt

    [root@learn lisi]# ls

    a.txt  b.txt.c.txt.d.txt

    这样写很繁琐,他们有共通点,这时我们用命令行展开来写,需要用到{}来实现。

    [root@learn lisi]# touch {a..d}.txt

    [root@learn lisi]# ls

    a.txt  b.txt  c.txt  d.txt

    怎么样?这样写是不是很方便。还可以创建更复杂的。

    比如我们想创建

    /home/lisi/a.txt

    /home/lisi/b.txt

    /home/lisi/a/a.txt

    /home/lisi/a/b.txt

    /home/lisi/c

    /home/lisi/d

    但是不能创建目录,需要先创建目录,如果是创建目录则不会存在次问题。

    [root@learn lisi]# mkdir a

    [root@learn lisi]# touch {a,b}.txt a/{a,b}.txt {c,d}

    [root@learn lisi]# touch {{a,b}.txt,a/{a,b}.txt,{c,d}}  #同上一条命令

    [root@learn lisi]# ls

    a  a.txt  b.txt  c  d

    [root@learn lisi]# tree

    .

    ├── a

       ├── a.txt

       └── b.txt

    ├── a.txt

    ├── b.txt

    ├── c

    └── d

    重定向

    重定向的用途

    可以将命令输出保存到文件,可以向配置文件增加内容,可以合并文件内容。

    查看标准输入输出设备

    [lisi@learn ~]$ ls -l /dev/std*

    lrwxrwxrwx 1 root root 15 Jan  8 18:29 /dev/stderr -> /proc/self/fd/2

    lrwxrwxrwx 1 root root 15 Jan  8 18:29 /dev/stdin -> /proc/self/fd/0

    lrwxrwxrwx 1 root root 15 Jan  8 18:29 /dev/stdout -> /proc/self/fd/1

    查看文件内容

    [lisi@learn ~]$ tail -2f /etc/passwd

    li:x:500:500::/home/li:/bin/bash

    lisi:x:501:501::/home/lisi:/bin/bash

    ctrl+z将进程转到后台

    ps 查看运行的进程

    [lisi@learn ~]$ ps

      PID TTY          TIME CMD

     5954 pts/0    00:00:00 bash

     6004 pts/0    00:00:00 tail

     6009 pts/0    00:00:00 ps

    [lisi@learn ~]$ ls -l /proc/6004/fd  #查看6004进程下的文件描述符

    total 0

    lrwx------ 1 lisi lisi 64 Jan 10 22:01 0 -> /dev/pts/0   #标准输入

    lrwx------ 1 lisi lisi 64 Jan 10 22:01 1 -> /dev/pts/0   #标准输出

    lrwx------ 1 lisi lisi 64 Jan 10 22:00 2 -> /dev/pts/0   #标准错误输出

    lr-x------ 1 lisi lisi 64 Jan 10 22:01 3 -> /etc/passwd   #进程指向的文件

    lr-x------ 1 lisi lisi 64 Jan 10 22:01 4 -> inotify

    重定向 标准输出

    [root@learn ~]$ ifconfig eth0 1>abc

    重定向 标准错误输出

    [root@learn ~]$ ifconfig eth1 2>123

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

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

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

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

    重定向 追加

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

    管道

    1.在管道后面的命令都不应该再跟文件名。如果跟的话则是后面命令的结果。

    [lisi@learn ~]$ tail /etc/passwd |head -2 /etc/passwd  #管道后面这条命令加了文件名,列出后面命令的值

    root:x:0:0:root:/root:/bin/bash

    bin:x:1:1:bin:/bin:/sbin/nologin 

    [lisi@learn ~]$ tail /etc/passwd |head -2  #不加则是需要的值

    vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

    abrt:x:173:173::/etc/abrt:/sbin/nologin

    2.在管道中只有标准输出才传递给下一个命令;标准错误输出直接输出到终端,可以把标准错误输出给重定向。

    [lisi@learn ~]$ find /etc/ -name "*.conf" 2>/dev/null |grep rc   #把标准错误输出到空设备去,过滤包含rc内容的文件

    /etc/latrace.d/resource.conf

    /etc/libreport/events.d/vimrc_event.conf

    /etc/init/rcS.conf

    /etc/init/rc.conf

    /etc/init/rcS-emergency.conf

    /etc/init/rcS-sulogin.conf

    3.有些命令不支持管道,让xargs支持这些命令。

    [root@learn home]# which cat |ls -l   #列出的是当前目录下的内容

    total 8

    drwx------ 2  500  500 4096 Jan 10 21:39 lisi

    drwxr-xr-x 9 root root 4096 Feb 26  2016 vmware-tools-distrib

    [root@learn home]# which cat |xargs ls -l  #加上xargs后得到需要的值

    -rwxr-xr-x. 1 root root 48568 Oct 15  2014 /bin/cat

  • 相关阅读:
    VirtualBox不显示64bit版本的iso
    学习和参考资料
    神经网络和机器学习资料整理
    动态空间释放时的错误操作引起的运行时错误
    WIN7 X64的运行命令窗口
    vs2010中的ADO控件及绑定控件
    AdventureWorks2012.mdf的使用
    VS2008/2010 都不能使用Access2010数据库
    WIN7 64位操作系统 无法找到Access驱动
    如何在VS2010的VC++ 基于对话框的MFC程序中添加菜单
  • 原文地址:https://www.cnblogs.com/pathping/p/7102941.html
Copyright © 2011-2022 走看看