1. 程式人生 > 實用技巧 >16_特殊許可權和重定向

16_特殊許可權和重定向

特殊許可權

1. setuid

許可權位作用於屬主的位置   可執行的許可權位    執行這條命令的時候,相當於這條命令的所有者  root

s 表示  

[root@qls ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

[root@qls ~]# ll /usr/bin/rm
-rwxr-xr-x. 1 root root 62952 Oct 31  2018 /usr/bin/rm
[root@qls ~]# su - qls01
Last login: Thu Jul 23 12:24:52 CST 2020 from 10.0.0.1 on pts/4
[qls01@qls ~]$ rm -rf /opt/
rm: cannot remove ‘/opt/’: Permission denied
[qls01@qls ~]$ ll -d /
dr-xr-xr-x. 17 root root 224 Jul 22 10:21 /
[qls01@qls ~]$ logout
[root@qls ~]# rm -rf /opt/
[root@qls ~]# ll /opt/
ls: cannot access /opt/: No such file or directory
[root@qls ~]# mkdir  /opt/
[root@qls ~]# chmod  557   /
[root@qls ~]# ll -d /
dr-xr-xrwx. 17 root root 224 Jul 24 08:38 /
[root@qls ~]# su - qls01
Last login: Fri Jul 24 08:37:21 CST 2020 on pts/0
[qls01@qls ~]$ rm -rf /opt/
[qls01@qls ~]$ logout
[root@qls ~]# chmod  -w  /
chmod: /: new permissions are r-xr-xrwx, not r-xr-xr-x
[root@qls ~]# chmod  o-w  /
[root@qls ~]# ll -d /
dr-xr-xr-x. 16 root root 213 Jul 24 08:39 /

[root@qls ~]# ll /usr/bin/rm
-rwxr-xr-x. 1 root root 62952 Oct 31  2018 /usr/bin/rm
[root@qls ~]# chmod u+s  /usr/bin/rm
[root@qls ~]# ll /usr/bin/rm
-rwsr-xr-x. 1 root root 62952 Oct 31  2018 /usr/bin/rm
[root@qls ~]# mkdir  /opt
[root@qls ~]# su -  qls01
Last login: Fri Jul 24 08:39:42 CST 2020 on pts/0
[qls01@qls ~]$ rm -rf /opt/
[qls01@qls ~]$ logout
[root@qls ~]# mkdir  /opt

[root@qls ~]# chmod u-s  /usr/bin/rm

[root@qls ~]# ll /usr/bin/yum 
-rwxr-xr-x. 1 root root 801 Nov  5  2018 /usr/bin/yum
[root@qls ~]# su - qls01
Last login: Fri Jul 24 08:42:10 CST 2020 on pts/0
[qls01@qls ~]$ yum install -y  sl
Loaded plugins: fastestmirror
You need to be root to perform this command.
[qls01@qls ~]$ yum install -y  mysql-server
Loaded plugins: fastestmirror
You need to be root to perform this command.
[qls01@qls ~]$ logout
[root@qls ~]# ll /usr/bin/yum 
-rwxr-xr-x. 1 root root 801 Nov  5  2018 /usr/bin/yum
[root@qls ~]# chmod u+s  /usr/bin/yum
[root@qls ~]# ll /usr/bin/yum 
-rwsr-xr-x. 1 root root 801 Nov  5  2018 /usr/bin/yum
[root@qls ~]# su - qls01
Last login: Fri Jul 24 08:45:28 CST 2020 on pts/0
[qls01@qls ~]$ yum install -y  mysql-server
Loaded plugins: fastestmirror
You need to be root to perform this command.

#普通使用者不能使用yum,命令,即使添加了setuid的許可權也不行

#此許可權不能亂給   知道就行 

[root@qls ~]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54160 Oct 31  2018 /usr/bin/cat
[root@qls ~]# stat  /usr/bin/cat
  File: ‘/usr/bin/cat’
  Size: 54160     	Blocks: 112        IO Block: 4096   regular file
Device: 803h/2051d	Inode: 201349408   Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-07-24 08:52:48.370831557 +0800
Modify: 2018-10-31 03:16:01.000000000 +0800
Change: 2020-07-24 08:52:58.961832157 +0800
 Birth: -
[root@qls ~]# stat /usr/bin/passwd
  File: ‘/usr/bin/passwd’
  Size: 27832     	Blocks: 56         IO Block: 4096   regular file
Device: 803h/2051d	Inode: 201636086   Links: 1
Access: (4755/-rwsr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-07-23 09:58:46.365163401 +0800
Modify: 2014-06-10 14:27:56.000000000 +0800
Change: 2020-07-06 02:14:21.159994247 +0800
 Birth: -


setuid的許可權是4開頭的


[root@qls ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
[root@qls ~]# chmod  -x  /usr/bin/cat
[root@qls ~]# ll /usr/bin/cat
-rw-r--r--. 1 root root 54160 Oct 31  2018 /usr/bin/cat
[root@qls ~]# chmod u+s /usr/bin/cat
[root@qls ~]# ll /usr/bin/cat
-rwSr--r--. 1 root root 54160 Oct 31  2018 /usr/bin/cat
[root@qls ~]# chmod +x /usr/bin/cat
[root@qls ~]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54160 Oct 31  2018 /usr/bin/cat
[root@qls ~]# chmod u-s /usr/bin/cat
[root@qls ~]# 

大S 和 小s的區別  

擁有執行許可權,設定setuid之後是小s

沒有執行許可權,設定setuid之後是大S


2. setgid		

許可權為作用在屬組的x為    使用 s表示   有大S 和小s  

使用者在某個目錄下新建立的目錄或者檔案,預設的所屬組是自己的基本組

當設定setgid之後,使用者新建立的目錄或者檔案的預設所屬組不在是自己的組了

預設的組就是這個目錄的所屬組       讓多個使用者能夠共享一個目錄  



[root@qls ~]# mkdir  /data
[root@qls ~]# ll -d /data
drwxr-xr-x 2 root root 6 Jul 24 09:06 /data
[root@qls ~]# chmod  770  /data
[root@qls ~]# ll -d /data
drwxrwx--- 2 root root 6 Jul 24 09:06 /data


[root@qls ~]# groupadd   ops_group
[root@qls ~]# chgrp   ops_group  /data/
[root@qls ~]# ll -d /data/
drwxrwx--- 2 root ops_group 6 Jul 24 09:06 /data/
[root@qls ~]# useradd  ops01
[root@qls ~]# useradd  ops02
[root@qls ~]# useradd  ops03
[root@qls ~]# id ops03
uid=1046(ops03) gid=1048(ops03) groups=1048(ops03)

[root@qls ~]# usermod   -aG  ops_group   ops01
[root@qls ~]# usermod   -aG  ops_group   ops02
[root@qls ~]# usermod   -aG  ops_group   ops03



[root@qls ~]# su -  ops01
[ops01@qls ~]$ touch  /data/ops01.txt
[ops01@qls ~]$ ll /data/ops01.txt
-rw-rw-r-- 1 ops01 ops01 0 Jul 24 09:10 /data/ops01.txt
[ops01@qls ~]$ logout
[root@qls ~]# su -  ops02
[ops02@qls ~]$ touch  /data/ops02.txt
[ops02@qls ~]$ ll /data/ops02.txt
-rw-rw-r-- 1 ops02 ops02 0 Jul 24 09:11 /data/ops02.txt
[ops02@qls ~]$ logout
[root@qls ~]# su -  ops03
[ops03@qls ~]$ touch  /data/ops03.txt
[ops03@qls ~]$ ll /data/ops03.txt
-rw-rw-r-- 1 ops03 ops03 0 Jul 24 09:11 /data/ops03.txt
[ops03@qls ~]$ logout
[root@qls ~]# ll /data/
total 0
-rw-rw-r-- 1 ops01 ops01 0 Jul 24 09:10 ops01.txt
-rw-rw-r-- 1 ops02 ops02 0 Jul 24 09:11 ops02.txt
-rw-rw-r-- 1 ops03 ops03 0 Jul 24 09:11 ops03.txt


[root@qls ~]# chmod g+s  /data/
[root@qls ~]# ll -d /data/
drwxrws--- 2 root ops_group 57 Jul 24 09:11 /data/
[root@qls ~]# stat /data/
  File: ‘/data/’
  Size: 57        	Blocks: 0          IO Block: 4096   directory
Device: 803h/2051d	Inode: 818813      Links: 2
Access: (2770/drwxrws---)  Uid: (    0/    root)   Gid: ( 1045/ops_group)
Access: 2020-07-24 09:11:26.981894897 +0800
Modify: 2020-07-24 09:11:17.173894341 +0800
Change: 2020-07-24 09:13:03.894900384 +0800
 Birth: -
[root@qls ~]# ll /data/
total 0
-rw-rw-r-- 1 ops01 ops01 0 Jul 24 09:10 ops01.txt
-rw-rw-r-- 1 ops02 ops02 0 Jul 24 09:11 ops02.txt
-rw-rw-r-- 1 ops03 ops03 0 Jul 24 09:11 ops03.txt


[root@qls ~]# echo "root" >  /data/root.log
[root@qls ~]# ll /data/
total 4
-rw-rw-r-- 1 ops01 ops01     0 Jul 24 09:10 ops01.txt
-rw-rw-r-- 1 ops02 ops02     0 Jul 24 09:11 ops02.txt
-rw-rw-r-- 1 ops03 ops03     0 Jul 24 09:11 ops03.txt
-rw-r--r-- 1 root  ops_group 5 Jul 24 09:14 root.log
[root@qls ~]# su  -  ops01
Last login: Fri Jul 24 09:10:22 CST 2020 on pts/0
[ops01@qls ~]$ echo "ops01" > /data/ops01.log
[ops01@qls ~]$ logout
[root@qls ~]# su  -  ops02
Last login: Fri Jul 24 09:10:52 CST 2020 on pts/0
[ops02@qls ~]$ echo "ops02" > /data/ops02.log
[ops02@qls ~]$ ll /data/
total 12
-rw-rw-r-- 1 ops01 ops_group 6 Jul 24 09:15 ops01.log
-rw-rw-r-- 1 ops01 ops01     0 Jul 24 09:10 ops01.txt
-rw-rw-r-- 1 ops02 ops_group 6 Jul 24 09:15 ops02.log
-rw-rw-r-- 1 ops02 ops02     0 Jul 24 09:11 ops02.txt
-rw-rw-r-- 1 ops03 ops03     0 Jul 24 09:11 ops03.txt
-rw-r--r-- 1 root  ops_group 5 Jul 24 09:14 root.log
[ops02@qls ~]$ vim /data/ops01.log
[ops02@qls ~]$ cat /data/ops01.log
ops01
ops02
[ops02@qls ~]$ umask 
0002


[ops02@qls ~]$ ll /data/
total 12
-rw-rw-r-- 1 ops01 ops_group 12 Jul 24 09:16 ops01.log
-rw-rw-r-- 1 ops01 ops01      0 Jul 24 09:10 ops01.txt
-rw-rw-r-- 1 ops02 ops_group  6 Jul 24 09:15 ops02.log
-rw-rw-r-- 1 ops02 ops02      0 Jul 24 09:11 ops02.txt
-rw-rw-r-- 1 ops03 ops03      0 Jul 24 09:11 ops03.txt
-rw-r--r-- 1 root  ops_group  5 Jul 24 09:14 root.log
[ops02@qls ~]$ rm -f /data/ops01.txt

[ops02@qls ~]$ ll -d  /data/
drwxrws--- 2 root ops_group 90 Jul 24 09:20 /data/
[ops02@qls ~]$ mkdir  /data/test
[ops02@qls ~]$ ll /data/test
total 0
[ops02@qls ~]$ ll /data/
total 12
-rw-rw-r-- 1 ops01 ops_group 12 Jul 24 09:16 ops01.log
-rw-rw-r-- 1 ops02 ops_group  6 Jul 24 09:15 ops02.log
-rw-rw-r-- 1 ops02 ops02      0 Jul 24 09:11 ops02.txt
-rw-rw-r-- 1 ops03 ops03      0 Jul 24 09:11 ops03.txt
-rw-r--r-- 1 root  ops_group  5 Jul 24 09:14 root.log
drwxrwsr-x 2 ops02 ops_group  6 Jul 24 09:21 test

3. sticky	粘滯位     

許可權作用於 others 的x為    使用 t  表示    小t   大T 

給目錄設定,  一個目錄所有使用者都擁有管理的許可權   777    針對此目錄設定一個粘滯位  

所有使用者都可以在這個目錄進行建立、刪除檔案的權利  但是隻能管理自己的檔案 或者管理員擁有管理所有檔案的許可權 root  


[root@qls ~]# ll -d  /tmp/
drwxrwxrwt. 15 root root 4096 Jul 24 09:02 /tmp/
[root@qls ~]# stat /tmp/
  File: ‘/tmp/’
  Size: 4096      	Blocks: 8          IO Block: 4096   directory
Device: 803h/2051d	Inode: 67108936    Links: 15
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-07-24 09:49:40.026024737 +0800
Modify: 2020-07-24 09:02:34.229864730 +0800
Change: 2020-07-24 09:02:34.229864730 +0800
 Birth: -


[root@qls ~]# mkdir   /test
[root@qls ~]# chmod  777  /test
[root@qls ~]# ll  -d /test
drwxrwxrwx 2 root root 6 Jul 24 09:50 /test


[root@qls ~]# echo  "root"  /test/root.txt
root /test/root.txt
[root@qls ~]# echo  "root" > /test/root.txt
[root@qls ~]# su - ops01
Last login: Fri Jul 24 09:14:53 CST 2020 on pts/0
[ops01@qls ~]$ echo "ops01" > /test/ops01.txt
[ops01@qls ~]$ logout
[root@qls ~]# su - dev01
Last login: Wed Jul 22 10:49:56 CST 2020 from 10.0.0.1 on pts/1
[dev01@qls ~]$ echo "dev01" > /test/dev01.txt
[dev01@qls ~]$ logout
[root@qls ~]# ll /test/
total 12
-rw-rw-r-- 1 dev01 dev01 6 Jul 24 09:52 dev01.txt
-rw-rw-r-- 1 ops01 ops01 6 Jul 24 09:51 ops01.txt
-rw-r--r-- 1 root  root  5 Jul 24 09:51 root.txt


[root@qls ~]# su -  dev01 
Last login: Fri Jul 24 09:51:51 CST 2020 on pts/0
[dev01@qls ~]$ ll /test/
total 12
-rw-rw-r-- 1 dev01 dev01 6 Jul 24 09:52 dev01.txt
-rw-rw-r-- 1 ops01 ops01 6 Jul 24 09:51 ops01.txt
-rw-r--r-- 1 root  root  5 Jul 24 09:51 root.txt
[dev01@qls ~]$ rm -f /test/ops01.txt 
[dev01@qls ~]$ ll /test/
total 8
-rw-rw-r-- 1 dev01 dev01 6 Jul 24 09:52 dev01.txt
-rw-r--r-- 1 root  root  5 Jul 24 09:51 root.txt


[root@qls ~]# chmod o+t  /test/
[root@qls ~]# stat /test/
  File: ‘/test/’
  Size: 39        	Blocks: 0          IO Block: 4096   directory
Device: 803h/2051d	Inode: 67588796    Links: 2
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-07-24 09:53:31.177037826 +0800
Modify: 2020-07-24 09:53:25.993037532 +0800
Change: 2020-07-24 09:55:02.412042992 +0800
 Birth: -


[root@qls ~]# su - ops01
Last login: Fri Jul 24 09:51:32 CST 2020 on pts/0
[ops01@qls ~]$ echo  "ops01"  > /test/ops.txt
[ops01@qls ~]$ ll /test/
total 12
-rw-rw-r-- 1 dev01 dev01 6 Jul 24 09:52 dev01.txt
-rw-rw-r-- 1 ops01 ops01 6 Jul 24 09:55 ops.txt
-rw-r--r-- 1 root  root  5 Jul 24 09:51 root.txt


[root@qls ~]# su - dev01
Last login: Fri Jul 24 09:52:59 CST 2020 on pts/0
[dev01@qls ~]$ ll /test/
total 12
-rw-rw-r-- 1 dev01 dev01 6 Jul 24 09:52 dev01.txt
-rw-rw-r-- 1 ops01 ops01 6 Jul 24 09:55 ops.txt
-rw-r--r-- 1 root  root  5 Jul 24 09:51 root.txt
[dev01@qls ~]$ rm -f /test/ops.txt 
rm: cannot remove ‘/test/ops.txt’: Operation not permitted
[dev01@qls ~]$ rm -f /test/dev01.txt 
[dev01@qls ~]$ ll /test/
total 8
-rw-rw-r-- 1 ops01 ops01 6 Jul 24 09:55 ops.txt
-rw-r--r-- 1 root  root  5 Jul 24 09:51 root.txt
[dev01@qls ~]$ logout
[root@qls ~]# rm -f  /test/ops.txt 
[root@qls ~]# 

特殊屬性

特殊屬性不受普通許可權的限制  

lsattr		#顯示特殊屬性

chattr		#設定特殊屬性 

a			#這個檔案只能追加內容和檢視   別的什麼都做不了  刪除  移動  複製可以 

i			#什麼都操作不了 

[root@qls ~]# touch  test.txt
[root@qls ~]# touch  test.log
[root@qls ~]# ll
total 0
-rw-r--r-- 1 root root 0 Jul 24 10:08 test.log
-rw-r--r-- 1 root root 0 Jul 24 10:08 test.txt

[root@qls ~]# lsattr  test.log 
---------------- test.log
[root@qls ~]# lsattr  test.txt
---------------- test.txt

[root@qls ~]# echo  "test" > test.log
[root@qls ~]# echo  "test" > test.txt
[root@qls ~]# ll
total 8
-rw-r--r-- 1 root root 5 Jul 24 10:09 test.log
-rw-r--r-- 1 root root 5 Jul 24 10:09 test.txt

[root@qls ~]# chattr   +a test.log
[root@qls ~]# ll test.log
-rw-r--r-- 1 root root 5 Jul 24 10:09 test.log
[root@qls ~]# lsattr  test.log
-----a---------- test.log
[root@qls ~]# cat test.log
test
[root@qls ~]# vim test.log
[root@qls ~]# vim test.log
[root@qls ~]# echo "hello" > test.log
-bash: test.log: Operation not permitted
[root@qls ~]# echo "hello" >> test.log
[root@qls ~]# cat test.log
test
hello
[root@qls ~]# rm -f test.log
rm: cannot remove ‘test.log’: Operation not permitted
[root@qls ~]# mv test.log /tmp/
mv: cannot move ‘test.log’ to ‘/tmp/test.log’: Operation not permitted
[root@qls ~]# cp test.log  /tmp/

[root@qls ~]# chattr +i  test.txt 
[root@qls ~]# lsattr  test.txt
----i----------- test.txt
[root@qls ~]# cat test.txt
test
[root@qls ~]# rm -f test.txt
rm: cannot remove ‘test.txt’: Operation not permitted
[root@qls ~]# mv test.txt /tmp/
mv: cannot move ‘test.txt’ to ‘/tmp/test.txt’: Operation not permitted
[root@qls ~]# cp test.txt  /tmp/
[root@qls ~]# echo "hello" > test.txt 
-bash: test.txt: Permission denied
[root@qls ~]# echo "hello" >> test.txt 
-bash: test.txt: Permission denied

重定向的概述

將原本要輸出到螢幕上面的內容,重定向到一個指定的檔案中 

將原本從鍵盤上面輸入的內容,改為從命令或者檔案當中讀取 

為什麼要用重定向 

1. 資料非常重要,需要儲存  

2. 後臺程式的輸出重定向到一個檔案中 

3. 定時任務的執行結果 

4. 把一些錯誤的輸出定向到空  

5. 把正確和錯誤的資訊都需要儲存 

stdin		#標準輸入		0		#從鍵盤上面讀取輸入的內容,或者從命令及檔案中讀取輸入的內容 

stdout		#標準輸出		1		#預設將正確的資訊標準輸出到螢幕上方  

stderr		#錯誤輸出		2		#預設將錯誤的資訊標準輸出到螢幕上方 

[root@qls ~]# ll /dev/std*
lrwxrwxrwx 1 root root 15 Jul 20 19:44 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Jul 20 19:44 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Jul 20 19:44 /dev/stdout -> /proc/self/fd/1

[root@qls ~]# cat 
hello		#標準輸入
hello		#標準輸出

[root@qls ~]# tail  -f 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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
^Z
[1]+  Stopped                 tail -f passwd
[root@qls ~]# ps
   PID TTY          TIME CMD
 10861 pts/0    00:00:00 bash
 10879 pts/0    00:00:00 bash
 10958 pts/0    00:00:00 su
 10980 pts/0    00:00:00 su
 10981 pts/0    00:00:00 bash
 10998 pts/0    00:00:00 su
 11020 pts/0    00:00:00 su
 11021 pts/0    00:00:00 bash
 11039 pts/0    00:00:00 su
 11040 pts/0    00:00:00 bash
 14928 pts/0    00:00:00 tail
 14930 pts/0    00:00:00 ps
[root@qls ~]# ll /proc/14928/fd
total 0
lrwx------ 1 root root 64 Jul 24 10:51 0 -> /dev/pts/0
lrwx------ 1 root root 64 Jul 24 10:51 1 -> /dev/pts/0
lrwx------ 1 root root 64 Jul 24 10:51 2 -> /dev/pts/0
lr-x------ 1 root root 64 Jul 24 10:51 3 -> /root/passwd
lr-x------ 1 root root 64 Jul 24 10:51 4 -> anon_inode:inotify

[root@qls ~]# jobs
[1]+  Stopped                 tail -f passwd
[root@qls ~]# fg %1
tail -f passwd
^C
[root@qls ~]# jobs
[root@qls ~]# ll /proc/14928/fd
ls: cannot access /proc/14928/fd: No such file or directory
[root@qls ~]# ps
   PID TTY          TIME CMD
 10861 pts/0    00:00:00 bash
 10879 pts/0    00:00:00 bash
 10958 pts/0    00:00:00 su
 10980 pts/0    00:00:00 su
 10981 pts/0    00:00:00 bash
 10998 pts/0    00:00:00 su
 11020 pts/0    00:00:00 su
 11021 pts/0    00:00:00 bash
 11039 pts/0    00:00:00 su
 11040 pts/0    00:00:00 bash
 14933 pts/0    00:00:00 ps

輸出重定向

將原本要輸出到螢幕上面的內容,重定向到一個指定的檔案中 

符號

>	#標準覆蓋正確輸出重定向 		#將正確的內容覆蓋原始檔的   當檔案不存在時,會自動建立 

>>	#標準追加正確輸出重定向		#將正確的內容追加到指定檔案的底部  當檔案不存在時,會自動建立

2>	#標準覆蓋錯誤輸出重定向		#將錯誤的資訊覆蓋到指定的檔案中 

2>>	#標準追加錯誤輸出重定向		#將錯誤的資訊追加到檔案的底部  

案例:

[root@qls ~]# echo  "hello"  > 123.txt

[root@qls ~]# ip a s eth0 > ip.txt
[root@qls ~]# cat ip.txt
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

#合併檔案
[root@qls ~]# cat /etc/hosts  /etc/resolv.conf   > new.txt
[root@qls ~]# cat new.txt
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
# Generated by NetworkManager
nameserver 223.5.5.5

[root@qls ~]# cat 123.txt 
hello
[root@qls ~]# echo "test"  >>  123.txt
[root@qls ~]# cat 123.txt
hello
test

[root@qls ~]# ls  /roott
ls: cannot access /roott: No such file or directory
[root@qls ~]# ls  /roott  2>err.txt
[root@qls ~]# cat err.txt
ls: cannot access /roott: No such file or directory

[root@qls ~]# ls  /roott  2>>err.txt
[root@qls ~]# ls  /roott  2>>err.txt
[root@qls ~]# ls  /roott  2>>err.txt
[root@qls ~]# cat err.txt
ls: cannot access /roott: No such file or directory
ls: cannot access /roott: No such file or directory
ls: cannot access /roott: No such file or directory
ls: cannot access /roott: No such file or directory

#把正確的和錯誤的資訊都儲存到一個檔案中

[root@qls ~]# ls  /roott   > file.txt  2>&1 		#不推薦
[root@qls ~]# cat file.txt 
ls: cannot access /roott: No such file or directory
[root@qls ~]# mkdir  /roott
[root@qls ~]# ls  /roott   > file.txt  2>&1 
[root@qls ~]# cat file.txt 

[root@qls ~]# ls  /roott   &>file.txt
[root@qls ~]# ls  /roottt   &>file.txt
[root@qls ~]# cat file.txt
ls: cannot access /roottt: No such file or directory

#將正確的資訊和錯誤的資訊重定向到空

[root@qls ~]# ls  /roottt   &> /dev/null

#把正確的和錯誤的放在不同的檔案中

[root@qls ~]# ls  /rooot  >> file1.txt  2>> file2.txt
[root@qls ~]# ll
total 4
-rw-r--r-- 1 root root  0 Jul 24 11:14 file1.txt
-rw-r--r-- 1 root root 52 Jul 24 11:14 file2.txt
[root@qls ~]# cat file1.txt 
[root@qls ~]# cat file2.txt 
ls: cannot access /rooot: No such file or directory
[root@qls ~]# ls  /root  >> file1.txt  2>> file2.txt
[root@qls ~]# ll
total 8
-rw-r--r-- 1 root root 20 Jul 24 11:15 file1.txt
-rw-r--r-- 1 root root 52 Jul 24 11:14 file2.txt
[root@qls ~]# cat file1.txt 
file1.txt
file2.txt
[root@qls ~]# cat file2.txt 
ls: cannot access /rooot: No such file or directory

輸入重定向

將原本從鍵盤上面輸入的內容,改為從命令或者檔案當中讀取 

符號

<	#標準輸入重定向 		#將原本從預設的鍵盤中讀取資料改為由命令或者檔案中讀取 

<<	#識別符號限定輸入重定向 	#從鍵盤中讀取內容,直到遇到識別符號的分解符為止

案例:

[root@qls ~]# grep  'root'   /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# grep  'root'  <  /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# grep  root
oldboy
root
root
rottttroot
rottttroot

[root@qls ~]# dd  if=/dev/zero  of=/root/test.log  bs=1M  count=50
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 0.0362247 s, 1.4 GB/s
[root@qls ~]# ll
total 51208
-rw-r--r-- 1 root root       20 Jul 24 11:15 file1.txt
-rw-r--r-- 1 root root       52 Jul 24 11:14 file2.txt
-rw-r--r-- 1 root root 52428800 Jul 24 11:45 test.log
[root@qls ~]# ll -h
total 51M
-rw-r--r-- 1 root root  20 Jul 24 11:15 file1.txt
-rw-r--r-- 1 root root  52 Jul 24 11:14 file2.txt
-rw-r--r-- 1 root root 50M Jul 24 11:45 test.log

[root@qls ~]# dd  </dev/zero   >/root/oldboy.log  bs=10M  count=100
100+0 records in
100+0 records out
1048576000 bytes (1.0 GB) copied, 21.3836 s, 49.0 MB/s
[root@qls ~]# ll -h
total 1.1G
-rw-r--r-- 1 root root    20 Jul 24 11:15 file1.txt
-rw-r--r-- 1 root root    52 Jul 24 11:14 file2.txt
-rw-r--r-- 1 root root 1000M Jul 24 11:48 oldboy.log
-rw-r--r-- 1 root root   50M Jul 24 11:45 test.log

[root@qls ~]# cat file1.txt 
file1.txt
file2.txt
[root@qls ~]# tr  't' 'T'  < file1.txt
file1.TxT
file2.TxT

資料庫匯入表  

[root@qls ~]# mysql  -uroot  -p123  < all.sql

[root@qls ~]# cat >>file3.txt
123
345
678
456
EOF
123
^C
[root@qls ~]# cat file3.txt
123
345
678
456
EOF
123
[root@qls ~]# cat >>file4.txt<<EOF
> 123
> dfer
> rghrt
> gergrtg
> EOF
[root@qls ~]# cat file4.txt 
123
dfer
rghrt
gergrtg

[root@qls ~]# cat 123.sh
cat<<EOF
1. rge
2. fgo
3. jfrio
4. hfoih
EOF
[root@qls ~]# sh 123.sh
1. rge
2. fgo
3. jfrio
4. hfoih

管道技術

|	管道  	
連線左右兩個命令的使用     把前面的命令作為標準輸出通過管道交給後面的命令 作為標準輸入 

只能把正確的資訊交給後面的命令,錯誤的資訊的不會傳遞 

[root@qls ~]# head 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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# head passwd  | cat -n 
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
     9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10	operator:x:11:0:operator:/root:/sbin/nologin

[root@qls ~]# ifconfig  eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::3310:9d15:9ee4:43e8  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:eb:ea:8d  txqueuelen 1000  (Ethernet)
        RX packets 99054  bytes 61039138 (58.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 55989  bytes 5452694 (5.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@qls ~]# ifconfig  eth0 | awk 'NR==2'
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
[root@qls ~]# ifconfig  eth0 | awk 'NR==2' | awk '{print $2}'
10.0.0.100

[root@qls ~]# awk  -F:  '{print $3}'  passwd  | sort -rn | head
1046
1045
1044
1043
1042
1041
1040
1039
1038
1037

#管道技術中的tee技術 

需要儲存一些標準輸出的內容 

[root@qls ~]# echo $RANDOM | md5sum | cut -c 1-8 | tee  pass.txt    |passwd  --stdin  qls01
Changing password for user qls01.
passwd: all authentication tokens updated successfully.
[root@qls ~]# cat pass.txt 
100ada15

-a		#追加 

tee 和 重定向的區別  

重定向		#把要輸出到螢幕上面的內容重定向到指定的檔案中

tee			#把要輸出到螢幕上面的內容重定向到指定的檔案中 ,並且可以繼續輸出一份到螢幕上面   

#管道中xargs技術 

讓一些不支援管道的命令支援管道    把前面命令的執行結果以檔案的引數傳遞方式傳遞給後面的命令 

[root@qls ~]# ls  | xargs  sed -i  's#root#oldboy#g'

[root@qls ~]# find  /var/log/  -type f -name "*.log"  |xargs  cp  -t  /opt

[root@qls ~]# find  /var/log/  -type f -name "*.log"  |xargs  -I  {}   cp  {}  /mnt/