linux学习11 Linux基础命令及命令历史

Posted Presley

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux学习11 Linux基础命令及命令历史相关的知识,希望对你有一定的参考价值。

一、Linux系统上的文件类型

  1、- :常规文件:在其它程序中用f表示。比如我们用ls -l命令查看的第一个内容

[root@localhost ~]# ls -l
total 4
-rw-------. 1 root root 1252 Oct 24  2018 anaconda-ks.cfg

  2、d:directory,目录文件

  3、b:block device,块设备文件,以"block"为单位进行随机访问

[root@localhost ~]# ls -l /dev/sda*
brw-rw---- 1 root disk 8, 0 Dec 14 17:42 /dev/sda
brw-rw---- 1 root disk 8, 1 Dec 14 17:42 /dev/sda1
brw-rw---- 1 root disk 8, 2 Dec 14 17:42 /dev/sda2

  4、c:character device,字符设备文件,支持以“character”为单位进行线性访问

      major number:主设备号,用来标识设备类型,进而确定要加载的驱动程序

      minor number:次设备号,用来标识同一类型中的不同的设备

        8位二进制:0-255

  5、l:symbolic link,符号链接文件,也叫软连接文件

  6、p:pipe,命名管道

  7、s:socker,套接字文件,主要用于服务提供

    

 

 二、常用的基本命令

  1、外部命令和内部命令

    a、linux上的命令根据其是否在文件系统上存在一个与之对应的同名的文件。在我们文件系统上某一个路径下是否与这个命令本身有一个独立的文件我们可以把命令分为内建命令和外部命令。在我们文件系统的路径上有一个独立的文件而命令名就是文件名,这种就叫外部命令其实所有的文件都必然是外部命令,那么为什么会出现内建命令呢?是因为有一个外部命令自带有很多命令,我们有一个外部命令叫bash,bash就是外部的,但是bash自身很强大,他自带有很多小命令,所以这些小命令就是内部命令。

    b、我们如何去区分内部命令还是外部命令呢?我们可以用type来查看

    type COMMAND:

      内部: builtin

[root@localhost /]# type cd
cd is a shell builtin

      外部:显示为命令文件路径

        注意,命令可以有别名,别名可以与原名相同,此时原名被隐藏,此时如果要运行原命令,则使用 \\COMMAND

[root@localhost /]# type bash
bash is /usr/bin/bash
[root@localhost /]# type ls  #表示ls其实是 ls --color的简称
ls is aliased to `ls --color=auto\'
[root@localhost /]# ls
application  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@localhost /]# \\ls  #表示只运行ls
application  bin  boot    dev  etc  home    lib  lib64  media  mnt    opt  proc  root  run  sbin  srv  sys  tmp  usr    var

    c、命令别名

      获取所有可用别名的定义:

[root@localhost /]# 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 rm=\'rm -i\'
alias which=\'alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde\'

      定义别名,注意,此定义方式只对当前shell有效

[root@localhost /]# alias cls="clear"
[root@localhost /]# alias 
alias cls=\'clear\'
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 rm=\'rm -i\'
alias which=\'alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde\'

      撤销别名

[root@localhost /]# unalias cls
[root@localhost /]# 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 rm=\'rm -i\'
alias which=\'alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde\'

  2、which,显示命令的完整路径

    a、which --skip-alias  COMMAND  && \\which COMMAND ,忽略别名

[root@localhost /]# which --skip-alias ls
/usr/bin/ls
[root@localhost /]# \\which ls
/usr/bin/ls

  3、whereis命令,显示命令文件,源码文件及手册页

[root@localhost /]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

    a、-b,仅搜索二进制程序路径

    b、-m,仅搜索使用手册文件路径

  4、who命令,查看登陆当前系统的相关用户信息

[root@localhost /]# who
root     pts/0        2019-12-14 17:43 (192.168.10.1)
root     pts/1        2019-12-14 18:37 (192.168.10.1)

    a、-b,系统此次启动的时间

[root@localhost /]# who -b
         system boot  2019-12-14 17:42

    b、-d,显示死亡的进程

    c、-l,显示登陆进程

[root@localhost /]# who -l
LOGIN    tty1         2019-12-14 17:43               672 id=tty1

    d、-r,查看进程级别

[root@localhost /]# who -r
         run-level 3  2019-12-14 17:43

  5、w 命令,他不但能显示谁登陆了还能显示他们在干嘛,相当于增强版的who命令

[root@localhost /]# w
 18:52:24 up  1:09,  2 users,  load average: 0.06, 0.03, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.10.1     17:43    0.00s  0.12s  0.00s w
root     pts/1    192.168.10.1     18:37   14:39   0.02s  0.00s less -s

三、bash的基础特性

  1、命令历史:shell进程会在其会话中保存此前用户提交执行过的命令

    a、history命令可用查看

[root@localhost /]# type history 
history is a shell builtin

      定制history的功能,可通过环境变量实现:

        HISTSIZE:shell进程可保留的命令历史的条数,默认为1000条

[root@localhost /]# echo $HISTSIZE
1000

        HISTFILE:持久保存命令历史的文件,每一个用户登陆时命令历史会首先从历史文件中加载此前所有的命令到内存中,而后新的命令就补充在附加在这个内存中历史命令后面,所以使用history命令看到的是整个内存中的历史,使用cat看到的是文件中的内容。当我们用户shell登出时会自动保存相应命令

[root@localhost ~]# echo $HISTFILE
/root/.bash_history

        HISTFILESIZE:命令历史文件的大小,文件保存一千条命令

[root@localhost ~]# echo $HISTFILESIZE
1000

  2、history命令用法

    a、history [-c] [-d offset] [n]:操纵命令历史中多少条的

    b、history -anrw [filename]:操纵历史文件的

    c、history -ps arg [arg...]:定义history自己的工作特性的

      history -c:清空历史命令,只清空内存中不会清空文件中。

      history -d  offset:删除某一个历史命令

        删除id为200的历史命令

[root@localhost ~]# history -d 200

        从id为200的历史命令开始删除,删除5条

[root@localhost ~]# history -d 200 5

      history -r:读取历史文件并将内容追加到历史列表中

      history -w:将当前历史写入到历史文件中,并追加到历史列表中

    d、显示最近10条的命令历史

[root@localhost ~]# history 10
  352  cat /root/.bash_history |wc -l
  353  cat /root/.bash_history 
  354  cat /root/.bash_history |wc -l
  355  history -w
  356  history 
  357  history -d 351
  358  history 
  359  history -d 353 5
  360  history 
  361  history 10

  3、调用命令历史列表中的命令

    a、!#:再一次执行历史列表中的第#条命令

[root@localhost ~]# history 4
  363  ls
  364  history 
  365  history 2
  366  history 4
[root@localhost ~]# !363
ls
anaconda-ks.cfg

    b、!!:再一次执行上一条命令(或者按上键也可以)

    c、!STRING:再一次执行命令历史列表中最近一个以STRING开头的命令

      注意:命令的重复执行有时候需要依赖于幂等性;

  4、调用上一条命令的最后一个参数

    a、ESC,. 

    b、!$

[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg-ens33 
/etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# cat !$
cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
...

  5、控制命令历史纪录的方式

    a、环境变量:HISTCONTROL

[root@localhost ~]# echo $HISTCONTROL
ignoredups #忽略重复的,连续的就是重复的,比如多次执行某一个命令

      ignoredups:忽略重复的命令

      ignorespace:忽略以空白字符开头的命令

      ignoreboth:以上两者同时生效

    b、修改变量的值

      NAME=\'VALUE\',这种修改只对当前shell进程有效

以上是关于linux学习11 Linux基础命令及命令历史的主要内容,如果未能解决你的问题,请参考以下文章

Linux基础命令及命令历史

Linux CentOS 7 Shell基础(命令历史,管道,作业控制,变量及环境变量)

浅谈如何学习linux

Linux课程有啥内容?

Linux 基础学习bash特性

Linux课程主要讲啥内容?