一、预备知识

1、shell的作用

 

2、常识

(1)Tab键自动补全
   使用Terminal时,输入命令的前几个字母,敲tab会自动补全命令或文件名、目录等。
   好处:操作速度更快;不容易出错;
(2)清屏命令
  Ctrl + L 或 输入命令clear 
(3)命令历史:
 执行:history     
清除历史:history -c
        技巧1:!num  命令直接打开历史命令,num为history查看的序列
        技巧2:!XX     命令查看历史命令中最后一次以xx结尾的命令
    技巧3:Ctrl + R ,然后输入历史命令的一部分,能快速搜索想要找的历史操作全名
 
(4)命令别名:
  使用频率高的复杂命令,可以设置简短的调用名称,存放位置: ~/.bashrc
    alias  别名=‘实际执行命令’         设置别名
    unalias  别名                          取消别名
    alias     [别名]                        查看系统中的别名                    
  注意:别名,重启后消失,若经常使用,可以保存到bashrc文件中
  
(5)输出重定向
  1>相当于>正确重定向
  2>错误重定向(将错误信息重定向到指定文件中)
 
  将正确和错误的结果都重定向到文件中的方法:
         命令  1>   文件  2>&1  
         命令  1>>   文件  2>&1  
  解释:错误的信息也会通过通道1进入文件中。
 
  管道操作符号“|”
练习示例:
[root@Salve scripts]# free -m | grep Mem
Mem: [root@Salve scripts]# free -m | grep -i mem
Mem: [root@Salve scripts]# free -m | grep -i mem | awk 'print $4'
awk: print $
awk:^ syntax error [root@Salve scripts]# free -m | grep -i mem | awk '{print $4}' [root@Salve scripts]# free -m | grep -i mem | awk '{print $2,$3,$4}' [root@Salve scripts]# free -m | grep -i mem | awk '{print $2"\n",$3,$4}' [root@Salve scripts]# free -m | grep -i mem | awk '{print $2"\n",$3"\n",$4"\n"}' [root@Salve scripts]# free -m | grep -i mem | awk '{print "total:"$2"\n","used:"$3"\n","free:"$4"\n"}'
total:
used:
free:

(6)Linux系统的启动级别

  从0 到 6 共7个,比较重要的是0、3、5、6。

  说明:

    init 0 关机
    init 3 字符模式模式(网络功能齐全)
    init 5 图形界面
    init 6 重启
  注:可在终端输入init x进入到对应的状态,如重启:# init 6
 

二、认识权限和用户管理

1、关于权限

权限类型:
    1、r 读
    2、w 写
    3、x 可执行
 
Linux用户
    1、所有者(u)
    2、所属组(g) (所有者及所有者所在组的全部用户)
    3、其他用户(o)(其他组的所有用户(包括文件所有者))
    4、所有用户(a)
 
文件权限解读

 -rw-r--r--. 1 root root 44184 5月 22 00:28 install.log
  -        rw-        r--         r--                root    root     44184             insall.log
  文件类型 所有者权限  所属组权限  其他用户权限            所有者  用户所在的组  文件大小  创建时间    文件名
[root@Salve ~]# ll
总用量
-rw-------. root root 5月 : anaconda-ks.cfg
-rw-r--r--. root root 5月 : install.log
[root@Salve ~]# head - /etc/passwd
root:x:::root:/root:/bin/bash
[root@Salve ~]# head - /etc/group
root:x::
[root@Salve ~]# cat /etc/group
root:x::
bin:x::bin,daemon

2、用户与权限

2.1、用户管理

(1)、用户查看

 id  username

(2)、用户添加

 useradd  username

  创建用户,同时会产生新的用户组,并且用户属于该组

(3)、用户删除

userdel  -r  username 

2.2、用户组

用户与组的关系:
(1)、把用户加入组
[root@Salve ~]# id test2
uid=(test2) gid=(test2) 组=(test2)
[root@Salve ~]# gpasswd -a test2 root #把用户test2加入到root组
Adding user test2 to group root
[root@Salve ~]# id test2
uid=(test2) gid=(test2) 组=(test2),(root) #test2同时属于两个组
    同时属于两个组后,两个组的权限都具备,即两个组权限之和
 
(2)、把组中用户删除
[root@Salve ~]# gpasswd -d test2 root
Removing user test2 from group root

3、权限分配

    第一、二种修改用户对文件的权限

3.1、chmod权限分配

3.1.1、字母权限分配

         chmod  u+x file
         chmod   u-x file
    (对用户单独设置权限用此方式。)

3.1.2、数字权限

        chmod 755  file
数字对应权限如下:
    r        4
    w       2
    x        1
755        rwx r-x r-x
754        rwx r-x r--
默认644
(当所有用户的权限都要修改时用词方法)
    缺点:不能对用户的细化权限分配
 

3.2、acl权限分配

适用于对权限的细化需求,比如要求一些用户对某个文件file的权限如下:
  1、root file rw-
  2、root file r--
  3、other file r--
  4、user1 file rw
  5、user2 file rx
  6、user3 file wx    (不能查看,但是能写入)
  7、user4 file rwx  (rwx只是对内容有权限,无法删除)
 
acl权限分配:
(1)、setfacl设置文件权限 
setfacl -m u:user1:rw file01.txt
setfacl -m u:user2:rx file01.txt
(2)、getfacl查看文件权限
getfacl file01.txt  
(3)、删除文件权限
    setfacl -x user:user4 file01.txt
(4)、清空文件权限
    setfacl -b file01.txt           擦除对文件所有的权限(恢复文件的原始状态权限:644)
 
(5)、创建和删除文件权限:
#需要对目录设置acl权限即可
 setfacl -m u:user4:rwx mnt/
注意:
dr-xr-xr-x.   2 root root  4096 5月  24 14:19 mnt
切换到目录的一瞬间需要目录的x权限,否则不能切换目录。
 

(6)、如何对目录及子目录和文件设置acl权限

setfacl -m u:user4:rwx -R /mnt/                R参数代表递归
 
(7)、目录中后期添加的子目录和文件如何继承父目录的权限
方法一: setfacl -m u:user4:rwx -R /mnt/     繁琐                       (应用实例:网站文件管理)
方法二:setfacl -m d:u:user4:rwx -R /mnt/         d代表default权限,会继承默认权限
 
用户对程序、命令的权限

3.3、sudo权限设置

设置用户对命令的执行权限-visodo:

(1)、设置:
# visudo
user4 localhost=/usr/sbin/useradd,/usr/sbin/userdel
 
(2)、使用有密码的sudo授权命令
$ sudo /usr/sbin/useradd user5
$ sudo /usr/sbin/userdel -r user5
 
(3)、使用无密码的sudo授权命令  (使用情境:在脚本里输入命令)
$ sudo /usr/sbin/useradd user6
$ sudo /usr/sbin/userdel -r user6
设置形式: 
user5 ALL=NOPASSWD: /usr/sbin/useradd,/usr/sbin/userdel
sudo  ALL=NOPASSWD: /usr/sbin/userdel -r user4

三、Shell文件权限和脚本执行

1、Shell脚本简介

    (1)、用途:完成特定的、较复杂的系统管理任务
    (2)、格式:集中保存多条Linux命令,普通文本文件
    (3)、执行方式:按照预设的顺序执行解释执行

2、编写可执行的Shell脚本

   (1)、 建立包含执行语句的脚本文件
   (2)、 #脚本文件中包含的内容
            运行环境设置:#!/bin/bash
            注释信息:以#开始的说明性文字
            可执行的Linux命令行
    (3)、为脚本文件添加可执行权限

3、执行Shell脚本的方式:

    (1)、bash test.sh          #不需要写解析器,并且不需要给脚本设置执行权限
    (2)、./test.sh                #需要写解析器,需要给脚本设置执行权限

4、Shell脚本例子:

(1)简单例子

#!/bin/bash
#tesh.sh echo 'disk space:'
echo
df -Th
echo
echo 'free space:'
free -m
echo
echo 'users:'
for i in'ls /home'
do
  id -u $i
done
运行Shell脚本:
    直接执行具有x权限的脚本文件:例如:./test.sh
    使用指定的解释器程序执行脚本内容:例如:bash test.sh 、sh test.sh

(2)实例练习:

    每周五17:30清理FTP服务器的公共共享目录
        检查/var/ftp/pub/目录,将其所有子目录及文件的详细列表、当时的时间信息追加保存到/var/log/pubdir.log
文件中,然后清空该目录
yum -y install vsftpd*
#!/bin/bash
#ftp目录统计 date >>/var/log/pubdir.log ls -lhR /var/ftp/pub >>/var/log/pubdir.log rm -rf /var/ftp/pub

命令执行通过后即可添加到任务计划中:

crontab -e   
查看任务计划:
crontab -l
 
 
 

Shell文件权限和脚本执行的更多相关文章

  1. linux笔记:shell基础-概述和脚本执行方式

    什么是shell: linux使用的默认shell是Bash: shell脚本的后缀名为.sh,shell脚本的第一行#!/bin/bash 不是注释,而是标识这是一个shell脚本,因为linux并 ...

  2. Shell文件权限-1

  3. CentOS文件权限管理

    目录 文件属性 chown更改所有者 chgrp更改所属组 文件权限rwx chmod修改权限 默认权限umask 权限判定的顺序 特殊权限SUID,SGID,sticky 隐藏权限chattr,ls ...

  4. Linux shell编程02 shell程序的执行 及文件权限

    第一个shell脚本 1.       shell编程的方式 交互式shell编程 非交互式shell编程:执行的语句存放到一个文件 shell脚本:可以任意文件名,建议扩展名为sh 2.       ...

  5. centos shell编程4【分发系统】 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要同步的文件 expect文件分发系统 expect自动发送密钥脚本 Linux脚本执行方式 第三十八节课

    centos shell编程4[分发系统] 服务器标准化  mkpasswd 生成密码的工具  expect讲解   expect传递参数   expect自动同步文件  expect指定host和要 ...

  6. windows下建立文件的换行符^M导致linux下的shell脚本执行错误的解决方式

    常常在windows下编辑的文件远程传送到linux下的时候每行末尾都会出现^M.这将导致shell脚本执行错误,主要是由于dos下的编辑器和linux下的编辑器对文件末行的回车符处理不一致导致. 主 ...

  7. 《Linux命令行与shell脚本编程大全》 第七章理解Linux文件权限

    Linux沿用了Unix文件权限的方法,允许用户和组根据每个文件和目录的安全性设置来访问文件. 用户权限通过创建用户时分配的用户ID(UID)来跟踪的.每个用户有唯一的ID,但是登录时用的不是UID, ...

  8. 第9章 Shell基础(1)_Shell简介和脚本执行方式

    1. Shell概述 1.1 Shell简介 (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至是编 ...

  9. shell基础之脚本执行,命令别名以及快捷键等

    脚本执行方式 比如我们在/root/下编写了一个脚本,名字为hello.sh.那么怎么调用执行它呢?有两种办法: (1)直接通过bash,如下: bash  hello.sh 注:采用bash执行脚本 ...

随机推荐

  1. Linux 下.desktop 桌面程序图标文件编写方式

    [Desktop Entry] //每个desktop文件都以这个标签开始,说明这是一个Desktop Entry文件 Version = 1.0 //标明Desktop Entry的版本(可选) N ...

  2. Postgresql扩展及UUID

    切换数据库 \connect $DBNAME 查看Postgresql的可用扩展 SELECT * FROM pg_available_extensions; 安装所需扩展 CREATE EXTENS ...

  3. execve(file, argv, env)参数argv获取字符串个数

    /* Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. This file is part of the GNU ...

  4. 报表软件FineReport如何连接SAP HANA

    1. 环境搭建 1.1 环境准备 首先确认HANA Studio的环境是否允许工程进行NewFile的操作,不行的话要考虑更新Studio的版本. HANAStudio需要依赖Java jdk1.6或 ...

  5. 用javascript插入样式

    一.用javascript插入<style>样式 有时候我们需要利用js来动态生成页面上style标签中的css代码,方法很直接,就是直接创建一个style元素,然后设置style元素里面 ...

  6. DNS查找域名的过程

    当我们在浏览器输入一个url地址时,需要获取到这个url的域名,本篇文章主要介绍了关于DNS查找解析域名的过程的一些东西. 关于DNS 不清楚DNS的小伙伴可以点这里:关于域名系统DNS解析IP地址的 ...

  7. Spring---BeanFactory

    Spring---BeanFactory   BeanFactroy是一个Spring容器,用于创建,配置,管理bean,bean之间的依赖关系也有BeanFactory负责维护: BeanFacto ...

  8. Session跟SessionFactory的线程安全与非安全

    SessionFactory负责创建session,SessionFactory是线程安全的,多个并发线程可以同时访问一个 SessionFactory 并从中获取Session实例. (Sessio ...

  9. python高级之多线程

    python高级之多线程 本节内容 线程与进程定义及区别 python全局解释器锁 线程的定义及使用 互斥锁 线程死锁和递归锁 条件变量同步(Condition) 同步条件(Event) 信号量 队列 ...

  10. LeetCode:Subsets I II

    求集合的所有子集问题 LeetCode:Subsets Given a set of distinct integers, S, return all possible subsets. Note: ...