第五天、vim,重定向,用戶和組管理

第五天、vim,重定向,用戶和組管理

vim


  • vi:Visual editor,文本編輯器
  • 行編輯器:sed
  • 全屏編輯器:vim,vi,nano
  • 其他編輯器gedit,gvim

  • 定義別名讓vi等於vim;將alias vi=vim寫入~/.bashrc或者全局配置文件

vim打開文件

1、打開文件後光標跳到第9行

[root@centos7 ~]# vim +9 1.txt

效果:

第五天、vim,重定向,用戶和組管理

2、直接跳到含有qqq的那一行

[root@centos7 ~]# vim +/qqq 1.txt

效果:

第五天、vim,重定向,用戶和組管理

3、以二進制方式打開文件,如果要改二進制文件

[root@centos7 ~]# vim -b /usr/bin/ls

4、打開兩個文件對比

[root@centos7 ~]# vim -d 1.txt 2.txt

效果,使用:qall退出

第五天、vim,重定向,用戶和組管理


vim的三個模式

  • 命令模式
  • 插入模式
  • 拓展模式

三種模式轉換

第五天、vim,重定向,用戶和組管理

命令模式進入插入模式

  • i:在光標前插入內容
  • I:在光標所在行首插入內容
  • a:在光標後插入內容
  • A:在光標所在行尾插入內容
  • o:在光標所在行下插入新的一行
  • O:在光標所在行上插入新的一行

關閉並保存文件

  • :wq
  • :x
  • ZZ

拓展命令模式

1、讀文件到當前文件中:

:r /etc/hostname

效果:

第五天、vim,重定向,用戶和組管理

2、將當前文件寫入令一文件中,即windows中的另存爲

:w /data/hello.txt

效果:

第五天、vim,重定向,用戶和組管理

3、執行命令

:!hostname

效果:

第五天、vim,重定向,用戶和組管理

4、執行命令並將輸出寫入當前文件

:r! free -h

效果:

第五天、vim,重定向,用戶和組管理


命令模式光標的跳轉

  • k,j,h,l
  • 數字直接回車
  • H,M,L
  • zt,zz,zb
  • ^:行首非空字符,$:行尾,0:行首
  • gg:第一行;G:最後一行;5gg:第五行
  • (,),{,},

翻屏(少用)

  • CTRL+f,CTRL+b,CTRL+d,CTRL+u

命令模式操作

字符編輯

  • x:刪單個字符;5x:刪5個字符;10x:刪10個字符
  • xp交換光標除和光標後字符位置
  • ~:轉換大小寫
  • J:刪除當前行換行符,讓下一行接到本行後面

替換

  • r:替換光標所在處
  • R:切換成REPLACE模式

刪除

注意:刪除的內容會保存在粘貼板,按p可以粘貼

  • dd:刪一行
  • d$:刪到行尾
  • d^:刪到行首非空字符
  • d0:刪到行首
  • 5dd:刪5行;6dd:刪6行
  • dw,de,db

複製

注意:複製後的內容也會保存在粘貼板,按p可以粘貼

  • yy:複製一行
  • y$:複製到行尾
  • y^:複製到行首非空字符
  • y0:複製到行首
  • 5yy:複製5行,10yy:複製10行
  • ye,yw,yb

改變命令

  • cc:刪除當前行內容,重新編輯
  • c$:刪除到行尾並重新編輯
  • c^:刪除到行首非空字符並重新編輯
  • c0:刪除到行首並重新編輯
  • 3cc:刪除3行並重新編輯

特殊操作

  • 100iwang,ESC 會粘貼wang100次

  • vim顯示顏色

第五天、vim,重定向,用戶和組管理

效果

第五天、vim,重定向,用戶和組管理

  • di"表示刪除""中間的內容;di(表示刪除()中間的內容;di{表示刪除{}中間的內容
  • yi"表示複製""中間的內容;yi(表示複製()中間的內容;yi{表示複製{}中間的內容
  • vi"表示選中""中間的內容;vi(表示選中()中間的內容;vi{}表示選中{}中間的內容
  • dtx:刪字符直到遇到x停止
  • ytx:複製字符直到遇到x停止

擴展模式範圍表示

  • 2,3表示第2行到第三行
  • 2,+3表示第2行開始,再加3行,即第2行到第5行
  • .表示當前行,$表示最後一行
  • .,$-1表示當前行到倒數第二行
  • %表示全文,相當於1,$

擴展命令模式的地址定界

  • :/qqq/ 匹配包含qqq的行;/qqq 同樣也是查找包含qqq的行,n,N向下向上找
  • :2,5d 刪除第2到第5行
  • :3,8y 複製第三行到第8行

撤銷與反撤銷

  • u:撤銷 5u:撤銷5次
  • CTRL+r:反撤銷
  • .:重複前一個操作 5.:重複之前操作5次

vim寄存器(少用)

  • 3"tyy 存到t寄存器

使用多個窗口

水平分割

上下切換:CTRL+w,↑ CTRL+w,↓

[root@centos7 ~]# vim -o 1.txt 2.txt
效果:

第五天、vim,重定向,用戶和組管理

垂直分割

左右切換:CTRL+w,← CTRL+w,→

[root@centos7 ~]# vim -O 1.txt 2.txt
效果:

第五天、vim,重定向,用戶和組管理

單文件窗口分割

  • CTRL+w,s CTRL+w,v CTRL+w,q CTRL+w,o :wqall

定製vim的工作特性

  • :set nu 顯示行號 :set nonu 不顯示行號
  • :set ai 開啓縮進 :set noai 關閉縮進
  • :set hlsearch 開始高亮搜索 :set nohlsearch 關閉高亮搜索
  • :set list 顯示Tab和換行符 :set nolist 不顯示Tab和換行符
  • :syntax on 啓動語法高亮 :syntax:禁用用法高亮
  • :set ff=dos 啓動windows格式 set ff=unix 啓動unix格式
  • :set textwidth=65 設置文本寬度
  • :set cul 每光標所在行顯示標識線 :set nocul 不顯示標識線

set幫助,vim幫助

  • :help option-list
  • :set :set all
  • :help
  • 命令vimtutor

重定向基礎

  • 三種I/O設備:0,1,2 標準輸入,標準輸出,標準錯誤
[root@centos7 ~]# ll /dev/std*
lrwxrwxrwx. 1 root root 15 7月  24 08:50 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 7月  24 08:50 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 7月  24 08:50 /dev/stdout -> /proc/self/fd/1
重定向輸出內容到另一終端窗口

1、開啓兩終端窗口,tty命令看第一個終端號

2、第二個窗口輸入命令

[root@centos7 ~]# free > /dev/pts/3
[root@centos7 ~]# 

3、第一個窗口顯示如下:

[root@centos7 ~]# tty
/dev/pts/3
[root@centos7 ~]#               total        used        free      shared  buff/cache   available
Mem:        2028088      249760       78856        3564     1699472     1504260
Swap:       4194300       76288     4118012

dd命令生成一個50m的文件,然後清空

如果bigfile該文件正在被某程序讀取,那麼rm -rf bigfile只是表面刪除,磁盤空間並沒有釋放,此時再執行> bigfile即可釋放磁盤空間。

生產中一般日誌太大了都用> bigfile此辦法清理日誌,而不是rm

[root@centos7 data]# dd if=/dev/zero of=./bigfile bs=1M count=50
記錄了50+0 的讀入
記錄了50+0 的寫出
52428800字節(52 MB)已複製,0.695109 秒,75.4 MB/秒
[root@centos7 data]# ll bigfile 
-rw-r--r--. 1 root root 52428800 7月  25 10:53 bigfile
[root@centos7 data]# ll -h bigfile 
-rw-r--r--. 1 root root 50M 7月  25 10:53 bigfile
[root@centos7 data]# > bigfile 
[root@centos7 data]# ll -h bigfile 
-rw-r--r--. 1 root root 0 7月  25 10:54 bigfile

>與>>

一個> 表示覆蓋,>>兩個>是追加

touch創建已有文件會刷新源文件的三個時間,但內容不會動

[root@centos7 data]# stat a.log
  文件:"a.log"
  大小:16         塊:8          IO 塊:4096   普通文件
設備:803h/2051d   Inode:8847        硬鏈接:1
權限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
環境:unconfined_u:object_r:etc_runtime_t:s0
最近訪問:2019-07-24 15:51:30.467199007 +0800
最近更改:2019-07-24 15:51:28.453199107 +0800
最近改動:2019-07-24 15:51:28.453199107 +0800
創建時間:-
[root@centos7 data]# touch a.log 
[root@centos7 data]# stat a.log
  文件:"a.log"
  大小:16         塊:8          IO 塊:4096   普通文件
設備:803h/2051d   Inode:8847        硬鏈接:1
權限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
環境:unconfined_u:object_r:etc_runtime_t:s0
最近訪問:2019-07-25 10:59:58.509834591 +0800
最近更改:2019-07-25 10:59:58.509834591 +0800
最近改動:2019-07-25 10:59:58.509834591 +0800
創建時間:-

使用追加符號>>創建已有文件,不會刷新文件的三個時間,內容也不會改變

[root@centos7 data]# stat a
  文件:"a"
  大小:8          塊:8          IO 塊:4096   普通文件
設備:803h/2051d   Inode:68          硬鏈接:1
權限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
環境:unconfined_u:object_r:etc_runtime_t:s0
最近訪問:2019-07-24 11:22:49.816547042 +0800
最近更改:2019-07-20 19:51:02.893407098 +0800
最近改動:2019-07-20 19:51:02.893407098 +0800
創建時間:-
[root@centos7 data]# >> a
[root@centos7 data]# stat a
  文件:"a"
  大小:8          塊:8          IO 塊:4096   普通文件
設備:803h/2051d   Inode:68          硬鏈接:1
權限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
環境:unconfined_u:object_r:etc_runtime_t:s0
最近訪問:2019-07-24 11:22:49.816547042 +0800
最近更改:2019-07-20 19:51:02.893407098 +0800
最近改動:2019-07-20 19:51:02.893407098 +0800
創建時間:-

重定向操作

  • 1>等於>,重定向的是標準輸出
  • 2>,重定向的是標準錯誤
  • &>所有輸出重定向到文件 >/dev/null 2>&1
  • set -C執行後可以禁止將內容覆蓋到已有文件;可以使用>|進行強制覆蓋
  • set +C(默認)允許覆蓋
練習1,標準錯誤和標準輸出分別重定向到不同文件
[root@centos7 data]# ll all.log  xxxx
ls: 無法訪問xxxx: 沒有那個文件或目錄
-rw-r--r--. 1 root root 6 7月  25 11:01 all.log
[root@centos7 data]# ll all.log  xxxx > stdout.log 2> stderror.log
[root@centos7 data]# cat stdout.log 
-rw-r--r--. 1 root root 6 7月  25 11:01 all.log
[root@centos7 data]# cat stderror.log 
ls: 無法訪問xxxx: 沒有那個文件或目錄
練習2,將所有輸出都重定向到某個文件

ll all.log xxxx &> std.log

或者

ll all.log xxxx > std.log 2>&1

或者

[root@centos7 data]# ll all.log  xxxx
ls: 無法訪問xxxx: 沒有那個文件或目錄
-rw-r--r--. 1 root root 6 7月  25 11:01 all.log
[root@centos7 data]# ll all.log  xxxx &> std.log
[root@centos7 data]# cat std.log 
ls: 無法訪問xxxx: 沒有那個文件或目錄
-rw-r--r--. 1 root root 6 7月  25 11:01 all.log

錯誤寫法:

2>&1 > /dev/null

計算1+...+100

[root@centos7 ~]# echo {1..100} | tr ' ' '+'
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+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100
[root@centos7 ~]# echo {1..100} | tr ' ' '+' | bc
5050
[root@centos7 ~]# seq -s'+' 100 
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+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100
[root@centos7 ~]# seq -s'+' 100 | bc
5050

將etc/issue轉換爲大寫

[root@centos7 ~]# cat /etc/issue | tr [a-z] [A-Z]
CURRENT TERMINEL:\L
CURRENT TIME:\T
CURRENT HOSTNAME:\S
\S
KERNEL \R ON AN \M

[root@centos7 ~]# cat /etc/issue | tr [:lower:] [:upper:]
CURRENT TERMINEL:\L
CURRENT TIME:\T
CURRENT HOSTNAME:\S
\S
KERNEL \R ON AN \M

處理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的數字和空格

[root@centos7 ~]# echo 'xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4' | tr -dc ' 0-9'
 1  2  3  4

刪除windows中記事本中的回車符\r(十六進制是0d)

[root@centos7 ~]# file win.txt 
win.txt: ASCII text, with CRLF line terminators
[root@centos7 ~]# hexdump -C win.txt 
00000000  61 62 63 0d 0a 64 65 66                           |abc..def|
00000008
[root@centos7 ~]# tr -d '\r' < win.txt > win2.txt
[root@centos7 ~]# file win2.txt 
win2.txt: ASCII text
[root@centos7 ~]# hexdump -C win2.txt 
00000000  61 62 63 0a 64 65 66                              |abc.def|
00000007
[root@centos7 ~]# cat win2.txt 
abc
def

cat和tee寫入文件的方法(經常用)

cat > win2.txt <<EOF 一個>是覆蓋,兩個>是追加

[root@centos7 ~]# cat > win2.txt <<EOF
> hello
> world
> EOF
[root@centos7 ~]# cat win2.txt 
hello
world

tee win2.txt <<EOF tee命令默認是覆蓋文件,並且會把輸入的內容打印一遍

[root@centos7 ~]# tee win2.txt <<EOF
> hello
> world!
> EOF
hello
world!

tee如果要追加使用-a選項

[root@centos7 ~]# tee -a win2.txt <<EOF
> i am bob.
> EOF
i am bob.
[root@centos7 ~]# cat win2.txt 
hello
world!
i am bob.

mail給qqq用戶發一封郵件,標題爲hi

[root@centos7 ~]# mail -s hi qqq < win2.txt

qqq收郵件

[qqq@centos7 ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/qqq": 1 message 1 new
>N  1 root                  Thu Jul 25 14:15  20/602   "hi"
& 1
Message  1:
From [email protected]  Thu Jul 25 14:15:39 2019
Return-Path: <[email protected]>
X-Original-To: qqq
Delivered-To: [email protected]
Date: Thu, 25 Jul 2019 14:15:39 +0800
To: [email protected]
Subject: hi
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: [email protected] (root)
Status: R

hello
world!
i am bob.

危險操作

1、清空文件的操作

[root@centos7 ~]# cat win.txt 
abc
def[root@centos7 ~]# cat < win.txt > win.txt
[root@centos7 ~]# cat win.txt 
[root@centos7 ~]# ll win.txt 
-rw-r--r--. 1 root root 0 7月  25 14:18 win.txt

2、更危險的操作:秒級生成巨大文件

win.txt如果爲空不會有任何事,如果win.txt不爲空,就麻煩了,執行不到1s我便CTRL+C

[root@centos7 ~]# echo 1 > win.txt 
[root@centos7 ~]# ll win.txt 
-rw-r--r--. 1 root root 2 7月  25 14:19 win.txt
[root@centos7 ~]# cat < win.txt >> win.txt
^C
[root@centos7 ~]# ll win.txt 
-rw-r--r--. 1 root root 990436 7月  25 14:19 win.txt

  • passwd輸出的內容無法重定向到文件

標準I/O和管道

seq

  • seq打印1到100: seq 100
  • seq打印2到23: seq 2 23
  • seq打印1到100內的奇數 seq 1 2 100
  • seq打印1到100內的偶數 seq 2 2 100
  • 100以內 ,從1開始,每隔5步打印一個數 seq 1 5 100
  • 100以內 ,從1開始,每隔6步打印一個數 seq 1 6 100
  • 100以內 ,從1開始,每隔6步打印一個數,分隔符爲+ seq -s'+' 1 6 100
  • 100以內 ,從1開始,每隔6步打印一個數,分隔符爲 seq -s'' 1 6 100
  • 計算1+7+13+19+...+97的和 seq -s'*' 1 6 100 | bc

管道加重定向

2>&1 | 等於 |& 表示如果有錯就重定向到標準輸出

[root@centos7 ~]# cat /etc/fst | tr [a-z] [A-Z]
cat: /etc/fst: 沒有那個文件或目錄
[root@centos7 ~]# cat /etc/fst 2>&1 | tr [a-z] [A-Z]
CAT: /ETC/FST: 沒有那個文件或目錄
[root@centos7 ~]# cat /etc/fst |& tr [a-z] [A-Z]
CAT: /ETC/FST: 沒有那個文件或目錄

巧用bc加管道,將十進制轉化爲二進制

[root@centos7 ~]# echo "obase=2;12" | bc
1100
[root@centos7 ~]# echo "obase=2;127" | bc
1111111

巧妙生成隨機數密碼

1、使用tr命令加隨機數生成設備urandom

[root@centos7 ~]# cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c20
uqst41VFGIDrwmusM1k2[root@centos7 ~]#

2、使用openssl

[root@centos7 ~]# openssl rand -base64 20
ihgyRWEJscwOj7Gm82ZYElBcxm4=

管道中的 - 符號

可以表示一個輸入或輸出流

比如

1、https://raw.githubusercontent.com/uscwifi/scripts/master/nginx-install.sh是一個腳本,如果想在本地執行該腳本,一般需要下載下來。下面方法爲curl訪問到腳本的內容,bash -表示將curl的輸出流作爲自己的參數

[root@centos7 ~]# curl https://raw.githubusercontent.com/uscwifi/scripts/master/nginx-install.sh | bash -

2、打包文件

tar -cvf - /etc表示將/etc目錄打包,-爲輸出流,不寫文件名;tar -xvf - 表示解壓文件,-將管道前面的輸出流作爲自己的輸入流;-C /tmp表示解壓到/tmp目錄

[root@centos7 ~]# tar -cvf  - /etc |tar -xvf - -C /tmp

用戶、組和權限

用戶ID分配

  • CentOS6系統用戶分配的ID範圍爲1-499
  • CentOS7系統用戶分配的ID範圍爲1-999
  • CentOS6普通登陸用戶分配的ID範圍爲500+
  • CentOS7普通登陸用戶分配的ID範圍爲1000+

windows命令創建和刪除用戶(瞭解即可)

  • net user root root /add
  • net user root /del

用戶和組相關配置文件

  • /etc/passwd
  • /etc/group
  • /etc/shadow
  • /etc/gshadow

/etc/passwd的7個字段(瞭解即可)

用戶名:密碼:UID:GID:註釋說明:家目錄:SHELL

/etc/shadow的9個字段(瞭解即可)

用戶名:加密了的密碼:最後一次更改密碼的日期:密碼的最小年齡:密碼最大年齡:密碼警告時間段:密碼禁用期:賬戶過期日期,保留字段

getent查看用戶信息的強大

1、查看qqq用戶的passwd文件記錄

[root@centos7 ~]# getent passwd qqq
qqq:x:1000:1000:qqqq,it,10010,10086:/home/qqq:/bin/bash

2、查看qqq用戶的group文件記錄

[root@centos7 ~]# getent group qqq
qqq:x:1000:qqq

3、查看qqq用戶的shadow

[root@centos7 ~]# getent shadow qqq
qqq:$6$yb2wPd/6dOY1ELLQ$M0DwUcC0XrYNDGPb.cgXBhZ4H7PLzFeO.Us1NrNPqLYgB.8ybFfxBNgqYKBLzFhScG7iK1YvcQ7XyItd6qai9.::0:99999:7:::

chage命令可以更改用戶密碼過期信息

finger查看用戶信息

[root@centos7 ~]# finger qqq
Login: qqq                      Name: qqqq
Directory: /home/qqq                    Shell: /bin/bash
Office: it, x1-0010         Home Phone: x1-0086
Last login 四 7月 25 14:16 (CST) on pts/6
Mail last read 四 7月 25 14:17 2019 (CST)
No Plan.

usermod改用戶屬性

  • useradd可以創建用戶
  • usermod -L鎖用戶,-U解鎖用戶
  • groupadd用於添加一個組,比較少用
  • 每個用戶創建後屬於和自己同名的組

給qqq用戶添加附加組wheel

usermod -aG添加附加組不影響原來的組

[root@centos7 ~]# id qqq
uid=1000(qqq) gid=1000(qqq) 組=1000(qqq)
[root@centos7 ~]# usermod -aG wheel qqq
[root@centos7 ~]# id qqq
uid=1000(qqq) gid=1000(qqq) 組=1000(qqq),10(wheel)

把qqq從所有附加組中國移除

附加組爲空即可

[root@centos7 ~]# id qqq
uid=1000(qqq) gid=1000(qqq) 組=1000(qqq),10(wheel)
[root@centos7 ~]# usermod -G '' qqq
[root@centos7 ~]# id qqq
uid=1000(qqq) gid=1000(qqq) 組=1000(qqq)

修改密碼的幾種方式

1、passwd 交互式改密碼
2、passwd --stdin
[root@centos7 ~]# echo 123456 | passwd --stdin wang
更改用戶 wang 的密碼 。
passwd:所有的身份驗證令牌已經成功更新。
3、chpasswd批量改密碼
[root@centos7 ~]# cat passwd.list 
wang:123456
zhang:1234567
[root@centos7 ~]# cat passwd.list | chpasswd 

4、echo加管道加passwd

[root@centos7 ~]# echo -e "12345678\n12345678" | passwd zhang
更改用戶 zhang 的密碼 。
新的 密碼:無效的密碼: 密碼未通過字典檢查 - 過於簡單化/系統化
重新輸入新的 密碼:passwd:所有的身份驗證令牌已經成功更新。

雜七雜八命令(少用)

  • grpck:group check;檢查組文件的完整性
  • vipw,vigr 編輯密碼、組、影子密碼或影子組文件
  • chfn 修改你的finger信息
  • chsh 修改用戶的shell,一般可以創建系統用戶並修改其shell爲/sbin/nologin,禁止其登陸
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章