linux运维部落 |国内最专业的Linux万达登录,万达娱乐登录 Fri, 21 Jul 2017 19:08:36 +0000 zh-CN hourly 1 https://wordpress.org/?v=4.4.10 第二十周作业 /82057 /82057#respond Fri, 21 Jul 2017 19:08:36 +0000 /?p=82057 一、用keepalived实现nginx与lvs的高可用集群
keepalived+nginx高可用
环境:
node1:    192.168.31.233     keepalived+nginx master
node2:    192.168.31.72      keepalived+nginx slave
node3:    192.168.31.233     web1
node4:    192.168.31.26      web2
VIP:  192.168.31.100 

1、node1,node2安装 keepalived nginx软件包
yum -y install nginx  keepalived

2、node3,node4安装httpd服务,并配置网页
   node3 
   yum -y install httpd
   echo server3 >/var/www/html/index.html
   systemctl start httpd.service 
   访问测试
   node4   
   yum -y install httpd
   echo server4 >/var/www/html/index.html
   systemctl start httpd.service 
   访问测试
   
3、配置nginx负载均衡 <node1>
在http段内加入
upstream webserver {
        server 192.168.31.26;
        server 192.168.31.23;
        }
在server段location内加入
        proxy_pass http://webserver;
        proxy_set_header X-Real-IP $remote_addr;

4、配置keepalived <node1>
global_defs {
   notification_email {
        root@localhost.com
   }
   notification_email_from admin@localhost.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER             #主服务器
    interface ens33
    virtual_router_id 51
    priority 100     #优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.31.100       #虚拟VIP,客户段访问的IP
    }
}

5、拷贝nginx和keepalived的配置文件到node2服务器上,并修改keepalived的配置
scp /etc/nginx/nginx.conf 192.168.31.72:/etc/nginx/
scp /etc/keepalived/keepalived.conf 192.168.31.72:/etc/keepalived/
vim /etc/keepalived/keepalived.conf
state BACKUP         #改为从服务器

6、启动nginx、keepalived服务,并查看80端口是否起来
nginx
systemctl start keepalived.service

7、测试
http://192.168.31.100 通过访问VIP能浏览到后端的网页

可以看到VIP绑定到node1的网卡上

模拟node1节点故障,可以看到VIP转移到node2节点上,访问后端网页正常(省略…)

keepalived+lvs高可用

环境:
node1:    192.168.31.233     keepalived+lvs-DR master
node2:    192.168.31.72      keepalived+lvs-DR slave
node3:    192.168.31.233     web1
node4:    192.168.31.26      web2
VIP:        192.168.31.100 

client:    192.168.31.172

1、node1,node2安装keepalived,ipvsadm软件包
yum -y install keepalived  ipvsadm

2、修改node1上的keepalived配置文件 
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost.com
   }
   notification_email_from admin@localhost.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER                   #主服务器
    interface ens33
    virtual_router_id 51
    priority 100                    #优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.31.100
    }
}

virtual_server 192.168.31.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    sorry_server 127.0.0.1 80
    persistence_timeout 50
    protocol TCP

real_server 192.168.31.26 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

   real_server 192.168.31.23 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

}

3、修改node2上的keepalived配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost.com
   }
   notification_email_from admin@localhost.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP                   #从服务器
    interface ens33
    virtual_router_id 51
    priority 90 #优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.31.100
    }
}

virtual_server 192.168.31.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    sorry_server 127.0.0.1 80
    persistence_timeout 50
    protocol TCP

real_server 192.168.31.26 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

   real_server 192.168.31.23 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

}

4、启动node1,node2上的keepalived
systemctl start keepalived 
VIP绑定到node1主服务器上

5、node3,node4安装httpd,并创建启动LVS-DR模式脚本
yum -y install httpd
vim realserver.sh 
#!/bin/bash  
VIP=192.168.31.100
. /etc/rc.d/init.d/functions
case “$1” in
start)
 ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
 /sbin/route add -host $VIP dev lo:0
 echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore
 echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce
 echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore
 echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce
 sysctl -p >/dev/null 2>&1
 echo “RealServer Start OK”  
 ;;
stop)
 ifconfig lo:0 down
 route del $VIP >/dev/null 2>&1
 echo “0” >/proc/sys/net/ipv4/conf/lo/arp_ignore
 echo “0” >/proc/sys/net/ipv4/conf/lo/arp_announce
 echo “0” >/proc/sys/net/ipv4/conf/all/arp_ignore
 echo “0” >/proc/sys/net/ipv4/conf/all/arp_announce
 echo “RealServer Stoped”  
 ;;
 *)
 echo “Usage: $0 {start|stop}”  
 exit 1
esac
exit 0

bash realserver.sh  start

6、客户端访问测试
for i in `seq 100`;do curl 192.168.31.100;sleep 1;done
<h1>RS3</h1>
<h1>RS4</h1>
<h1>RS3</h1>
<h1>RS4</h1>
<h1>RS3</h1>
<h1>RS4</h1>
###主服务器宕机时,备机可正常提供服务,访问正常###
for i in `seq 100`;do curl 192.168.31.100;sleep 1;done
<h1>RS3</h1>
<h1>RS4</h1>
<h1>RS3</h1>
<h1>RS4</h1>
<h1>RS3</h1>
<h1>RS4</h1>

二、授权test用户通过任意主机连接当前mysql,但每秒中最大查询次数不得超过5次;此账户的同时连接次数不得超过3次

 GRANT USAGE ON *.* TO test@’%’ WITH MAX_QUERIES_PER_HOUR 5;
 GRANT USAGE ON *.* TO test@’%’ WITH MAX_USER_CONNECTIONS 3;


三、导入hellodb.sql生成数据库,完成以下练习:

(1)在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄;

> SELECT Name,Age from students WHERE Age>25 AND Gender=’M’;
+————–+—–+
| Name         | Age |
+————–+—–+
| Xie Yanke    |  53 |
| Ding Dian    |  32 |
| Yu Yutong    |  26 |
| Shi Qing     |  46 |
| Tian Boguang |  33 |
| Xu Xian      |  27 |
| Sun Dasheng  | 100 |
+————–+—–+

(2)以ClassID为分组依据,显示每组的平均年龄;

> SELECT ClassID,avg(age) FROM students GROUP BY ClassID;
+———+———-+
| ClassID | avg(age) |
+———+———-+
|    NULL |  63.5000 |
|       1 |  20.5000 |
|       2 |  36.0000 |
|       3 |  20.2500 |
|       4 |  24.7500 |
|       5 |  46.0000 |
|       6 |  20.7500 |
|       7 |  19.6667 |
+———+———-+
(3) 显示第2题中平均年龄大于30的分组及平均年龄;

> SELECT ClassID,avg(age) FROM students GROUP BY ClassID HAVING avg(age)>30;            
+———+———-+
| ClassID | avg(age) |
+———+———-+
|    NULL |  63.5000 |
|       2 |  36.0000 |
|       5 |  46.0000 |
+———+———-+

 (4) 显示以L开头的名字的同学的信息;
> SELECT * FROM students WHERE Name LIKE ‘L%’;
+——-+————-+—–+——–+———+———–+
| StuID | Name        | Age | Gender | ClassID | TeacherID |
+——-+————-+—–+——–+———+———–+
|     8 | Lin Daiyu   |  17 | F      |       7 |      NULL |
|    14 | Lu Wushuang |  17 | F      |       3 |      NULL |
|    17 | Lin Chong   |  25 | M      |       4 |      NULL |
+——-+————-+—–+——–+———+———–+

(5) 显示TeacherID非空的同学的相关信息;
> SELECT * FROM students WHERE TeacherID IS NOT NULL;
+——-+————-+—–+——–+———+———–+
| StuID | Name        | Age | Gender | ClassID | TeacherID |
+——-+————-+—–+——–+———+———–+
|     1 | Shi Zhongyu |  22 | M      |       2 |         3 |
|     2 | Shi Potian  |  22 | M      |       1 |         7 |
|     3 | Xie Yanke   |  53 | M      |       2 |        16 |
|     4 | Ding Dian   |  32 | M      |       4 |         4 |
|     5 | Yu Yutong   |  26 | M      |       3 |         1 |
+——-+————-+—–+——–+———+———–+

(6) 以年龄排序后,显示年龄最大的前10位同学的信息;

> SELECT * FROM students ORDER BY Age DESC LIMIT 10;
+——-+————–+—–+——–+———+———–+
| StuID | Name         | Age | Gender | ClassID | TeacherID |
+——-+————–+—–+——–+———+———–+
|    25 | Sun Dasheng  | 100 | M      |    NULL |      NULL |
|     3 | Xie Yanke    |  53 | M      |       2 |        16 |
|     6 | Shi Qing     |  46 | M      |       5 |      NULL |
|    13 | Tian Boguang |  33 | M      |       2 |      NULL |
|     4 | Ding Dian    |  32 | M      |       4 |         4 |
|    24 | Xu Xian      |  27 | M      |    NULL |      NULL |
|     5 | Yu Yutong    |  26 | M      |       3 |         1 |
|    17 | Lin Chong    |  25 | M      |       4 |      NULL |
|    23 | Ma Chao      |  23 | M      |       4 |      NULL |
|    18 | Hua Rong     |  23 | M      |       7 |      NULL |

+——-+————–+—–+——–+———+———–+


(7) 查询年龄大于等于20岁,小于等于25岁的同学的信息;用三种方法;

方法一:
> SELECT * FROM students WHERE Age>=20 AND Age<=25;   
+——-+—————+—–+——–+———+———–+
| StuID | Name          | Age | Gender | ClassID | TeacherID |
+——-+—————+—–+——–+———+———–+
|     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
|     2 | Shi Potian    |  22 | M      |       1 |         7 |
|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
|    16 | Xu Zhu        |  21 | M      |       1 |      NULL |
|    17 | Lin Chong     |  25 | M      |       4 |      NULL |
|    18 | Hua Rong      |  23 | M      |       7 |      NULL |
|    21 | Huang Yueying |  22 | F      |       6 |      NULL |
|    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
|    23 | Ma Chao       |  23 | M      |       4 |      NULL |
+——-+—————+—–+——–+———+———–+

方法二:
> SELECT * FROM students WHERE Age BETWEEN 20 AND 25;       
+——-+—————+—–+——–+———+———–+
| StuID | Name          | Age | Gender | ClassID | TeacherID |
+——-+—————+—–+——–+———+———–+
|     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
|     2 | Shi Potian    |  22 | M      |       1 |         7 |
|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
|    16 | Xu Zhu        |  21 | M      |       1 |      NULL |
|    17 | Lin Chong     |  25 | M      |       4 |      NULL |
|    18 | Hua Rong      |  23 | M      |       7 |      NULL |
|    21 | Huang Yueying |  22 | F      |       6 |      NULL |
|    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
|    23 | Ma Chao       |  23 | M      |       4 |      NULL |
+——-+—————+—–+——–+———+———–+

方法三:
> SELECT * FROM students WHERE Age IN (20,21,22,23,24,25);
+——-+—————+—–+——–+———+———–+
| StuID | Name          | Age | Gender | ClassID | TeacherID |
+——-+—————+—–+——–+———+———–+
|     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
|     2 | Shi Potian    |  22 | M      |       1 |         7 |
|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
|    16 | Xu Zhu        |  21 | M      |       1 |      NULL |
|    17 | Lin Chong     |  25 | M      |       4 |      NULL |
|    18 | Hua Rong      |  23 | M      |       7 |      NULL |
|    21 | Huang Yueying |  22 | F      |       6 |      NULL |
|    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
|    23 | Ma Chao       |  23 | M      |       4 |      NULL |
+——-+—————+—–+——–+———+———–+
(8) 显示前5位同学的姓名、课程及成绩;
> SELECT st.Name,co.Course,sc.Score FROM students st,courses co,scores sc WHERE st.StuID=sc.StuID and sc.CourseID=co.CourseID LIMIT 5;
+————-+—————-+——-+
| Name        | Course         | Score |
+————-+—————-+——-+
| Shi Zhongyu | Kuihua Baodian |    77 |
| Shi Zhongyu | Weituo Zhang   |    93 |
| Shi Potian  | Kuihua Baodian |    47 |
| Shi Potian  | Daiyu Zanghua  |    97 |
| Xie Yanke   | Kuihua Baodian |    88 |
+————-+—————-+——-+

(9) 显示其成绩高于80的同学的名称及课程;
> SELECT st.Name,co.Course FROM students st,courses co,scores sc WHERE st.StuID=sc.StuID and sc.CourseID=co.CourseID AND sc.Score>80;  
+————-+—————-+
| Name        | Course         |
+————-+—————-+
| Shi Zhongyu | Weituo Zhang   |
| Shi Potian  | Daiyu Zanghua  |
| Xie Yanke   | Kuihua Baodian |
| Ding Dian   | Kuihua Baodian |
| Shi Qing    | Hamo Gong      |
| Xi Ren      | Hamo Gong      |
| Xi Ren      | Dagou Bangfa   |
| Lin Daiyu   | Jinshe Jianfa  |
+————-+—————-+

(10) 求前8位同学每位同学自己两门课的平均成绩,并按降序排列;
> SELECT st.Name,sc2.avg_score FROM (SELECT StuID,avg(Score) AS avg_score FROM scores GROUP BY StuID) AS sc2,students st where st.StuID=sc2.StuID ORDER BY avg_score DESC LIMIT 8;
+————-+———–+
| Name        | avg_score |
+————-+———–+
| Shi Qing    |   96.0000 |
| Shi Zhongyu |   85.0000 |
| Xi Ren      |   84.5000 |
| Xie Yanke   |   81.5000 |
| Ding Dian   |   80.0000 |
| Lin Daiyu   |   75.0000 |
| Shi Potian  |   72.0000 |
| Yu Yutong   |   51.0000 |
+————-+———–+

(11) 显示每门课程课程名称及学习了这门课的同学的个数;
> SELECT co2.Course,count(co2.StuID) FROM (SELECT co.Course,sc.StuID FROM courses co,scores sc WHERE co.CourseID=sc.CourseID) AS co2 GROUP BY co2.Course;       
+—————-+——————+
| Course         | count(co2.StuID) |
+—————-+——————+
| Dagou Bangfa   |                2 |
| Daiyu Zanghua  |                2 |
| Hamo Gong      |                3 |
| Jinshe Jianfa  |                1 |
| Kuihua Baodian |                4 |
| Taiji Quan     |                1 |
| Weituo Zhang   |                2 |
+—————-+—————–

转载请注明:linux运维部落 » 第二十周作业

]]>
/82057/feed 0
Linux的一些基本命令 /81778 /81778#respond Fri, 21 Jul 2017 14:32:01 +0000 /?p=81778

Linux基本命令的分享

1、ls命令 是list的缩写,ls这个命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等

常用参数搭配: ls -a 列出目录所有文件,包含以.开始的隐藏文件 ls -A 列出除.及..的其它文件 ls -r 反序排列 ls -t 以文件修改时间排序 ls -S 以文件大小排序 ls -h 以易读大小显示 ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来

     实例:

     (1) 显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录 ls /var/l*[[:digit:]]*[[:lower:]]

     (2) 显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录

     /etc/[0-9]*[^0-9]

     (3)显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录 ls -a /etc/ [^[:alpha:]][[:alpha:]]*

     (4) 显示/etc/ 目录下所有以rc 开头,并后面是0-6 之间的数字,其它为任意字符的文件或目录 ls -ad /etc/rc*[0-6]*

     (5) 显示/etc 目录下,所有以.d 结尾的文件或目录 ls -ad /etc/*.d

     (6) 显示/etc 目录下,所有.conf 结尾,且以m,n,r,p 开头的文件或目录

     ls -ad /etc/[mnrp]*.conf

     (7) 只显示/root 下的隐藏文件和目录

     ls -ad /root/.*

     (8) 只显示/etc 下的非隐藏目录

     ls -d /etc/*/

     (9) 只显示/etc 下的隐藏目录和文件

     ls -d /etc/.*

     (10) 只显示/etc 下的隐藏目录

      ls -d /etc/.*/

2、cd命令 (changeDirectory),命令语法:cd 切换当前目录至指定目录

1)进入根目录 cd /

     (2)进入家(home)目录 cd ~

     (3)进入上一次工作路径 cd -

     (4)把上个命令的参数作为cd参数使用。 cd !$

3、pwd命令 查看当前工作目录路径.相对路径..绝对路径

1)查看当前路径 pwd2)查看软链接的实际路径 pwd -P

4、mkdir命令 创建文件目录

可用选项:

     -m: 对新建目录设置存取权限,也可以用chmod命令设置;

         -p: 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那                      些尚不在的目录,即一次可以建立多个目录;

     实例:

     (1)当前工作目录下创建名为t的文件夹

     mkdir t

     (2)在tmp目录下创建路径为test/f1/t的目录,若不存在,则创建

     mkdir -p /tmp/test/f1/t

5、rm命令 删除一个目录中的一个或多个文件或目录,如果没有使用- r选项,则rm不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状

rm -rf /* 为删根,在工作中有可能不小心敲成:
     rm -rf /app /* 注意前面的空格 一定不要有 有了显示为空,也是删根.

     实例:

     (1)删除任何.log文件;删除前逐一询问确认

     rm -i *.log

     (2)删除test子目录及子目录中所有档案删除,并且不用一一确认

     rm -rf test3)删除以-f开头的文件

     rm -- -f*

6、rmdir命令 从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对其父目录的写权限。

注意:不能删除非空目录

     实例:

     (1)当parent子目录被删除后使它也成为空目录的话,则顺便一并删除

     rmdir -p parent/child/child11

7、mv命令 移动文件或修改文件名,根据第二参数类型(如目录,则移动文件;如为文件则重命令该文件)。

当第二个参数为目录时,可刚多个文件以空格分隔作为第一参数,移动多个文件到参数2指定的目录中

     实例:

     (1)将文件test1.log重命名为test.txt

     mv test1.log test.txt

     (2)将文件log1.txt,log2.txt,log3.txt移动到根的test3目录中

     mv log1.txt log2.txt log3.txt /test3

     (3)将文件file1改名为file2,如果file2已经存在,则询问是否覆盖

     mv -i log1.txt log2.txt

     (4)移动当前文件夹下的所有文件到上一级目录

     mv * ../

8、cp命令 将源文件复制至目标文件,或将多个源文件复制至目标目录。

注意:命令行复制,如果目标文件已经存在会提示是否覆盖,而在shell脚本中,如果不加-i参数,则不会提示,而是直接覆盖!

     -i 提示

     -r 复制目录及目录内所有项目

     -a 复制的文件与原文件时间一样

     实例:

     (1)复制a.txt到test目录下,保持原文件时间,如果原文件存在提示是否覆盖

     cp -ai a.txt test

     (2)为a.txt建议一个链接(快捷方式)

     cp -s a.txt link_a.txt

9、cat命令 cat主要有三大功能:

1.一次显示整个文件:cat 文件名 2.从键盘创建一个文件:cat > 文件名 只能创建新文件,不能编辑已有文件. 3.将几个文件合并为一个文件:cat 文件1 文件2 > 文件3 -b对非空输出行号

     -n输出所有行号

     实例:

     (1)把 log21.log 的文件内容加上行号后输入 log22.log 这个文件里

     cat -n log21.log log22.log2)把 log23.log 和 log24.log 的文件内容加上行号(空白行不加)之后将内容附加到 log.log 里

     cat -b log23.log log24.log log.log

10、which命令 在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索:

which 查看可执行文件的位置。

     whereis 查看文件的位置。

     locate  配合数据库查看文件位置。

     find        实际搜寻硬盘查询文件名称。 which是在$PATH就是指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

     常用参数:

     -n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。

     实例:

     (1)查看ls命令是否存在,执行哪个 which ls (2)查看which which which (3)查看cd which cd(显示不存在,因为cd是内建命令,而which查找显示是PATH中的命令)

     查看当前PATH配置:echo $PATH;或使用env查看所有环境变量及对应值

11、whereis命令 whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。whereis及locate都是基于系统内建的数据库进行搜索,因此效率很高,而find则是遍历硬盘查找文件。

常用参数:

     -b   定位可执行文件。  -m   定位帮助文件。  -s   定位源代码文件。  -u   搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。  实例:

     (1)查找ls程序相关文件

     whereis ls

     (2)查找ls的源码文件

     whereis -s ls

     (3)查找lcoate的帮助文件

     whereis -m ls

12、chmod命令 用于改变linux系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。可使用ls -l test.txt查找

     以文件log20.log为例:

     -rw-r--r-- 1 root root 296K 07-13 06:03 log20.log 第一列共有10个位置,第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是d,表示是一个目录。从第二个字符开始到第十个共9个字符,3个字符一组,分别表示了3组用户对文件或者目录的权限。权限字符用横线代表空许可,r代表只读,w代表写,x代表可执行。

     常用参数:

     -c 当发生改变时,报告处理信息

     -R 处理指定目录以及其子目录下所有文件

     权限范围:

     u :目录或者文件的当前的用户

     g :目录或者文件的当前的群组

     o :除了目录或者文件的当前用户或群组之外的用户或者群组

     a :所有的用户及群组



     权限代号:

     r :读权限,用数字4表示

     w :写权限,用数字2表示

     x :执行权限,用数字1表示

     - :删除权限,用数字0表示

     s :特殊权限

     实例:

     (1)增加文件t.log所有用户可执行权限

     chmod a+x t.log2)撤销原来所有的权限,然后使拥有者具有可读权限,并输出处理信息

     chmod u=r t.log -c

     (3)给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限

     chmod 751 t.log -c(或者:chmod u=rwx,g=rx,o=x t.log -c)

     (4)将test目录及其子目录所有文件添加可读权限

     chmod u+r,g+r,o+r -R text/ -c

13、chown命令 chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符

-c 显示更改的部分的信息  -R 处理指定目录及子目录  实例:

     (1)改变拥有者和群组 并显示改变信息

chown -c mail:mail log20.log

2)改变文件群组

     chown -c :mail t.log3)改变文件夹及子文件目录属主及属组为mail

     chown -cR mail: test/

还没整理完,还有很多命令,学到现在感觉进度略微过快.学习就是这么的痛苦,说好的坚持,就一定要坚持下去.
目前我对rm这个命令 和history 比较感兴趣.这两个命令在日后的工作中使用的会非常频繁的.
多学多练,注意身体!

转载请注明:linux运维部落 » Linux的一些基本命令

]]>
/81778/feed 0
硬链接和软链接的说明 /81967 /81967#respond Fri, 21 Jul 2017 13:03:59 +0000 /?p=81967 1、硬链接和软链接的区别

   (1)、原理上:

                  【1】 硬链接(hard link):

                                                   文件A是文件B的硬链接,则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。

 注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块(文件)只有在inode节点链接数减少为0的时候才会被系统回收。

  软链接(soft link):
  A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名(可以根据这个找到B的目录项)。A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
   (2)、使用限制上:
              【1】 硬链接:
                                a:不能对目录创建硬链接,原因有几种,最重要的是:文件系统不能存在链接环(目录创建时的”..”除外,这个系统可以识别出来),存在环的后果会导致例如文件遍历等操作的混乱(du,pwd等命令的运作原理就是基于文件硬链接,顺便一提,ls -l结果的第二列也是文件的硬链接数,即inode节点的链接数)
                                b:不能对不同的文件系统创建硬链接,即两个文件名要在相同的文件系统下。
                                c:不能对不存在的文件创建硬链接,由原理即可知原因。
             【2】 软链接:
                               a.可以对目录创建软链接,遍历操作会忽略目录的软链接。
                               b:可以跨文件系统
                               c:可以对不存在的文件创建软链接,因为放的只是一个字符串,至于这个字符串是不是对于一个实际的文件,就是另外一回事了
   (3)、命令:
                     硬链接:ln 源文件名 链接名

                     软链接:ln -s 源文件名 链接名

2、硬链接和软链接的特点:

       【1】硬链接:

                        

       【2】软连接:

                          

3、  硬链接和软链接的作用
      【1】 硬链接:
                         硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。只删除一个连接并不影响节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。还有如果把链接名创建为一个以.开头的隐藏文件,还能很好的隐藏自己的隐私。
      【2】 软链接:
                         链接又称之为符号连接(Symbolic Link)。软链接文件类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

转载请注明:linux运维部落 » 硬链接和软链接的说明

]]>
/81967/feed 0
Bash的I/O重定向及管道 /81965 /81965#respond Fri, 21 Jul 2017 12:32:31 +0000 /?p=81965 每周更新的博客定时派送啦,本周与大家一起分享的是重定向和管道

首先了解一下

读入数据:Input

输出数据:Output

我们来看一下重定向: 

>  覆盖重定向


上面图中

> 文件名     创建空文件

touch 文件名 创建空文件

这两种方法都可以创建一个新的文件

>> 追加重定向


还有一些数字来表示输入输出

0    表示标准输入(键盘输入)
> 或1>       表示标准输出正确信息
2>           输出标准错误信息
> 2>&1 或&>  输出全部信息
2>&1  将错误输出转为正确输出
1>&2  将正确输出转为错误输出

为了防止误操作,通常会这么用

set -C 禁止用>覆盖,可以用>>追加

set +C 取消

set -C ,要覆盖需用>| 可覆盖


还有一个命令叫tr,可以和重定向,管道符一起用(举例就放下面管道部分吧!)

tr ‘a-z’ ‘A-Z’可将输入内容小写换成大写  Ctrl+删除可删除输入内容
<  输入重定向  tr ‘a-z’ ‘A-Z’ < .bashrc  文件内容大写
tr ‘abcd’ ‘efg’ 输入的d会转换成与c转换一样的g
tr -t ‘abcd’ ‘efg’ 输入的d不被转换  一一对应转换
tr -c 取字符集的补集
tr -s ” 多个连续重复的字符中取一个


tr的作用呢,就是可以替换和删除,我在这没有完整的介绍.想必接触过的人都会有所了解.

管道符

| 正确结果重定向给下一条命令

2>&1 | |&  全部结果重定向

写邮件

echo “test” | mail -s “test” fuxiaoyan

(往下拉,介绍的也有写邮件哦!)

接着看管道符:



上面的两个图呢是用不同的两种方法实现了同一种功能,截取了某行中的某一列,当然,还有必不可少的tr


最后,再来介绍一些实用的技能

邮件发送与接收




下一个是批量改名,以后工作中可能会用的多点


还有一个是tree,更能清晰的看明白文件结构

想要看明白,先开始当然得安装一下


可以用命令行安装,如上图所示,也可以在图形界面找到相应目录

然后建立目录

这行代码只是下图的一部分

文件结构是不是清晰了很多

该说最后一个技能了,往下拉往下拉

没有了,哈哈哈,学习永无止境,下次还有很多技能与大家分享!

转载请注明:linux运维部落 » Bash的I/O重定向及管道

]]>
/81965/feed 0
Linux 中cp 、rm和mv与inode之间的关系 /81992 /81992#respond Fri, 21 Jul 2017 12:14:06 +0000 /?p=81992 1.cp和inode

         当文件不存在时,分配一个新的inode号,创建新文件;

         当文件存在时,则inode号采用被覆盖之前的目标文件的inode号。

2.rm和inode

         链接数递减,减少链接数量,如果链接数为0释放inodeinode号码可以被重新使用);如果inode被释放,则数据块放到可用空间列表中删除目录中的目录项


3.mv和inode

          如果目标和源在相同的文件中,则会用新的文件名创建对应新的目录项,删除旧目录条对应的旧文件名,但不影响inode 号(除时间戳)或磁盘上数据的位置,数据不被移动。


        如果目标和源不在同一个文件中,mv相当于cprminode号会变化。



转载请注明:linux运维部落 » Linux 中cp 、rm和mv与inode之间的关系

]]>
/81992/feed 0
【26期】Linux第二周学习小总结 /81957 /81957#respond Fri, 21 Jul 2017 12:13:20 +0000 /?p=81957 关于用户组的一些小小的整理

    本周学习很多的知识,一些文件管理的技巧和命令,重定向和管道的实用技巧和拓展,最后则是到了我们的用户组的权限和管理,既然说到了管理,我们都知道在Linux中,老师讲的最多的一句话就是一切皆文件,既然是文件就会有用户去用,在里面进行各种的操作,比如增删改查啊,对文件的重新定义啊,那我们就学到了用户的权限问题,权限的学习必不可少的是一段我们对于用户组的艰难学习,初次接触的我还是很懵的,突然地就来了那么多命令,一个文件的查询能够用到各种的方式,学完之后,回过头来发现,一团乱麻摆在眼前,于是就是想整理出一些东西,方便以后的查阅和温习,也写出来,加深一些理解。

    首先我们要搞清楚我们在这部分修改和查找的几个文件夹都是什么,里面的又都有什么。

    1、/etc/passwd包含用户信息

    2、/etc/shadow包含passwd里面用户对应的加密信息
    3、/etc/group包含组信息
    4、/etc/gshadow包含group里面组对应加密信息
    这四个部分就是我们对于用户和用户组的一些存放的信息,既然有了passwd和group为什么有多余的去新建他们的shadow呢?是因为我们每个用户的登录信息,登陆之后的状态都存放在基本的passwd和group中,如果我们不建立这些他们的影子文件,每个人都能访问,那一些密码啊,具体的信息就容易泄露,如此,我们就有了shadow和gshadow,把一些加密的信息放在普通用户不能访问的地方,增强了系统的安全性。

    既然有了文件就到了查询文件,刚开始的时候我们基本都是使用的什么cat,nano,less…画风都是这样的

    

    感觉都很傻大笨的样子,不仅查找不方便,就连文件的的名字都要一个个的打出来,后来就有了我们的简要命令,我们的vi,虽然有点超纲,不过对于我们的新一代青少年,学点小编辑器的进入和退出还是很简单的。

   1、 vipw = vim /etc/passwd
   2、vipw -s = vim /etc/shadow
   3、 vigr = vim /etc/group
   4、 vigr -s = vim /etc/gshadow
    但是这种方式仍然是我们的一些编辑模式,对与查找某些单条的命令,感觉还是很难受的,这些问题对于开源的Linux来说不是问题,很快就进入了,一个叫getent的命令,简单无脑的操作,让我着迷不已,下面我列出了这些命令:

   1、  getenpasswd [username]查看用户的信息

   2、 getent shadow [username]户的加密的信息

   3、 getent group [groupname]:查看组的信息

   4、 getent gshadow [groupname]:查看组加密的信息

    这四条和上面的四条都一一相对,如果我们在加入username,就能准确的获得我们想要查询的信息,比如我们想要查询我们的sq用户

    

    这样就不用很长的一页去翻找,很直观的看出一些有用的信息,但是这些信息又是什么呢?请看下面的一些小列举

    getent passwd username:

    用户名:密码:UID:GID:描述位:家目录:默认的登录shell

    每段信息用:隔开方便我们的查阅

     getent shadow username

    用户名:密码:密码上次修改日期:密码最小存活期:密码最大存活期:密码过期后多少天提醒用户(在正确登录时):密码过期之后多少天帐户过期(在正确登录时):帐户过期时间(自1970-1-1到该天经过了多少天来表示):保留位

    既然查出来这么多东西,那我们改怎么修改呢?这就要说到了我们的chage命令了!

    chage -l username 显示帐户的密码信息
             -d 指定密码的上次修改时间(yyyy-mm-dd)
             -d 0 则强制用户下次登录时必须修改密码
             -E 指定账户的过期时间
             -I 密码过期之后多少天帐户过期
             -m 设置最小存活时间
             -M 设置最大存活时间
             -W 设置密码过期前的提醒时间

            

    当时我一看那么多命令的选项,就感觉头皮发麻,然而我们的程序师发了波福利,chage username :交互式修改用户的密码策略(就是直接修改里面的值,省去了查看选项),可以进入到我们的账户信息面直接修改:比如还是我们sq用户信息的更改:

    

    我们都能看到我划的这两项,下面的设置和上面的信息一一相对,,更改时甚至连格式都给了出来,我们就不必在大费周章的去记那些选项,虽然说可以man出来……

    这周的学习已经算是过去了,但是我们学到的知识,比上周的更有深度和难度,懵B的感觉从未走远,当感觉会走了一步之后,发现了我们的国家有9,634,057平方公里,但是不积跬步不无以至千里,这才刚刚开始的旅行,用我们的脚步去一步步丈量,努力!奋斗!此上与君共勉


    


转载请注明:linux运维部落 » 【26期】Linux第二周学习小总结

]]>
/81957/feed 0
第二周 /81945 /81945#respond Fri, 21 Jul 2017 05:56:04 +0000 /?p=81945

第二周

1. Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。

cp 复制文件和目录
语法格式:
cp [OPTION]… [-T] SOURCE DEST
cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…
选项:
-a: 归档文件与目录,并保留其属性。

[root@node1 ~]# cp -a /etc/issue ./

-i: 覆盖前提醒

[root@node1 ~]# cp -i /etc/fstab ./
cp: overwrite ‘./fstab’?

-r: 递归复制目录

[root@node1 ~]# cp -R /var/log ./

-d: 复制符号链接文件本身,而非其指向的源文件

[root@node1 ~]# cp -d /var/lock /tmp
[root@node1 ~]# ll /tmp/lock
lrwxrwxrwx. 1 root root 11 Jul 21 11:39 /tmp/lock -> ../run/lock

mv 移动(重命名)文件,移动目录
语法格式:
mv [OPTION]… [-T] SOURCE DEST
mv [OPTION]… SOURCE… DIRECTORY
mv [OPTION]… -t DIRECTORY SOURCE…
移动文件:

[root@node1 ~]# ls
a
[root@node1 ~]# mkdir test
[root@node1 ~]# ls
a  test
[root@node1 ~]# mv a test
[root@node1 ~]# ls test/
a

重命名文件:

[root@node1 ~]# touch b
[root@node1 ~]# ls
b  test
[root@node1 ~]# mv b c
[root@node1 ~]# ls
c  test

移动目录:

[root@node1 ~]# mkdir test{1,2}
[root@node1 ~]# ls
c  test1  test2
[root@node1 ~]# mv test1 test2
[root@node1 ~]# ls test2
test1

rm 删除文件和目录
语法格式:
rm [OPTION]… FILE…
-f: 强制,不提醒

[root@node1 ~]# ls
a  c  test2
[root@node1 ~]# rm a
rm: remove regular empty file ‘a’? y
[root@node1 ~]# rm -f c
[root@node1 ~]# ls
test2

-r: 删除目录

[root@node1 ~]# ls
test2
[root@node1 ~]# rm -r test2
rm: descend into directory ‘test2’? y
rm: remove directory ‘test2/test1’? y
rm: remove directory ‘test2’? y

2. bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。

bash通过状态返回值来输出命令执行结果成功与否,0表示成功,1~255表示失败。命令执行完成后,其状态返回值保存在bash的特殊变量$?中。可通过命令echo $?查看返回值。

命令执行成功,显示返回值示例:

[root@node1 ~]# cat /etc/issue
\S
Kernel \r on an \m

[root@node1 ~]# echo $?
0

命令执行失败,显示返回值示例:

[root@node1 ~]# catt /etc/issue
-bash: catt: command not found
[root@node1 ~]# echo $?
127

bash命令行展开,符号{},可承载一个以逗号分隔的路径列表,并能将其展开为多个路径。

[root@node1 ~]# ls
[root@node1 ~]# mkdir test{a,b}
[root@node1 ~]# ls
testa  testb  
使用命令展开符号{},同时创建2个目录,mkdir命令先创建testa目录,然后再创建testb目录。

3. 使用命令行展开功能来完成以下练习:

创建/tmp目录下的:ac,ad,bc,bd

[root@node1 ~]# mkdir -pv /tmp/{a,b}_{c,d}
mkdir: created directory ‘/tmp/a_c’
mkdir: created directory ‘/tmp/a_d’
mkdir: created directory ‘/tmp/b_c’
mkdir: created directory ‘/tmp/b_d’

创建/tmp/mylinux目录下的:

mylinux/

├── bin
├── boot
│   └── grub
├── dev
├── etc
│   ├── rc.d
│   │   └── init.d
│   └── sysconfig
│       └── network-scripts
├── lib
│   └── modules
├── lib64
├── proc
├── sbin
├── sys
├── tmp
├── usr
│   └── local
│       ├── bin
│       └── sbin
└── var
    ├── lock
    ├── log
    └── run

[root@node1 ~]# mkdir -vp /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}

mkdir: created directory ‘/tmp/mylinux’
mkdir: created directory ‘/tmp/mylinux/bin’
mkdir: created directory ‘/tmp/mylinux/boot’
mkdir: created directory ‘/tmp/mylinux/boot/grub’
mkdir: created directory ‘/tmp/mylinux/dev’
mkdir: created directory ‘/tmp/mylinux/etc’
mkdir: created directory ‘/tmp/mylinux/etc/rc.d’
mkdir: created directory ‘/tmp/mylinux/etc/rc.d/init.d’
mkdir: created directory ‘/tmp/mylinux/etc/sysconfig’
mkdir: created directory ‘/tmp/mylinux/etc/sysconfig/network-scripts’
mkdir: created directory ‘/tmp/mylinux/lib’
mkdir: created directory ‘/tmp/mylinux/lib/modules’
mkdir: created directory ‘/tmp/mylinux/lib64’
mkdir: created directory ‘/tmp/mylinux/proc’
mkdir: created directory ‘/tmp/mylinux/sbin’
mkdir: created directory ‘/tmp/mylinux/sys’
mkdir: created directory ‘/tmp/mylinux/tmp’
mkdir: created directory ‘/tmp/mylinux/usr’
mkdir: created directory ‘/tmp/mylinux/usr/local’
mkdir: created directory ‘/tmp/mylinux/usr/local/bin’
mkdir: created directory ‘/tmp/mylinux/usr/local/sbin’
mkdir: created directory ‘/tmp/mylinux/var’
mkdir: created directory ‘/tmp/mylinux/var/lock’
mkdir: created directory ‘/tmp/mylinux/var/log’
mkdir: created directory ‘/tmp/mylinux/var/run’

4. 文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。

文件的元数据包含文件的文件名,文件大小,文件类型,inode标识,硬链接次数,访问权限,上下文,访问时间,修改时间,更改时间等。可用stat命令查看文件的元数据信息。

[root@node1 ~]# stat /etc/fstab 
File: ‘/etc/fstab’
    Size: 465     Blocks: 8       IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 67108994    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:etc_t:s0
Access: 2017-07-21 10:51:49.727772230 +0800
Modify: 2017-07-12 20:53:27.931985854 +0800
Change: 2017-07-12 21:02:06.490956739 +0800
    Birth: -

可用touch命令修改文件的时间戳:
语法格式:
touch [OPTION]… FILE…
-a: 修改文件的访问时间

[root@node1 ~]# touch -a fstab 
[root@node1 ~]# stat fstab 
File: ‘fstab’
Size: 465           Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 135802950   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2017-07-21 13:37:01.480322173 +0800  <---- 访问时间改变
Modify: 2017-07-21 13:36:50.831322656 +0800
Change: 2017-07-21 13:37:01.480322173 +0800  改变文件的任何属性,更改时间也会改变
Birth: -

-m: 修改文件的修改时间

[root@node1 ~]# touch -m fstab 
[root@node1 ~]# stat fstab 
File: ‘fstab’
Size: 465           Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 135802950   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2017-07-21 13:42:13.170308020 +0800
Modify: 2017-07-21 13:42:20.796307674 +0800 <---- 修改时间改变
Change: 2017-07-21 13:42:20.796307674 +0800 改变文件的任何属性,更改时间也会改变
Birth: -

转载请注明:linux运维部落 » 第二周

]]>
/81945/feed 0
第二周liunx小总结 /81914 /81914#respond Thu, 20 Jul 2017 13:10:12 +0000 /?p=81914 第二周liunx小总结

1.“>” ;”>>”
   “>” 把STDOUT重定向到文件 
   “2>”把STDERR重定向到文件
   “&>” 把所有输出重定向到文件
* >文件内容会覆盖
    set -C: 禁止将内容覆盖已有文件,但可追加
   >| file:强制覆盖
   set +C: 允许覆盖
>> 原有内容基础上,追加内容
   “&>>”追加重定向
示例:
1.创建新文件,添加内容

2.“>”覆盖原有内容

3.“>>”追加内容

3.在两个文件夹浏览相同的文件把结果导入到另一个终端,只用了“>”,只导入过去了正确的信息,错误的留在本终端。


下面是正确错误信息全部导入到另一个终端

重要的就是&> 覆盖重定向,正确错误都包含

用set -C 取消覆盖原有内容

用>|可暂时覆盖

可以追加内容

set +C 取消覆盖,可以再覆盖

 2.tr 转换(默认)和删除
选项:
  -c –C –complement:取字符集的补集,反选
  -d –delete:删除所有属于第一字符集的字符,删除
  -s –squeeze-repeats:把连续重复的字符以单独一个字符表示
  -t –truncate-set1:将第一个字符集对应字符转化为第二字符集  对应的字符;一一对应转换
*[:alnum:]:字母和数字 [:alpha:]:字母 [:cntrl:]:控制(非打印

)字符 [:digit:]:数字 [:graph:]:图形字符 [:lower:]:小写字母 [:print:]:

可打印字符 [:punct:]:标点符号 [:space:]:空白字符 [:upper:]:大写字母 [:xdigit:]:十六进制字符

示例:
1.只保留字母

2.一一对应转换

3.删除字母

4.将文件中’0-9’替代成’a-j’

我一开始写这道题有个错误想法

就是先输出数字导入到文件中然后在转换

这样是不可以的

举个例子,我要吃冰箱里的西瓜,我肯定要先开冰箱才能拿到西瓜的。

因此我要先转换成功才可以导入到文件中

转载请注明:linux运维部落 » 第二周liunx小总结

]]>
/81914/feed 0
Linux用户、组管理和正则表达式的基础命令 /81918 /81918#respond Thu, 20 Jul 2017 12:40:37 +0000 /?p=81918 1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何权限

[root@localhost skel]# cp -r /etc/skel /home/tuser1
[root@localhost skel]# ls -al /home/tuser1
total 12
drwxr-xr-x. 3 root root  70 Jul 19 22:39 .
drwxr-xr-x. 9 root root 100 Jul 19 22:38 ..
-rw-r--r--. 1 root root  18 Jul 19 22:38 .bash_logout
-rw-r--r--. 1 root root 193 Jul 19 22:38 .bash_profile
-rw-r--r--. 1 root root 231 Jul 19 22:38 .bashrc
drwxr-xr-x. 2 root root  59 Jul 19 22:39 skel
[root@localhost ~]# chmod -R go= /home/tuser1
[root@localhost ~]# ls -la /home/tuser1
total 16
drwx------.  3 root root   70 Jul 19 22:39 .
drwxr-xr-x. 14 root root 4096 Jul 20 00:51 ..
-rw-------.  1 root root   18 Jul 19 22:38 .bash_logout
-rw-------.  1 root root  193 Jul 19 22:38 .bash_profile
-rw-------.  1 root root  231 Jul 19 22:38 .bashrc
drwx------.  2 root root   59 Jul 19 22:39 ske

2、编辑/etc/group文件,添加组Hadoop

[root@localhost skel]# nano /etc/group

  GNU nano 2.3.1              File: /etc/group                                  

entadmin:x:5002:test
test2:x:4003:
distro:x:2016:
mageia:x:1100:
admins:x:5003:slackware
mariadb:x:994:
magedu:x:5000:gentoo,fedora
fedora:x:4005:
hadoop:x:5004:

3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组为hadoop,其家目录为/home/hadoop 

[root@localhost ~]# nano /etc/passwd

  GNU nano 2.3.1             File: /etc/passwd                                  

test:x:4001:1000:shijl,hs,110,119:/var/tmp/gentoo:/bin/bash
fedors:x:4002:4002:Fedora Core:/home/fedors:/bin/tcsh
test2:x:4003:4003::/home/test2:/bin/bash
mageia:x:1100:1100::/home/linux:/bin/bash
slackware:x:2002:2016::/home/slackware:/bin/tcsh
mariadb:x:996:994::/home/mariadb:/sbin/nologin
gentoo:x:4004:1000::/users/gentoo:/bin/bash
fedora:x:4005:4005::/users/fedora:/bin/bash
hadoop:x:5004:5004::/home/hadoop:/bin/bash

4、复制/etc/skel目录为/home/hadoop,要求修改hadoop目录的属组和其它用户没有任何访问权限

[root@localhost ~]# cp -r /etc/skel /home/hadoop
[root@localhost ~]# chmod go= /home/hadoop
[root@localhost ~]# ls -dl /home/hadoop/
drwx------. 2 root root 59 Jul 19 23:16 /home/hadoop/

5、修改/home/hadoop目录及其内部所有文件的属主为hadoop,属组为hadoop

[root@localhost ~]# chown -R hadoop:hadoop /home/hadoop
[root@localhost ~]# ls -ld /home/hadoop/
drwx------. 2 hadoop hadoop 59 Jul 19 23:16 /home/hadoop/
[root@localhost ~]# ls -al /home/hadoop/
total 16
drwx------.  2 hadoop hadoop   59 Jul 19 23:16 .
drwxr-xr-x. 10 root   root   4096 Jul 19 23:16 ..
-rw-r--r--.  1 hadoop hadoop   18 Jul 19 23:16 .bash_logout
-rw-r--r--.  1 hadoop hadoop  193 Jul 19 23:16 .bash_profile
-rw-r--r--.  1 hadoop hadoop  231 Jul 19 23:16 .bashrc

6、显示/proc/meminfo文件中以大写或小写S开头的行,用两种方式

[root@localhost ~]# grep "^[sS]" /proc/meminfo 
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              6844 kB
Slab:              64964 kB
SReclaimable:      26088 kB
SUnreclaim:        38876 kB
[root@localhost ~]# grep -i "^s" /proc/meminfo 
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              6844 kB
Slab:              64964 kB
SReclaimable:      26088 kB
SUnreclaim:        38876 kB

7、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户

[root@localhost ~]# grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1
root
sync
shutdown
halt
test
fedors
test2
mageia
slackware
gentoo
fedora
hadoop

8、显示/etc/passwd文件中其默认shell为/bin/bash的用户

[root@localhost ~]# grep "/bin/bash$" /etc/passwd | cut -d: -f1
root
test
test2
mageia
gentoo
fedora
hadoop

9、找出/etc/passwd文件中的一位数或两位数

[root@localhost ~]# grep "\<[0-9]\{1,2\}\>" /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
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

10、显示/boot/grub2/grub.cfg中以至少一个空白字符开头的行

[root@localhost ~]# grep "^[[:space:]]\+" /boot/grub2/grub.cfg
  load_env
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
   set default="${saved_entry}"
  menuentry_id_option="--id"
  menuentry_id_option=""
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb

11、显示/etc/rc.d/rc.local文件中以#开头后面跟至少一个空白字符,而后又有至少一个非空白字符的行

[root@localhost ~]# grep "^#[[:space:]]\+[^[:space:]]\+" /etc/rc.d/rc.local 
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

12、打出netstat -tan命令执行结果中以“LISTEN“,后或跟空白字符结尾的行

[root@localhost ~]# netstat -tan | grep "LISTEN[[:space:]]*$" 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN  

13、添加用户bash,testbash,basher,nologin(此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息

[root@localhost ~]# useradd bash 
[root@localhost ~]# useradd testbash
[root@localhost ~]# useradd basher
[root@localhost ~]# useradd  -s /sbin/nologin nologin
[root@localhost ~]# grep "\(nologin\).*\1" /etc/passwd
nologin:x:5008:5008::/home/nologin:/sbin/nologin

转载请注明:linux运维部落 » Linux用户、组管理和正则表达式的基础命令

]]>
/81918/feed 0
硬链接与软链接 /81916 /81916#respond Thu, 20 Jul 2017 12:21:45 +0000 /?p=81916 硬连接:

         其本质就是:一个文件,多个名字。注意:目录是没有硬链接的。

ln filename linkname创建硬链接,注意源文件和链接文件位置顺序,硬链接不可以跨分区建。

在创建硬链接时会增加硬连接数,可以通过ls –l查看,如下图所示的,可看到硬链接数。


硬链接创建好,源文件和链接文件实际上是两个独立的文件,对任何一方进行删除都不会影响到另一方,但是修改其中一方,另外一方也会变:例如:

 

一:建立硬链接:(因为硬链接不能跨分区,所以我先拷贝了/etc/passwd/app下,然后创建了硬链接文件pwd。)在图中可以看到在刚拷贝过来passwd后,其硬链接数显示为1,建立硬链接后显示为2,所以创建硬链接实际上实在增加硬连接数,一个文件,不同名字而已。

 

二:然后对链接文件pwd进行修改:(这里用的是nanopwd进行的修改,下方有一些辅助按键说明,写完之后呢,按ctrl +X键进行保存退出,再按y键确定,最后回车结束。)

三:在源文件passwd里可以看到修改的数据:(因为内容较长,在这里我就截取了一部分,最主要是看文件的变化),修改链接文件源文件也会随着改变,当然,反过来也一样。这里就省略了。

 

四:把源文件删除后,可以看到链接文件依然存在,而且还可以被访问,硬链接数减少为1,所以,硬连接的文件都是独立存在的,删除任一方,另一方都不会改变,只是硬连接数的增加和减少。


对于硬链接数,举个例子:在/app下创建一个目录(目录是不能创建硬链接,但不代表没有硬链接数),/app/a/b,可以ls –l查看一下a的硬链接数为3,如下图所示,有三个inode(索引号)一样的三个文件,分别是,/app下的100663680 a/app/a下的当前目录100663680 . ;/app/a/b下的上一级目录100663680 .. 。这三个文件。(inode号是按照inode表自动生成的,)

 

 

 

软链接呢,也可以叫做快捷方式,因为链接文件只是存了源文件的一个路径,

ln –s filename linkname创建软链接,软链接可以跨分区建。

而且在创建软链接后,改变链接文件不会改变源文件,但若是改变了源文件,那么链接文件也会发生变化,因为在执行链接文件的时候,其实是顺着保存的源文件的路径去找的源文件然后执行的源文件。例如:

 

一:新建软链接,会看到和硬链接有所不同,硬链接都是文件,软链接是一个快捷方式,链接文件有颜色,但是硬连接数没有发生改变。

二:对软链接文件pwd进行编辑修改内容,

三: 可以看到,和硬链接一样,源文件也被改变:

四:删除链接文件对源文件没有影响,还是能查看内容,但是…..


五: 删除源文件后,链接文件无内容,证明了软链接存的只是路径,

 

在创建软链接时,出现l一些问题:以下是我在创建过程中出现的问题:

        

/app下有两个目录dir1dir2,在dir1下有一个目录文件issuedir2下有一个目录sub,想在/app/dir2/sub下产生issue的链接:如下图所示:

 

一:其中(-p)是你多级创建目录,tree可以直观的显示出结构,但此时可以看到,创建的链接文件是红色的,也就是错误的做法,因为sub是个空目录,多在sub后加了个“/”,指到了它的下一级,

 

二:这种情况下才是正确的:相当于在sub下新建了一个test的目录用于存放链接/app/dir1/issue.

 

 

三:还有这种,相当于在在sub下建了一个和/app/dir1/issue一样的名字作为它的链接。

 

四:还有一种方法,因为要做dir2/sub下建立软链接,所以就先进到sub下,用 “.” 表示当前路径,让源文件使用绝对路径有一定的弊端:把issuedir1下挪走,软链接就会发生变化:

执行了mv后,issue的路径发生了变化,从之前的/app/dir1/issue,调到了/app/dir2下,

因此软链接失效了,

五:相对于app建的;把dir2/sub/issue挪到当前目录也就是/app下,就可以用了。

 

综上所述呢,在建立软链接时,要看一下在哪一级创建的,所在目录不同,创建时的路径也不同,

转载请注明:linux运维部落 » 硬链接与软链接

]]>
/81916/feed 0