Linux基本常用命令整理

1、hash,type

    hash命令的作用是查看内存缓存中外部命令的命中数,这些命令都是外部命令,其工作原理是:第一次使用这些外部命令时,系统从环境变量PATH所指的路径中读取这些命令的路径,并缓存在内存里,一遍下次使用。这就是第一次在使用一个命令比较慢的原因。

[root@server ~]# hash
hits	command
   9	/bin/cat
   2	/usr/bin/stat
   1	/usr/bin/man
   4	/bin/ls
   8	/usr/bin/clear

    hash命令常用到的2个参数是:

        -d:清除指定缓存的内容,此时我们可以看到指定的命令在缓存中就清除了。

[root@server ~]# hash -d man
[root@server ~]# hash
hits	command
   9	/bin/cat
   2	/usr/bin/stat
   4	/bin/ls
   8	/usr/bin/clear

        -r:清空缓存,是彻底清除缓存。

[root@server ~]# hash -r
[root@server ~]# hash
hash: hash table empty

    如何判断外部命令与系统内部命令,就需要使用到type命令。type参数如果是外部命令并且在缓存中有的话,会提示命中(hashed)。

[root@server ~]# type cd pwd
cd is a shell builtin
pwd is a shell builtin
[root@server ~]# type more less stat
more is /bin/more
less is /usr/bin/less
stat is hashed (/usr/bin/stat)

2、stat,touch 

    stat命令是查看指定文件的元数据信息,一般有文件名,存储路径,大小,数据块数目,文件类型,文件权限,UID,GID,访问时间戳,修改时间戳(一般指的是内容上的修改),改变时间戳。

[root@server tmp]# stat filestat 
  File: `filestat'
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 131077      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-07-01 22:46:03.553999333 +0800
Modify: 2014-07-01 22:46:03.553999333 +0800
Change: 2014-07-01 22:46:03.553999333 +0800

    touch命令的主要作用是改变指定文件的时间戳,运行这个命令以后我们发现Access,Modify,Change对应的时间戳都会相应的改变。

[root@server tmp]# touch filestat 
[root@server tmp]# stat filestat 
  File: `filestat'
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 131077      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-07-01 22:49:31.840997595 +0800
Modify: 2014-07-01 22:49:31.840997595 +0800
Change: 2014-07-01 22:49:31.840997595 +0800

    touch命令常用选项

        -t:自己指定时间格式 具体格式:[[CC]YY]MMDDhhmm[.ss]

        -a:修改Access时间戳,还可以与-t一起使用,修改为指定的时间戳。

[root@server tmp]# touch -a filestat 
[root@server tmp]# stat filestat 
  File: `filestat'
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 131077      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-07-01 22:57:50.132995338 +0800
Modify: 2014-07-01 22:49:31.840997595 +0800
Change: 2014-07-01 22:57:50.132995338 +0800
[root@server tmp]# touch -a -t 201001010800.34 filestat 
[root@server tmp]# stat filestat 
  File: `filestat'
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 131077      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-01-01 08:00:34.000000000 +0800
Modify: 2014-07-01 22:49:31.840997595 +0800
Change: 2014-07-01 23:32:54.750997287 +0800

        -m:修改Modify时间戳,还可以与-t一起使用,修改为指定的时间戳。

[root@server tmp]# touch -m -t 200001010800.34 filestat 
[root@server tmp]# stat filestat 
  File: `filestat'
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 131077      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-01-01 08:00:34.000000000 +0800
Modify: 2000-01-01 08:00:34.000000000 +0800
Change: 2014-07-01 23:36:43.481992650 +0800

        -c:就是当指定文件不存在是就不会创建,默认是会创建的,下面的file2,file3刚开始是不存在的。

[root@server tmp]# touch file2
[root@server tmp]# ll /tmp/file2
-rw-r--r-- 1 root root 0 Jul  1 23:39 /tmp/file2
[root@server tmp]# ll /tmp/file3
ls: cannot access /tmp/file3: No such file or directory

3、shutdown,reboot,halt,poweroff

    shutdown,reboot,halt,poweroff是关于开机,关机的一些常用命令。这些命令一般熟练使用一个就可以,我个人倾向于使用shutdown。

    Usage: shutdown [OPTION]... TIME [MESSAGE]

    这里的TIME格式可以是:now,+m(m分钟之后),hh:mm(24小时格式时间)

    常用的选项有:

            -r:在指定的时间重启

            -h:在指定的时间关机

            -c:取消shutdown设定的相关操作

            -k:在指定时间通知系统上的所有登陆用户有哦maintenance(维修)。

[root@server ~]# shutdown -h now            #系统会立即关机
[root@server ~]# shutdown -r +5  #系统会在5分钟后重启,此时发现这条指令有错误,可以用 shutdown -c 取消

[root@server ~]# shutdown -k +1
[root@server ~]# 
Broadcast message from root@server.magedu.com
	(/dev/pts/3) at 0:13 ...

The system is going down for maintenance in 1 minute!
#此时会立即广播到系统登陆的用户,显示上面的信息。

4、date,hwclock

    date是显示和设置系统的时间和日期

    Usage:

    date [OPTION]... [+FORMAT]

    经常使用的FORMAT如下:

[root@server ~]# date +%s
1404232033         # %s 以时间戳计时,即就是从1970.01.01 00:00:00 到现在所经过的秒数
[root@server ~]# date +%F
2014-07-02
[root@server ~]# date +%D
07/02/14        # %F,%D 都是显示日期的,显示的格式不一样
[root@server ~]# date +%T
09:55:13        #显示当前时间 时:分:秒  相当于 %H:%M:%S
[root@server ~]# date +%r
09:57:39 AM                #以12小时制显示本地时间  时:分:秒
[root@server ~]# date +%R
09:57                      #以24小时制显示时间 时:分
[root@server ~]# date +%Y
2014                          #显示日期年份 4 位表示
[root@server ~]# date +%y
14                            #显示日期年份 2 位表示
[root@server ~]# date +%m
07                            #显示日期月份
[root@server ~]# date +%d
02                            #显示日期天数
[root@server ~]# date +%H
09                            #显示时间的小时
[root@server ~]# date +%M
59                            #显示时间的分钟
[root@server ~]# date +%S
54                            #显示时间的秒

[root@server ~]# date -d " oct 8 14:30" +%s
1412749800

 #date 命令的常用参数:
 #-d "STRING"   以字符串形式显示日期时间
 #-s "STRING"	通常与-d一起使用,显示-d设置的字符串时间从1970-01-01开始到现在经历过的秒数
像在文件恢复时,可能用到时间点恢复。

    当然这些格式可以自己设定:

[root@server ~]# date +'%Y*%m*%d  %H@%M'
2014*07*02  10@07

    设定日期和时间:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

[root@server ~]# date 101007072010.33
Sun Oct 10 07:07:33 CST 2010                #设定时间和日期是2010-10-10 07:07:33

    hwclock 是显示硬件时钟,是在BIOS主板上的时间

    比较常用的选项是:

        -s:以硬件时钟为基准同步系统时间。

        -w:以系统时间为基准同步硬件时钟。

        --adjust 以--adjustfile指定路径的文件中上一次硬件变更来校准硬件时间。

        --adjfile=path 每次修改硬件时间都会记录到一个文件中,默认是/etc/adjtime。

5、tty,w,who,whoami

    tty命令是查看当前登陆用户的终端类型。常见的终端类型有:

    虚拟终端:/dev/tty#        一般指的是本地登陆的用户

    伪终端:/dev/pts/#        一般指的远程登陆工具登陆的用户

    控制台:    /dev/console

    串行终端: /dev/ttyS#

[root@server ~]# tty
/dev/pts/4

    w,who,whoami显示系统用户登陆的情况,每个命令显示的信息的详细情况不一样(具体解释后待续......)

[root@server ~]# w
 10:43:47 up  4:28,  4 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                Tue20   10:37m  0.25s  0.25s -bash
root     pts/2    172.16.9.1       23:42   1361days  0.32s  0.00s man hwclock
root     pts/3    172.16.9.1       00:04   10:22m  0.25s  0.01s man date
root     pts/4    172.16.9.1       00:04    0.00s  0.19s  0.05s w
[root@server ~]# who
root     tty1         2014-07-01 20:57
root     pts/2        2014-07-01 23:42 (172.16.9.1)
root     pts/3        2014-07-02 00:04 (172.16.9.1)
root     pts/4        2014-07-02 00:04 (172.16.9.1)
[root@server ~]# whoami 
root

6、mkdir,rmdir

    mkdir和rmdir分别表示创建目录和删除目录

    常用选项:

        -p:就是所创建的目录文件的父目录不存在的时候可以继续创建。

        -v:显示创建目录文件的过程。

[root@server tmp]# tree /tmp/mylinnux/
/tmp/mylinnux/
|-- bin
|-- boot
|   `-- grub
|-- dev
|-- etc
|   |-- rc.d
|   |   `-- init.d
|   `-- sysconfig
|       `-- networking-scripts
|-- lib
|   `-- modules
|-- lib64
|-- proc
|-- sbin
|-- sys
|-- tmp
|-- usr
|   |-- bin
|   |-- lib
|   |-- lib64
|   |-- local
|   |   |-- bin
|   |   |-- lib
|   |   |-- lib64
|   |   `-- sbin
|   `-- sbin
`-- var
    |-- lock
    |-- log
    `-- run

30 directories, 0 files

#使用一条mkdir命令创建出以上所示的目录树。这里就会用到bash的命令行展开 {}。
[root@server tmp]# mkdir -pv /tmp/mylinux/{boot/grub,bin,sbin,etc/{rc.d/init.d,sysconfig/networking-scripts},lib/modules,lib64,usr/{bin,sbin,lib,lib64,local/{bin,sbin,lib,lib64}},proc,sys,dev,var/{log,run,lock},tmp}

    rmdir命令是删除目录文件,这里要注意的是要删除的目录文件必须要是空的目录文件才可以删除

7、ls,cd

    ls、cd命令可以说是linux最基本的命令,几乎是伴随我们的一生。

    ls是list的简写,意思是列出指定路径下的文件。

    常用选项:

    -a:列出指定路径下的所有文件

    -A:列出指定路径下的所有文件,不包括自己和父目录

[root@server tmp]# ls -a
.  ..  .ICE-unix  a  aabb  b  c  file1  file2  filestat  ks-script-_mGeKJ  ks-script-_mGeKJ.log  m  mylinnux
[root@server tmp]# ls -A
.ICE-unix  a  aabb  b  c  file1  file2  filestat  ks-script-_mGeKJ  ks-script-_mGeKJ.log  m  mylinnux

    -l:使用长列表来列出文件,此时相当于命令 ll

[root@server tmp]# ls -l
total 28
drwxr-xr-x   5 root root 4096 Jul  1 17:08 a
drwxr-xr-x   2 root root 4096 Jul  1 17:54 aabb
drwxr-xr-x  14 root root 4096 Jul  1 17:13 mylinnux

    -d:通常与-l一起使用通常来显示自身目录的属性

[root@server tmp]# ls -ld /tmp/mylinnux/
drwxr-xr-x 14 root root 4096 Jul  1 17:13 /tmp/mylinnux/

    -r:显示结果逆序

    -R:递归显示所有文件

[root@server tmp]# ls -R /tmp/mylinnux/etc/
/tmp/mylinnux/etc/:
rc.d  sysconfig

/tmp/mylinnux/etc/rc.d:
init.d

/tmp/mylinnux/etc/rc.d/init.d:

/tmp/mylinnux/etc/sysconfig:
networking-scripts

/tmp/mylinnux/etc/sysconfig/networking-scripts:


    cd是改变当前工作目录的,介绍几个特殊用法

    cd 后面没有任何参数,则指的是变换到当前用户的家目录下,等价于 cd ~

[root@server ~]# cd /tmp/
[root@server tmp]# pwd
/tmp
[root@server tmp]# cd
[root@server ~]# pwd
/root

    转换到指定用户的家目录下:

[root@server ~]# pwd
/root
[root@server ~]# cd ~centos
[root@server centos]# pwd
/home/centos

    在上一次所在的路径与这一次所在的路径相互切换(相当于电视遥控的回看按钮)

[root@server centos]# cd -
/root
[root@server ~]# cd -
/home/centos
[root@server centos]# cd -
/root
[root@server ~]# cd -
/home/centos

8、file,cat,tac,more,less,head,tail

    file命令是查看指定文件的类型,主要指的是文件内容

[root@server centos]# file /etc/passwd
/etc/passwd: ASCII text

    cat和tac都是查看文本内容,只不过是tac是从文件最后一行开始显示的。

    more,less,head,tail都是文本查看命令。

    这里主要介绍less使用规则:

    翻屏:

        空格键:向文件尾部翻一屏

        b: 向文件首部翻一屏

        回车键:向文件尾部翻一行

        k: 向文件首部翻一行

        Ctrl+d: 向文件尾部翻半屏

        Ctrl+u: 向文件首部翻并屏

    字串搜索:

        /keyword: 从文件首部向尾部进行搜索

        ?keyword: 从文件尾部向首部进行搜索

        n: 显示找到的下一个

        N:显示找到的上一个

    退出:

        q


    head命令的常用选项:

    -n # 显示文件开头#行内容,默认显示的是前10行

[root@server ~]# head -n  4 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@server ~]#

     tail命令的常用选项:

     -n # :显示文件末尾#行的内容,默认显示的是最后10行

     -f:动态监控文件内容,在查看日志的时候可能用的较多

9、history

    history命令主要是显示历史命令的个数

    介绍几个有关history命令的环境变量:

  • HISTSIZE history命令显示的命令数目

  • HISTFILE 用户退出时这些命令历史的永久保存位置,默认位置是 ~/.bash_history

  • HISTFILESIZE 这个文件中可以保存的最大数目

  • HISTTIMEFORMAT  调整history命令显示什么时间使用,时间格式和date一样,例如可以设定HISTTIMEFORMAT="`whoami:`%F %T:"

  • [root@server ~]# export HISTTIMEFORMAT='%F %T'
    [root@server ~]# history | head -n 3
       29  2014-07-05 13:34:13ls -a
       30  2014-07-05 13:34:13ls -A
       31  2014-07-05 13:34:13ls -l
  • HISTCONTROL 控制显示格式,有3种取值

    • ignoredups  忽略重复的命令,连续的相同命令才会为重复

    • ignorespace 忽略以空白字符打头的命令

    • ignoreboth 以上二者同行生效


    history重要用法:

    history N: 显示最近的N条,包括当前命令自身;

    history -c: 清空命令历史

    history -d offset: 删除指定的偏移处的命令条目

    history -a [/path/to/some_history_file]: 将当前会话中的命令历史写入指定文件


    bash调用命令历史列表中的命令:

    !#: 执行命令历史中的第#条命令

    !!: 执行上一条命令

    !string: 执行命令历史中最近一次以string开头的命令;

    !$: 调用上一条命令的最后一个参数

    ESC, .:功能同上

10、basename,dirname

    basename和dirname分别获得路径的目录名和基名,具体如下:

[root@server ~]# dirname /tmp/mylinnux/etc/sysconfig/
/tmp/mylinnux/etc            #目录名指的是一个路径最后一个文件的父目录
[root@server ~]# basename /tmp/mylinnux/etc/sysconfig/
sysconfig                    #基名指的是一个路径最后一个文件

11、whatis,makewhatis

    whatis是查看命令在man手册中的帮助,查找依据是根据数据库来查找的,这个数据库是系统定时更新的,makewhatis作用是手动更新这个数据库。

[root@server ~]# whatis read
read                 (1p)  - read a line from standard input
read                 (2)  - read from a file descriptor
read                 (3p)  - read from a file
read [builtins]      (1)  - bash built-in commands, see bash(1)

    man的不同章节手册的内容具体:

    1: 用户命令

    2: 系统调用

    3: 库调用

    4: 设备文件

    5: 配置文件

    6: 游戏

    7:杂项

    8:管理命令

12、cp,rm,mv   

cp命令:

    1)cp复制文件时:

    cp SRC DES

SRC是文件,如果DES是文件并且不存在时,则复制SRC为DES。

如果DES存在,DES是文件,则覆盖。DES是目录文件,则将SRC复制到DES目录中去。

    cp SRC... DES 

        如果SRC不止一个,则DES必须是目录并且存在

    2)cp复制目录时:

cp -r SRC DES 

        此时DES必须是目录,如果目录存在,在将SRC复制到DES目录中,如果不存在,则SRC将会更名为DES

cp -r SRC... DES 

        此时DES必须是目录并且存在

    3)cp 重要参数

-a archive 一般用作归档 等价于 cp -dR --preserve=all

[root@server tmp]# stat /etc/passwd
  File: `/etc/passwd'
  Size: 1619      	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 395257      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-07-03 19:32:01.273878213 +0800
Modify: 2014-07-02 19:31:11.179789290 +0800
Change: 2014-07-02 19:31:11.179789290 +0800
[root@server tmp]# cp -a /etc/passwd /tmp/test/

#保留了文件的权限,属主数组,时间戳。单文件的Inode不一样。
[root@server tmp]# stat /tmp/test/passwd 
  File: `/tmp/test/passwd'
  Size: 1619      	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 131080      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-07-03 19:32:01.273878213 +0800
Modify: 2014-07-02 19:31:11.179789290 +0800
Change: 2014-07-03 20:45:18.436007140 +0800

-P 复制符号链接文件,并从不追踪原文件

-p 等价于--preserve=mode,ownership,timestamps.复制时保留文件的权限,属主数组,时间戳

-r -R 递归复制目录文件。

root@server tmp]# cp /etc/abrt/ /tmp/test/
cp: omitting directory `/etc/abrt/'
[root@server tmp]# cp -r /etc/abrt/ /tmp/test/

-d 复制符号连接

-i 在复制时候覆盖是是否提示

-f 与-i作用恰好相反,覆盖文件是不提示


mv命令:移动和更名文件

    mv SRC DES 如果DES中的文件或目录名不存在,则进行覆盖操作

    mv SRC...  DES 此时DES必须存在并且是目录

    -i: interactive 交互式移动


rm命令:删除文件

    alias rm='rm -i'

    -f force

    -r 删除目录

    rm命令默认是禁止删除根文件系统的。如果想想操作删除根文件系统,需要有--no-preserve-root


13、文本管理命令wc,cut,sort,uniq,tr

    wc:统计文本文件的行数,单词数,字节数

        常用参数:

    -l 显示文件的行数

    -w:统计单词数

    -c:统计字符数

    cut:切割(分段)文件内容

-d: 指定分隔符,默认是空格,TAB

-f:指定要显示的字段(列)

-f1 -f1,3 -f1-4(使用示例)

    sort:以文本内容逐行排序

常用参数选项:

-r:逆序显示

-n:以数值为排序基准

-f:忽略大小写

-t:指定分隔符

-k:选择一那个字段进行排序,通常与-t一起使用

-c:检查文件内容是否按顺序排序

-u:排序后去掉重复的行

    uniq:去掉相邻重复的行,一般与sort一起使用

常用参数:

-u:只显示未重复的行

-d:只显示重复的行

-c:显示行内容重复的次数

    tr:是用于对指定字符进行替换的

常用的参数:

-d:删除指定字符集

-s:替换相同连续的字符为单个字符,作用之一是在使用cut命令空格分隔符过多时,可以使用tr -s ' ' 进行替换。

##以下是对上面几个命令的使用练习
1、统计当前系统上所有已经登录的用户会话数;
 who | wc-l
#####2、列出当前系统上所有已经登录的用户的用户名;
who | cut -d' ' -f1 | sort -u | wc -l
#####3、取出最后登录到当前系统的用户的用户名;
 who | tr -s ' ' | cut -d' ' -f1,3,4 | sort  -t' ' -k2,3 | tail -n 1 | cut -d' ' -f1
#####4、取出当前系统上被使用的次数最多的shell;(从/etc/passwd中取) 
 cut -d: -f7 /etc/passwd | sort | uniq -c | sort -n | tail -n 1 | tr -d '0-9 '
#####5、将/etc/passwd中第三个字段数据最大的后10个用户的信息全改为大写字符后保存到/tmp/mypasswd.txt文件中;
 cut -d: -f1,3  /etc/passwd | sort -n -t: -k2 | tail | cut -d: -f1 | tr 'a-z' 'A-Z' >/tmp/mypasswd.txt

14、echo

echo命令:显示一行文本内容

    主要参数:

-n:显示完文本不换行

-E:

-e:可以只要控制字符 例如:\n \t等

    \033[

        单个数字:控制字体

        3#:#是一个数字,3表示控制其前景色

        4#:#是一个数字,4表示控制其背景色

        组合使用,彼此间使用;分隔

        m:是固定格式

        \033[0m:控制符的功能至此结束

    例如:\033[4;31;42mhello\033[0m

wKioL1O1VwDg92ukAABCIDTacYg243.jpg

未完待续.......