16_特殊許可權和重定向
阿新 • • 發佈:2020-11-30
特殊許可權
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/