1. 程式人生 > >linux基礎命令彙總

linux基礎命令彙總

說明

本文僅僅對一些基礎命令做演示,不涉及過多的原理性,以及概念性的東西,
示例中僅僅列出常用的選項,對於不常用的選項不做介紹以及演示。
其中部分幫助資訊是來源於man查尋結果,未作翻譯,請諒解。


enable(內建命令)

命令示例

enable -a  顯示所有啟用和禁用的內建命令
enable -n  顯示所有已經禁用的內建命令
enable -n echo  禁用內建命令 echo

命令演示

禁用命令

[[email protected] ~]#enable -n echo       
[[email protected] ~]#enable -a | grep echo
enable -n echo
[[email protected] ~]#enable -n echo 
[[email protected] ~]#enable -n 
enable -n echo
[[email protected] ~]#enable -n type
[[email protected] ~]#enable -n
enable -n echo
enable -n type

啟用命令

[[email protected] ~]#enable echo
[[email protected] ~]#enable -a | grep echo
enable echo

type 顯示命令的型別(內建命令)

語法

type: type [-afptP] name [name ...]

Options:
    -a   # 顯示所有的命令型別,包括別名、內建命令、函式、(不使用-p選項的情況下)
    -f   # suppress shell function lookup
    -P   # 強制返回命令的路徑,即使後跟的是別名、內建命令、函式;針對既是內建命令又是外部命令的,返回的是外部命令的路徑(如echo)
    -p   # 只返回是外部命令的路徑,如果 `type -t NAME' 返回的不是file型別,結果為空。
    -t   # 返回單個的型別字元,如 `alias', `keyword',`function', `builtin', `file'
Arguments:
    NAME # Command name to be interpreted.

命令示例

type ls
type cd
type httpd
type -t ls
type -t cd
type -t httpd
type -P httpd
type -P echo
type echo
type -p cd
type -p httpd

返回具體路徑的都是外部命令

[[email protected] ~]# type free
free is /usr/bin/free
[[email protected] ~]#type httpd
httpd is /web/httpd/bin/httpd

返回shell builtin的都是bash內部命令

[[email protected] ~]# type cd
cd is a shell builtin
[[email protected] ~]# 

返回的是別名

[[email protected] ~]#type ls
ls is aliased to `ls --color=auto'

短格式返回命令的型別

[[email protected] ~]#type -t ls
alias
[[email protected] ~]#type -t cd
builtin
[[email protected] ~]#type -t httpd
file

強制返回型別

[[email protected] ~]#type -P httpd
/web/httpd/bin/httpd
[[email protected] ~]#type -P echo
/bin/echo
[[email protected] ~]#type echo
echo is a shell builtin

只返回外部命令

[[email protected] ~]#type -p cd
[[email protected] ~]#type -p httpd
/web/httpd/bin/httpd

hash 檢視設定外部命令路勁快取(內建命令)

語法

[[email protected] ~]#help hash
hash: hash [-lr] [-p pathname] [-dt] [name ...]
    Remember or display program locations.
    
    Determine and remember the full pathname of each command NAME.  If
    no arguments are given, information about remembered commands is displayed.
    
    Options:
      -d                forget the remembered location of each NAME
      -l                display in a format that may be reused as input
      -p pathname       use PATHNAME is the full pathname of NAME
      -r                forget all remembered locations
      -t                print the remembered location of each NAME, preceding
                each location with the corresponding NAME if multiple
                NAMEs are given
    Arguments:
      NAME              Each NAME is searched for in $PATH and added to the list
                of remembered commands.
    
    Exit Status:
    Returns success unless NAME is not found or an invalid option is given.

示例

hash  檢視所有命令的路徑快取
hash -r  清空所有命令的路徑快取
hash -d command1 [command2 ...]  清空指定的命令路徑快取
hash command1 [command2 ...]  清空commands的hits計數器
hash -l  以單行形式顯示所有,以便作為輸入使用

演示

檢視所有的命令路徑快取

[[email protected] ~]#hash
hits    command
   7    /usr/sbin/ifconfig
   1    /usr/bin/ls
   2    /usr/bin/tree

清除所有的命令路徑快取

[[email protected] ~]#hash -r
[[email protected] ~]#hash
hash: hash table empty

清空htis計數器

[[email protected] ~]#hash 
hits    command
   1    /sbin/ifconfig
   1    /bin/ls
[[email protected] ~]#hash ls ifconfig
[[email protected] ~]#hash 
hits    command
   0    /sbin/ifconfig
   0    /bin/ls

以單行形式顯示,以便作為輸入使用

[[email protected] ~]#hash -l 
builtin hash -p /sbin/ifconfig ifconfig
builtin hash -p /bin/ls ls

清空指定的命令路徑快取

[[email protected] ~]#hash 
hits    command
   1    /sbin/ifconfig
   1    /bin/ls
[[email protected] ~]#hash -d ls ifconfig
[[email protected] ~]#hash
hash: hash table empty

alias 定義以及顯示命令別名(內建明命令)

語法

alias: alias [-p] [name[=value] ... ]
    沒有引數的時候,會以 alias NAME=VALUE 的形式顯示所有的別名    
Options:
    -p        Print all defined aliases in a reusable format (預設選項)

命令示例

alias    # 顯示所有的命令別名
alias rm='mv -i -t /trash/'  # 定義別名
alias netdir='cd /etc/sysconfig/network-scripts/'  # 定義別名

演示

alias & alias -p

[[email protected] ~]#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'
[[email protected] ~]#
[[email protected] ~]#alias -p
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'
[[email protected] ~]#

alias rm='mv -i -t /trash/'

[[email protected] ~]#alias rm='mv -i -t /trash/'
[[email protected] ~]#mkdir /trash
[[email protected] ~]#ls test.log
test.log
[[email protected] ~]#rm test.log 
[[email protected] ~]#ls test.log
ls: cannot access test.log: No such file or directory
[[email protected] ~]#ls /trash/
test.log
[[email protected] ~]#

alias cdnet='cd /etc/sysconfig/network-scripts/'

[[email protected] ~]#alias cdnet='cd /etc/sysconfig/network-scripts/'
[[email protected] ~]#cdnet
[[email protected] network-scripts]#pwd
/etc/sysconfig/network-scripts

unalias 取消別名定義

語法

unalias: unalias [-a] name [name ...]
    Remove each NAME from the list of defined aliases.
    
Options:
    -a        remove all alias definitions(不建議使用哦)

命令示例

unalias cdnet

命令演示

[[email protected] ~]#alias | grep cdnet
alias cdnet='cd /etc/sysconfig/network-scripts/'
[[email protected] ~]#unalias cdnet
[[email protected] ~]#alias | grep cdnet
[[email protected] ~]#

date 檢視設定系統時間(外部命令)

Linux的兩種時鐘

  • 系統時鐘:由Linux核心通過CPU的工作頻率進行的
  • 硬體時鐘:主機板

date

date 顯示和設定系統時間
date        # 檢視當前系統當地時間
date -u     # 檢視當前系統格林尼治時間
date --utc  # 檢視當前系統格林尼治時間
date 010312302017.10            # 設定時間為2017年01月1日12點30分10秒
date -s '2016-07-08 09:10:11'   # 通過字串設定時間
date -s '3 day'                 # 設定時間為3天后的時間
date -s '-3 day'                # 設定時間為3天前的時間
date -d '20170809 3:05:6'       # 通過字串顯示顯示時間(不是當前的時間)
date -d "2 days ago"            # 顯示兩天前的時間
date -d "2 hours ago"           # 顯示兩小時前的時間
date -d '2 days'                # 兩天以後的時間
date -d '2 weeks'               # 兩週以後的時間
date +%s                        # 顯示當前時間點到1970年1月1日00:00:00的秒數
date -d @1509536033             # 顯示當前時間點到1970年1月1日00:00:00的秒數1509536033轉化為時間
date --date="@1509536033"       # 同上
date "+%Y-%m-%d %H:%M:%S"       # 格式化顯示時間
date +%Y-%m-%d\ %H:%M:%S        # 同上(不使用引號就要用\將空格轉譯)
date -d @1509536033 "+%Y-%m-%d %H:%M:%S"  # 顯示當前時間點到1970年1月1日00:00:00的秒數1509536033轉化為時間並格式化顯示
date 關於時間顯示的其他方式【可以通過 info date 檢視到詳細的範例】
今天:
date
date -d today
date -d now
明天:
date -d tomorrow
date -d next-day
date -d next-days
date -d "next day"
date -d "next days"
date -d "+1 day"
date -d "+1 days"
date -d "1 day"
date -d "1 days"
date -d "-1 day ago"
date -d "-1 days ago"
昨天:
date -d yesterday
date -d last-day
date -d last-days
date -d "last day"
date -d "last days"
date -d "-1 day"
date -d "-1 days"
date -d "1 day ago"
date -d "1 days ago"
前天:
date -d "2 day ago"
date -d "2 days ago"
date -d "-2 day"
date -d "-2 days"
大前天:
date -d "3 day ago"
date -d "3 days ago"
date -d "-3 day"
date -d "-3 days"
上週,一週前:
date -d "1 week ago"
date -d "1 weeks ago"
上個星期五(不是上週五):
date -d "last-friday"
date -d "last friday"
上月,一月前:
date -d last-month
date -d last-months
date -d "-1 month"
date -d "-1 months"
下月,一月後:
date -d next-month
date -d next-months
date -d "+1 month"
date -d "+1 months"
去年,一年前:
date -d last-year
date -d last-years
date -d "-1 year"
date -d "-1 years"
明年,一年後:
date -d next-year
date -d next-years
date -d "+1 year"
date -d "+1 years"
一小時前:
date -d "last-hour"
date -d "last-hours"
date -d "1 hour ago"
date -d "1 hours ago"
一小時後:
date -d "1 hour"
date -d "1 hours"
一分鐘前:
date -d "1 minute ago"
date -d "1 minutes ago"
一分鐘後:
date -d "1 minute"
date -d "1 minutes"
一秒前:
date -d "1 second ago"
date -d "1 seconds ago"
一秒後:
date -d "1 second"
date -d "1 seconds"

date的幾個簡單練習

1、顯示當前時間,格式:2016-06-18 10:20:30
2、顯示前天是星期幾
3、設定當前日期為2019-08-07 06:05:10
  • 顯示當前時間,格式:2016-06-18 10:20:30
[[email protected] ~]# date "+%F %T"
2018-11-13 15:04:15
[[email protected] ~]# date "+%Y-%m-%d %H:%M:%S"
2018-11-13 15:04:46
[[email protected] ~]#
  • 顯示前天是星期幾
[[email protected] ~]# date -d "2 days ago" "+%w"
0    # %u     day of week (1..7); 1 is Monday
[[email protected] ~]# date -d "2 days ago" "+%u"
7    # %w     day of week (0..6); 0 is Sunday
[[email protected] ~]$date -d "2 days ago" "+%A"
Sunday  
  • 設定當前日期為2019-08-07 06:05:10
[[email protected] ~]# date -s '2019-08-07 06:05:10'
Wed Aug  7 06:05:10 CST 2019
[[email protected] ~]# date
Wed Aug  7 06:05:10 CST 2019
[[email protected] ~]# 

hwclock & clock(外部命令)

hwclockclock: 顯示硬體時鐘

clock 是 hwclock 的軟連結

[[email protected] ~]#ll `which clock`
lrwxrwxrwx. 1 root root 7 Nov  9 07:10 /sbin/clock -> hwclock

選項

-s, --hctosys以硬體時鐘為準,校正系統時鐘
-w, --systohc以系統時鐘為準,校正硬體時鐘

命令示例

# 將硬體時間覆蓋系統時間
clock -s
hwclock -s
# 將系統時間覆蓋硬體時間
clock -w
hwclock -w

命令演示

用硬體時間覆蓋系統時間

[[email protected] ~]#date
Fri Dec 28 07:54:27 CST 2018
[[email protected] ~]#clock
Sun 30 Dec 2018 02:04:35 AM CST  -0.592602 seconds
[[email protected] ~]#clock -s
[[email protected] ~]#date
Sun Dec 30 02:07:14 CST 2018

用系統時間覆蓋硬體時間

[[email protected] ~]#date
Sun Dec 30 02:08:22 CST 2018  # 系統時間是上午的 02:08:22
[[email protected] ~]#ntpdate ntp1.aliyun.com  # 同步系統時間
30 Dec 14:10:53 ntpdate[19775]: step time server 120.25.115.20 offset 43334.969693 sec
[[email protected] ~]#date
Sun Dec 30 14:10:55 CST 2018   # 系統時間更新為下午的 14:10:55
[[email protected] ~]#clock
Sun 30 Dec 2018 02:08:49 AM CST  -0.418304 seconds  # 硬體時間是上午的02:08:49
[[email protected] ~]#clock -w  # 用系統時間設定硬體時間
[[email protected] ~]#clock
Sun 30 Dec 2018 02:11:30 PM CST  -0.555817 seconds  # 硬體時間和系統是時間一致了。

linux命令列日曆cal(外部命令)

幫助

[[email protected] ~]# man cal
CAL(1)                    BSD General Commands Manual                   CAL(1)

NAME
     cal - displays a calendar

SYNOPSIS
     cal [-smjy13] [[[day] month] year]

DESCRIPTION
     Cal displays a simple calendar.  If arguments are not specified, the current month is displayed.  The options are as
     follows:
     -1      Display single month output.  (This is the default.)
     -3      Display prev/current/next month output.
     -s      Display Sunday as the first day of the week.
     -m      Display Monday as the first day of the week.
     -j      Display Julian dates (days one-based, numbered from January 1).
     -y      Display a calendar for the current year.
     -V      Display version information and exit.

使用範例

預設顯示當一個月的日曆(預設是前月的日曆)

[[email protected] ~]# cal
    November 2018   
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

[[email protected] ~]# cal -1
    November 2018   
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

顯示當前季度的日曆

[[email protected] ~]# cal -3
    October 2018          November 2018         December 2018   
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6               1  2  3                     1
 7  8  9 10 11 12 13   4  5  6  7  8  9 10   2  3  4  5  6  7  8
14 15 16 17 18 19 20  11 12 13 14 15 16 17   9 10 11 12 13 14 15
21 22 23 24 25 26 27  18 19 20 21 22 23 24  16 17 18 19 20 21 22
28 29 30 31           25 26 27 28 29 30     23 24 25 26 27 28 29
                                            30 31               
[[email protected] ~]# 

顯示當前月的日曆(週一為每週的第一天格式)

[[email protected] ~]# cal -m
    November 2018   
Mo Tu We Th Fr Sa Su
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

顯示當前月的日曆(週日為每週的第一天格式)

[[email protected] ~]# cal -s
    November 2018   
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

以天數形式顯示當月日曆

[[email protected] ~]# cal -j
       November 2018       
Sun Mon Tue Wed Thu Fri Sat
                305 306 307
308 309 310 311 312 313 314
315 316 317 318 319 320 321
322 323 324 325 326 327 328
329 330 331 332 333 334

顯示整年的日曆

[[email protected] ~]# cal -y
                               2018                               

       January               February                 March       
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6                1  2  3                1  2  3
 7  8  9 10 11 12 13    4  5  6  7  8  9 10    4  5  6  7  8  9 10
14 15 16 17 18 19 20   11 12 13 14 15 16 17   11 12 13 14 15 16 17
21 22 23 24 25 26 27   18 19 20 21 22 23 24   18 19 20 21 22 23 24
28 29 30 31            25 26 27 28            25 26 27 28 29 30 31

        April                   May                   June        
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7          1  2  3  4  5                   1  2
 8  9 10 11 12 13 14    6  7  8  9 10 11 12    3  4  5  6  7  8  9
15 16 17 18 19 20 21   13 14 15 16 17 18 19   10 11 12 13 14 15 16
22 23 24 25 26 27 28   20 21 22 23 24 25 26   17 18 19 20 21 22 23
29 30                  27 28 29 30 31         24 25 26 27 28 29 30

        July                  August                September     
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7             1  2  3  4                      1
 8  9 10 11 12 13 14    5  6  7  8  9 10 11    2  3  4  5  6  7  8
15 16 17 18 19 20 21   12 13 14 15 16 17 18    9 10 11 12 13 14 15
22 23 24 25 26 27 28   19 20 21 22 23 24 25   16 17 18 19 20 21 22
29 30 31               26 27 28 29 30 31      23 24 25 26 27 28 29
                                              30
       October               November               December      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6                1  2  3                      1
 7  8  9 10 11 12 13    4  5  6  7  8  9 10    2  3  4  5  6  7  8
14 15 16 17 18 19 20   11 12 13 14 15 16 17    9 10 11 12 13 14 15
21 22 23 24 25 26 27   18 19 20 21 22 23 24   16 17 18 19 20 21 22
28 29 30 31            25 26 27 28 29 30      23 24 25 26 27 28 29
                                              30 31

顯示日曆的版本

[[email protected] ~]# cal -V
cal from util-linux-ng 2.17.2

顯示日曆的幫助資訊

[[email protected] ~]# cal -h
cal: invalid option -- 'h'
usage: cal [-13smjyV] [[[day] month] year]
[[email protected] ~]#

檢視指定的日期

輸入圖片說明


shutdown 關機

幫助資訊

Usage: shutdown [OPTION]... TIME [MESSAGE]
Bring the system down.

Options:
  -r                          reboot after shutdown 關機後重啟
  -h                          halt or power off after shutdown 關機後斷掉電源
  -H                          halt after shutdown (implies -h) 關機後斷掉電源
  -P                          power off after shutdown (implies -h) 關機後斷掉電源
  -c                          cancel a running shutdown  取消正在執行的關機
  -k                          only send warnings, don't shutdown  僅僅傳送警告訊息不關機
  -q, --quiet                 reduce output to errors only  靜默模式,僅僅輸出關機過程中的錯誤資訊
  -v, --verbose               increase output to include informational messages 輸出關機的詳細資訊
      --help                  display this help and exit  顯示幫助資訊
      --version               output version information and exit  檢視命令版本資訊

TIME:無指定,預設相當於+1
now: 立刻,相當於+0
+m: 相對時間表示法,幾分鐘之後;例如+3
hh:mm: 絕對時間表示,指明具體時間

示例

reboot -r  關機後重啟
reboot -h  關機後斷掉電源
reboot -H  關機後斷掉電源
reboot -P  關機後斷掉電源
shutdown 1 m 'test'  1分鐘以後將關機,併發送提示資訊'test'
shutdown -c 取消關機操作(需要在另外一個終端上操作)

1分鐘後關機

取消關機


w 顯示已經登陸的使用者以及在這些使用者正在幹什麼

語法

Show who is logged on and what they are doing

w: invalid option -- '-'
usage: w -hlsufV [user]
    -h    skip header
    -l    long listing (default)
    -s    short listing
    -u    ignore uid of processes
    -f    toggle FROM field (default on)
    -i    display IP address instead of hostname (if possible)
    -V    display version

命令演示

預設輸出

[[email protected] ~]#w
 14:37:02 up 1 day, 23:58,  5 users,  load average: 0.60, 0.40, 0.32
USER     TTY      FROM              [email protected]   IDLE   JCPU   PCPU WHAT
root     tty1     :0               Wed08    4days 41.01s 41.01s /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-Br5nSW/database -n
root     pts/0    :0.0             Wed08    2days  0.71s  0.47s ssh 127.0.0.1
root     pts/1    127.0.0.1        Wed08    2days  0.34s  0.34s -bash
root     pts/2    192.168.27.2     Fri04    2days  0.41s  0.10s vim /etc/init.d/httpd
root     pts/3    192.168.27.2     Fri06    0.00s  0.38s  0.00s w

-h 不顯示頭部資訊

[[email protected] ~]#w -h
root     tty1     :0               Wed08    4days 41.01s 41.01s /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-Br5nSW/database -n
root     pts/0    :0.0             Wed08    2days  0.71s  0.47s ssh 127.0.0.1
root     pts/1    127.0.0.1        Wed08    2days  0.34s  0.34s -bash
root     pts/2    192.168.27.2     Fri04    2days  0.41s  0.10s vim /etc/init.d/httpd
root     pts/3    192.168.27.2     Fri06    0.00s  0.38s  0.00s w -h

-s 短格式顯示

[[email protected] ~]#w -s
 14:38:53 up 2 days, 0 min,  5 users,  load average: 0.24, 0.33, 0.30
USER     TTY      FROM               IDLE WHAT
root     tty1     :0                4days /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-Br5nSW/database -nolisten tcp vt1
root     pts/0    :0.0              2days ssh 127.0.0.1
root     pts/1    127.0.0.1         2days -bash
root     pts/2    192.168.27.2      2days vim /etc/init.d/httpd
root     pts/3    192.168.27.2      0.00s w -s

-u 引數演示

[[email protected] ~]#w -u
 14:40:13 up 2 days, 1 min,  5 users,  load average: 0.32, 0.32, 0.30
USER     TTY      FROM              [email protected]   IDLE   JCPU   PCPU WHAT
root     tty1     :0               Wed08    4days 41.03s 41.03s /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-Br5nSW/database -n
root     pts/0    :0.0             Wed08    2days  0.71s  0.47s ssh 127.0.0.1
root     pts/1    127.0.0.1        Wed08    2days  0.34s  0.34s -bash
root     pts/2    192.168.27.2     Fri04    2days  0.41s  0.10s vim /etc/init.d/httpd
root     pts/3    192.168.27.2     Fri06    0.00s  0.39s  0.00s w -u

who 顯示當前所有的系統登陸會話

命令示例

who -a   # 相當於 who -bdprtTu --login
who -d   # 顯示死的登陸會話
who -H   # 顯示頭部資訊
who -l   # 顯示系統登陸程序
who --login  # 顯示系統登陸程序
who -m   # 只顯示和登陸使用者相關的登陸資訊
who -q   # 統計所有的登陸使用者以及登陸的數量
who -r   # 檢視執行級別
who -s   # 短格式顯示(預設)

命令演示

[[email protected] ~]#who
root     tty1         2018-12-26 08:26 (:0)
root     pts/0        2018-12-26 08:26 (:0.0)
root     pts/1        2018-12-26 08:45 (127.0.0.1)
root     pts/2        2018-12-28 04:16 (192.168.27.2)
root     pts/3        2018-12-28 06:54 (192.168.27.2)
[[email protected] ~]#who -a
           system boot  2018-12-26 08:26
           run-level 5  2018-12-26 08:26
LOGIN      tty2         2018-12-26 08:26              2193 id=2
LOGIN      tty3         2018-12-26 08:26              2195 id=3
LOGIN      tty4         2018-12-26 08:26              2198 id=4
LOGIN      tty5         2018-12-26 08:26              2205 id=5
LOGIN      tty6         2018-12-26 08:26              2208 id=6
root     + tty1         2018-12-26 08:26  old         2398 (:0)
root     + pts/0        2018-12-26 08:26  old         2776 (:0.0)
root     + pts/1        2018-12-26 08:45  old         2987 (127.0.0.1)
root     + pts/2        2018-12-28 04:16  old        19075 (192.168.27.2)
root     + pts/3        2018-12-28 06:54   .         19528 (192.168.27.2)
           pts/4        2018-12-28 03:36             18280 id=ts/4  term=0 exit=0
           pts/5        2018-12-28 01:04              8284 id=ts/5  term=0 exit=0
           pts/6        2018-12-28 03:08             13670 id=ts/6  term=0 exit=0
           pts/7        2018-12-28 01:04             17388 id=ts/7  term=0 exit=0
           pts/8        2018-12-28 00:59             16753 id=ts/8  term=0 exit=0

頭部資訊顯示

[[email protected] ~]#who -H
NAME     LINE         TIME             COMMENT   # <==頭部資訊
root     tty1         2018-12-26 08:26 (:0)
root     pts/0        2018-12-26 08:26 (:0.0)
root     pts/1        2018-12-26 08:45 (127.0.0.1)
root     pts/2        2018-12-28 04:16 (192.168.27.2)
root     pts/3        2018-12-28 06:54 (192.168.27.2)

顯示登陸程序

[[email protected] ~]#who -l
LOGIN    tty2         2018-12-26 08:26              2193 id=2
LOGIN    tty3         2018-12-26 08:26              2195 id=3
LOGIN    tty4         2018-12-26 08:26              2198 id=4
LOGIN    tty5         2018-12-26 08:26              2205 id=5
LOGIN    tty6         2018-12-26 08:26              2208 id=6
[[email protected] ~]#
[[email protected] ~]#who --login
LOGIN    tty2         2018-12-26 08:26              2193 id=2
LOGIN    tty3         2018-12-26 08:26              2195 id=3
LOGIN    tty4         2018-12-26 08:26              2198 id=4
LOGIN    tty5         2018-12-26 08:26              2205 id=5
LOGIN    tty6         2018-12-26 08:26              2208 id=6

只顯示和登陸使用者相關的登陸資訊相當於who am i

[[email protected] ~]#who -maH
NAME       LINE         TIME             IDLE          PID COMMENT  EXIT
root     + pts/3        2018-12-28 06:54   .         19528 (192.168.27.2)

[[email protected] ~]#who -m
root     pts/3        2018-12-28 06:54 (192.168.27.2)
[[email protected] ~]#who am i
root     pts/3        2018-12-28 06:54 (192.168.27.2)

統計所有的登陸使用者以及登陸的數量

[[email protected] ~]$who  -q
root root root root root ming
# users=6

檢視執行級別

[[email protected] ~]#who -r
         run-level 5  2018-12-26 08:26

whoami 列印有效UID

[[email protected] ~]#whatis whoami  
whoami               (1)  - print effective userid
[[email protected] ~]#whoami
root

screen

通過screen實現遠端協助

我們在工作中有時候會遇到這樣的情況:我們遇到一個問題搞不定,需要他人運程協助。在windows中實現的方法有很多,但是在linux系統命令列怎麼來實現呢?這裡我們來介紹一個命令screen來實現這樣的需求。
前提所有人都連線到同一臺機器

screen命令可能沒有安裝,需要自己安裝一下

yum install screen -y 

screen命令示例

screen –S [SESSION]       建立新screen會話 ,`SESSION` 就是一個名字,可以自定義
screen –x [SESSION]       加入screen會話
exit     退出並關閉screen會話
Ctrl+a,d        剝離當前screen會話
screen -ls      顯示所有已經開啟的screen會話
screen -r [SESSION]       恢復某screen會話

用法示例

  • 在一個視窗建立一個會話 scm(模擬第一個使用者)
screen -S scm
  • 在另外一個視窗檢視會話 (模擬第二個使用者)
[[email protected] ~]# screen -ls
There is a screen on:
        32081.scm       (Attached)
1 Socket in /var/run/screen/S-root.

[[email protected] ~]# 
  • 第二個使用者加入到會話中
screen -x scm
  • 此時可以實現兩個使用者的操作是實時同步的,就實現了我們的需求

  • 我們還可加入任意多個使用者來實時分享所有的操作

通過screen實現防止終端退出導致命令執行失敗

場景:
我們在執行一些備份命令的時候,可能執行的時間會很長,但是有可能會在命令執行過程中由於網路等原因導致我們的CRT 終端連線斷開,
此時我們再連線到伺服器的時候,還要重新執行同樣的命令。
我們這時候就可以通過screen命令來解決此問題。

執行命令前先執行screen -S 會話名建立一個會話
screen -S ping-test # 也可以只使用 screen
screen -ls
通過ping演示長時間備份命令的執行
ping 8.8.8.8
關掉終端,演示故障
重新連線到伺服器,執行screen -r 會話名恢復會話,可以看到命令還在執行

檢視會話

[[email protected] ~]#screen -ls
There is a screen on:
        55641.ping-test (Detached)
1 Socket in /var/run/screen/S-root.

恢復會話

screen -r ping-test

恢復效果

[[email protected] ~]#screen -r ping-test
64 bytes from 8.8.8.8: icmp_seq=53 ttl=37 time=59.2 ms
64 bytes from 8.8.8.8: icmp_seq=54 ttl=37 time=66.0 ms
64 bytes from 8.8.8.8: icmp_seq=55 ttl=37 time=59.0 ms
64 bytes from 8.8.8.8: icmp_seq=56 ttl=37 time=60.1 ms
64 bytes from 8.8.8.8: icmp_seq=57 ttl=37 time=59.7 ms
64 bytes from 8.8.8.8: icmp_seq=58 ttl=37 time=63.7 ms
64 bytes from 8.8.8.8: icmp_seq=59 ttl=37 time=58.3 ms
64 bytes from 8.8.8.8: icmp_seq=60 ttl=37 time=61.6 ms
64 bytes from 8.8.8.8: icmp_seq=61 ttl=37 time=62.0 ms
64 bytes from 8.8.8.8: icmp_seq=62 ttl=37 time=66.3 ms
64 bytes from 8.8.8.8: icmp_seq=63 ttl=37 time=60.1 ms
64 bytes from 8.8.8.8: icmp_seq=64 ttl=37 time=70.2 ms
64 bytes from 8.8.8.8: icmp_seq=65 ttl=37 time=106 ms
64 bytes from 8.8.8.8: icmp_seq=66 ttl=37 time=61.0 ms
64 bytes from 8.8.8.8: icmp_seq=67 ttl=37 time=62.3 ms
64 bytes from 8.8.8.8: icmp_seq=68 ttl=37 time=59.2 ms

echo 顯示一行文字資訊

語法

NAME
       echo - display a line of text(顯示一行文字資訊)
語法
       echo [SHORT-OPTION]... [STRING]...    # 短格式
       echo LONG-OPTION     # 長格式

選項說明
       Echo the STRING(s) to standard output.(將字串保準輸出)

       -n     不輸出結尾的換行(結尾不換行)
       -e     啟用 \ 轉義
       -E     禁用 \ (預設)
       --help 顯示幫助資訊
       --version 顯示版本資訊

下面是使用 -e 引數時支援的轉義項:

       \\     backslash    輸出反斜槓 \
       \a     alert (BEL)  報警聲
       \b     backspace   
       \c     produce no further output  不再輸出 \c 後面的字串
       \e     escape     跳過後面的一個字元在輸出
       \f     form feed   換頁輸出
       \n     new line   換行輸出
       \r     carriage return  回車
       \t     horizontal tab  水平製表符
       \v     vertical tab  垂直製表符
       \0NNN  byte with octal value NNN (1 to 3 digits)
       \xHH   byte with hexadecimal value HH (1 to 2 digits)

       NOTE: 不同的shell支援的echo會有不同,以上是基於bash的echo.

演示

[[email protected] ~]#echo 'test'
test
[[email protected] ~]#
[[email protected] ~]#echo -n  'test'
test[[email protected] ~]#
[[email protected] ~]#echo -e '123\b45'
1245
[[email protected] ~]#echo -e '123\b\b45'
145
[[email protected] ~]#echo -e '123\b\b\b45'
453
[[email protected] ~]#echo -e '123\b\b\b4567'
4567
[[email protected] ~]#echo -e 'test\c'
test[[email protected] ~]#
[[email protected] ~]#echo -e 'test\csfsfsdfsdf'
test[[email protected] ~]#
[[email protected] ~]#echo -e '123\e4567'    
123567
[[email protected] ~]#echo -e '123\e4\e567'
12367
[[email protected] ~]#
[[email protected] ~]#echo -e '123\f4567'  
123
   4567
[[email protected] ~]#echo -e '123\f\f4567'
123

   4567
[[email protected] ~]#echo -e '123\f\f\f4567'
123


   4567
[[email protected] ~]#echo -e '123\f\f\f45\f67'
123


   45
     67
[[email protected] ~]#
[[email protected] ~]#echo -e '123\n4567'      
123
4567
[[email protected] ~]#echo -e '123\r4567'
4567
[[email protected] ~]#echo -e '123\r456\r7'
756
[[email protected] ~]#
[[email protected] ~]#echo -e '123\t4567'  
123     4567
[[email protected] ~]#echo -e '123\v4567'
123
   4567
[[email protected] ~]#

{} 花括號的用法

備份

[[email protected] app]# touch test.log
[[email protected] app]# ls
test.log
[[email protected] app]# 
[[email protected] app]# cp test.log{,.bak}
[[email protected] app]# ls
test.log  test.log.bak
[[email protected] app]#

連續

[[email protected] app]# echo file{1..2}
file1 file2
[[email protected] app]# echo file{1..10}
file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
[[email protected] app]# echo file{001..10}
file001 file002 file003 file004 file005 file006 file007 file008 file009 file010
[[email protected] app]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[[email protected] app]# echo {A..Z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

倒序

[[email protected] app]# echo {9..1}
9 8 7 6 5 4 3 2 1
[[email protected] app]# echo {z..a}
z y x w v u t s r q p o n m l k j i h g f e d c b a
[[email protected] app]# echo {Z..A}
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
[[email protected] app]# 

步進

[[email protected] app]# echo file{001..10..2}
file001 file003 file005 file007 file009
[[email protected] app]# echo file{001..10..3}
file001 file004 file007 file010
[[email protected] app]#
[[email protected] app]# echo {9..1..3}
9 6 3
[[email protected] app]# 

自由組合1(連續和非連續的)

mkdir -p /testdir/dir1/{x..y}/{a..b}
mkdir -p /testdir/dir1/{x,y}/{a,b}
mkdir -p /testdir/dir2/{x/{a..b},y}
mkdir -p /testdir/dir{3,4,5/dir{6..7}}

自由組合2(非連續的)

touch {a,d,g}.{log,txt}
[[email protected] app]$touch {a,d,g}.{log,txt}
[[email protected] app]$ls
a.log  a.txt  d.log  d.txt  g.log  g.txt
[[email protected] app]$

自由組合3(連續的)

touch {1..9}.{a..c}
[[email protected] app]$
[[email protected] app]$touch {1..9}.{a..c}
[[email protected] app]$ll
total 0
-rw-r--r--. 1 root root 0 Nov 17 11:22 1.a
-rw-r--r--. 1 root root 0 Nov 17 11:22 1.b
-rw-r--r--. 1 root root 0 Nov 17 11:22 1.c
-rw-r--r--. 1 root root 0 Nov 17 11:22 2.a
-rw-r--r--. 1 root root 0 Nov 17 11:22 2.b
-rw-r--r--. 1 root root 0 Nov 17 11:22 2.c
-rw-r--r--. 1 root root 0 Nov 17 11:22 3.a
-rw-r--r--. 1 root root 0 Nov 17 11:22 3.b
-rw-r--r--. 1 root root 0 Nov 17 11:22 3.c
-rw-r--r--. 1 root root 0 Nov 17 11:22 4.a
-rw-r--r--. 1 root root 0 Nov 17 11:22 4.b
-rw-r--r--. 1 root root 0 Nov 17 11:22 4.c
-rw-r--r--. 1 root root 0 Nov 17 11:22 5.a
-rw-r--r--. 1 root root 0 Nov 17 11:22 5.b
-rw-r--r--. 1 root root 0 Nov 17 11:22 5.c
-rw-r--r--. 1 root root 0 Nov 17 11:22 6.a
-rw-r--r--. 1 root root 0 Nov 17 11:22 6.b
-rw-r--r--. 1 root root 0 Nov 17 11:22 6.c
-rw-r--r--. 1 root root 0 Nov 17 11:22 7.a
-rw-r--r--. 1 root root 0 Nov 17 11:22 7.b
-rw-r--r--. 1 root root 0 Nov 17 11:22 7.c
-rw-r--r--. 1 root root 0 Nov 17 11:22 8.a
-rw-r--r--. 1 root root 0 Nov 17 11:22 8.b
-rw-r--r--. 1 root root 0 Nov 17 11:22 8.c
-rw-r--r--. 1 root root 0 Nov 17 11:22 9.a
-rw-r--r--. 1 root root 0 Nov 17 11:22 9.b
-rw-r--r--. 1 root root 0 Nov 17 11:22 9.c
[[email protected] app]$

history 顯示和操作命令歷史列表(內建命令)

命令列歷史介紹

  • 儲存你輸入的命令歷史。可以用它來重複執行命令
  • 登入shell時,會讀取命令歷史檔案中記錄下的命令 ~/.bash_history
  • 登入進shell後新執行的命令只會記錄在快取中;這些命令會使用者退出時“追加”至命令歷史檔案中

history的使用技巧

重複前一個命令,有4種方法:
重複前一個命令使用上方向鍵,並回車執行
按!! 並回車執行
輸入!-1 並回車執行
按Ctrl+p 並回車執行

!:0            # 執行前一條命令(去除引數)
Ctrl + n       # 顯示當前歷史中的下一條命令,但不執行
Ctrl + j       # 執行當前命令
!n             # 執行history命令輸出對應序號n的命令
!-n            # 執行history歷史中倒數第n個命令

!string        # 重複前一個以“string”開頭的命令
!?string       # 重複前一個包含string的命令
!string:p      # 僅列印命令歷史,而不執行
!$:p           # 列印輸出!$ (上一條命令的最後一個引數)的內容
!*:p           # 列印輸出!*(上一條命令的所有引數)的內容
^string        # 刪除上一條命令中的第一個string
^string1^string2      # 將上一條命令中的第一個string1替換為string2
!:gs/string1/string2  # 將上一條命令中所有的string1都替換為string2

使用up(向上)和down(向下)鍵來上下瀏覽從前輸入的命令

ctrl-r         # 來在命令歷史中搜索命令
•(reverse-i-search)`’:

Ctrl+g         # 從歷史搜尋模式退出

要重新呼叫前一個命令中最後一個引數:
!$ 表示
Esc, .(點選Esc鍵後鬆開,然後點選. 鍵)
Alt+ .(按住Alt鍵的同時點選. 鍵) 如果是在xshell 或者crt中需要設定 "將ALT用作Meta鍵"

command !^     # 利用上一個命令的第一個引數做cmd的引數
command !$     # 利用上一個命令的最後一個引數做cmd的引數
command !*     # 利用上一個命令的全部引數做cmd的引數
command !:n    # 利用上一個命令的第n個引數做cmd的引數
command !n:^   # 呼叫第n條命令的第一個引數
command !n:$   # 呼叫第n條命令的最後一個引數
command !n:m   # 呼叫第n條命令的第m個引數
command !n:*   # 呼叫第n條命令的所有引數
command !string:^    # 從命令歷史中搜索以string 開頭的命令,並獲取它的第一個引數
command !string:$    # 從命令歷史中搜索以string 開頭的命令,並獲取它的最後一個引數
command !string:n    # 從命令歷史中搜索以string 開頭的命令,並獲取它的第n個引數
command !string:*    # 從命令歷史中搜索以string 開頭的命令,並獲取它的所有引數

history 幫助

history [-c] [-d offset] [n]
history -anrw [filename]
history -psarg [arg...]
-c: 清空命令歷史
-d offset: 刪除歷史中指定的第offset個命令
n: 顯示最近的n條歷史
-a: 追加本次會話新執行的命令歷史列表至歷史檔案
-r: 讀歷史檔案附加到歷史列表
-w: 儲存歷史列表到指定的歷史檔案
-n: 讀歷史檔案中未讀過的行到歷史列表
-p: 展開歷史引數成多行,但不存在歷史列表中
-s: 展開歷史引數成一行,附加在歷史列表後

相關的環境變數

HISTSIZE:命令歷史記錄的條數
HISTFILE:指定歷史檔案,預設為~/.bash_history
HISTFILESIZE:命令歷史檔案記錄歷史的條數
HISTTIMEFORMAT="%F %T " 顯示時間
HISTIGNORE="str1:str2*:… " 忽略str1命令,str2開頭的歷史

控制命令歷史的記錄方式:

環境變數:HISTCONTROL
ignoredups    預設,忽略重複的命令,連續且相同為“重複”
ignorespace    忽略所有以空白開頭的命令
ignoreboth    相當於ignoredups, ignorespace的組合
erasedups    刪除重複命令
export 變數名="值“
存放在/etc/profile 或~/.bash_profile

passwd 設定更改使用者口令

語法

Usage: passwd [OPTION...] <accountName> 修改指定使用者的密碼,僅root使用者許可權
       passwd: 修改自己的密碼
  -k, --keep-tokens       keep non-expired authentication tokens
  -d, --delete            delete the password for the named account (root only)
  -l, --lock              lock the password for the named account (root only)鎖定指定使用者
  -u, --unlock            unlock the password for the named account (root only)解鎖指定使用者
  -e, --expire            expire the password for the named account (root only)強制使用者下次登入修改密碼
  -f, --force             force operation
  -x, --maximum=DAYS      maximum password lifetime (root only)最大使用期限
  -n, --minimum=DAYS      minimum password lifetime (root only)指定最短使用期限
  -w, --warning=DAYS      number of days warning users receives before password expiration (root only)提前多少天開始警告
  -i, --inactive=DAYS     number of days after password expiration when an account becomes disabled (root only)非活動期限
  -S, --status            report password status on the named account (root only)
  --stdin                 read new tokens from stdin (root only)從標準輸入接收使用者密碼

Help options:
  -?, --help              Show this help message
  --usage                 Display brief usage message

命令示例

echo your_password | passwd --stdin user_name     非互動修改口令
passwd -e user_name      使口令及時失效 同 chage -d 0 user_name

口令及時過期演示

[[email protected] ~]#passwd -e ming
Expiring password for user ming.
passwd: Success
[[email protected] ~]#

更改後
[[email protected] ~]#getent shadow ming
ming:$6$FWNaz5q4$C5tswES6V3urxvObtSPNOnHVbVm8/I2itoXPFRP/WmG3Noqpmk4UyAQsAV5emKEF.SGWQc3ZlBX/fQh3b.y7P1:0:3:30:7:::

輸入圖片說明

登入後就會提示馬上更改口令

輸入圖片說明


getent 檢視使用者資訊配置檔案

使用cat檢視配置檔案 /etc/passwd /etc/shadow /etc/group