linux-shell脚本基础-2

1,用户组

添加用户

useradd
    -u   UID
    -o
    -g  指定 GID或组名
    -c   注释信息
    -d  家目录
    -s  shell
    -G  附加组
    -r  系统用户
    -m  家目录,系统用户
    -M  不创建家目录,非系统用户
      newusers file : 批量创建用户,需要事先准备好跟passwd格式一样的文件
      chpasswd : 批量修改用户口令,文件格式:用户名:口令

    passwd
             -l : 锁定指定的用户
            -u : 解锁指定的用户
            -e :强制用户下次登录时修改密码   

 usermod
    -u UID
    -g  GID
    -G  新附加组   -a
    -d  HOME
    -l  新家目录
    -U   解锁
    -L   锁定
    -e   YYYY-MM-DD: 指明用户账号过期日期
    --f INACTIVE: 设定非活动期限
     -d DIR : 修改家目录
     -m : 配合-d,修改并且移动数据到新的家目录
    userdel
        -r   删除用户家目录

 id [OPTION]... [USER]
 -n: 显示名称,需配合ugG使用
 -G: 显示用户所属的组的ID
 -u UID
 -g GID

切换用户方式
    su  :非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
    su  -    :登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换

  change  修改密码策略
  -d LAST_DAY
  -E --expiredate EXPIRE_DATE
  -I --inactive INACTIVE
  -m --mindays MIN_DAYS
  -M --maxdays MAX_DAYS
  -W --warndays WARN_DAYS

 chage -d 0 tom 下一次登录强制重设密码
 chage -m 0 –M 42 –W 14 –I 7 tom
 chage -E 2016-09-10 tom

  groupadd
  -g  GID
  -r   系统组

   groupmod   [option]    GROUP
            -n group_name : 修改组名
            -g GID : 修改GID  

  修改文件属性
  chown    -R     递归

  umask
  可以用来保留在创建文件权限
  新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1
  新建目录的默认权限: 777-umask
  非特权用户umask是 002
  root的umask 是 022

   对于文件的权限:
    r : 查看
    w : 修改
    x : 运行

    对于目录的权限:
    r : 查看目录内文件列表
    w : 创建和删除文件(需要x权限)
    x : cd进目录

  特殊权限
  SUID
  SGID
  默认情况下,用户创建文件时,其属组为此用户所属的主组
  一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组

  Sticky 位
  具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
  在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
  SUID: user,占据属主的执行权限位
  s:属主拥有x权限
  S:属主没有x权限
  SGID: group,占据属组的执行权限位
  s: group拥有x权限
  S:group没有x权限
  Sticky: other,占据other的执行权限位
  t:other拥有x权限
  T:other没有x权限

  文件特殊属性

  chattr +i 不能删除,改名,更改
  chattr +a 只能追加内容
  lsattr 显示特定属性

 acl 访问控制列表

 ACL:Access Control List,实现灵活的权限管理
 CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
 CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
 tune2fs –o acl /dev/sdb1
 mount –o acl /dev/sdb1 /mnt/test

 ACL生效顺序:所有者>(自定义用户>所属组,自定义组)>其他人
    括号外的用户不收mask影响
 mount -o acl /directory
 getfacl file |directory
 setfacl -m u:wang:rwx file|directory
 setfacl -Rm g:sales:rwX directory
 setfacl -M file.acl file|directory
 setfacl -m g:salesgroup:rw file| directory
 setfacl -m d:u:wang:rx directory
 setfacl -x u:wang file |directory
 setfacl -X file.acl directory

 通过ACL赋予目录默认x权限,目录内文件也不会继承x权限
 base ACL 不能删除
 setfacl -k dir 删除默认ACL权限
 setfacl –b file1清除所有ACL权限
 getfacl file1 | setfacl --set-file=- file2 复制file1的acl权限给file2
 mask只影响除所有者和other的之外的人和组的最大权限
 Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(EffectivePermission)
 用户或组的设置必须存在于mask权限设定范围内才会生效
  setfacl -mmask::rx file

  --set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以

 XFS文件系统默认支持ACL,其他低级的需要文件系统支持后,挂载时指定

2,脚本基础

变量命令

    1、不能使程序中的保留字:例如if, for
2、只能使用数字、字母及下划线,且不能以数字开头
3、见名知义
4、统一命名规则:驼峰命名法

  Shell中命名建议规则:
1、变量名大写
2、局部变量小写
3、函数名小写
4、用英文名字,并体现出实际作用

根据变量的生效范围等标准划分下面变量类型
局部变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,
包括当前shell的子shell进程均无效
环境变量:生效范围为当前shell进程及其子进程
本地变量:生效范围为当前shell进程中某代码片断,通常指函数
位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传
递给它的参数
特殊变量:$?, $0, $*, [email protected], $#,$$

     $$  shell 本身的pid当前进程号
     $!   shell 最后运行的后台processs pid

      set
       -e : 如果一个命令返回一个非0退出状态值(失败),就退出。?
?????? -n : 不需要执行脚本只是检查语法结构,返回所有的语法错误信息。??????
?      -u :  置换时把未设置的变量看作出错。????
??    ?-v :  当读入shell输入行时,把它们显示出来。?????
?      -x :  执行命令时,把命令和它们的参数显示出来

变量赋值:name=‘value’
可以使用引用value
(1) 可以是直接字串: name=“root"
(2) 变量引用: name="$USER"
(3) 命令引用: name=COMMAND
name=$(COMMAND)

  变量引用:${name} 或者 $name
" " 弱引用,其中的变量引用会被替换为变量值
' ' 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
  显示已定义的所有变量:set
  删除变量:unset name

只读变量:只能声明,但不能修改和删除
  声明只读变量:
readonly name
declare -r name
  查看只读变量:
   readonly -p

变量作用域

local
export   全局
新开子shell 运行脚本
source    脚本执行,在本sehll

命令行扩展

$() 或 ``

声明变量
readonly name
declare -r name
-i 整型
-x 环境变量

readonly -p

撤销变量
unset var
unset -f 函数名

位置变量

退出码
bash自定义退出状态码
exit [n]:自定义退出状态码
注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码

算术运算
只支持整数运算

let
expr
ab=expr $a + $b
$[ ]
$(( ))

bc支持小数
echo "5*7 .3" | bc

条件测试

条件测试

真 返回0
假 返回1

逻辑运算
与 -a &&
或 -o ||
非 !
a 使用 []
[ -a ]

&& 使用 [[ ]]
[[ && ]]
[ ] && [ ]
测试命令

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

1,使用-n -z 判断 变量是否为空
[ ] 需要在变量外侧加" " [[ ]] 不必

注意:EXPRESSION前后必须有空白字符

命令组合

( command;command ) 开启子shell
{ command ; command ; } 本shell下执行

bash的数值测试

-v VAR

变量VAR是否设置

数值测试
-gt 是否大于-ge 是否大于等于-eq 是否等于-ne 是否不等于-lt 是否小于-le 是否小于等于

shell 变量字符串
${parameter}
${#parameter} 字符长度
${parameter:offset} 从offset 之后开始提取子串到结尾
${parameter:offset:length} 从offset 之后开始提取长度为length的字串
${parameter#word} 从${parameter}开头开始删除最短匹配的word字符串
${parameter##word} 从${parameter}开头开始删除最长匹配的word字符串
${parameter%word} 从${parameter}结尾开始删除最短匹配的word字符串
${parameter%%word} 从${parameter}结尾开始删除最长匹配的word字符串
${parameter/pattern/string } string 代替第一个匹配的pattern
${parameter//pattern/string } 所有
字符长度
管道echo ${char} |wc -L
expre length "${char}"

特殊扩展变量

${parameter:-word} 如果parameter变量为空或未赋值,则返回word字符串并代替变量值
${parameter:=word} 如果parameter变量为空或未赋值 ,则设置为word并返回,位置变量与特殊变量不适用
${parameter:?word} 如果parameter变量为空或未赋值,word作为标准错误输出,否则输出变量值
${parameter:+word} 如果parameter变量为空或未赋值,什么都不做,否则word的值返回

数学运算

!/bin/bash

no1=4;
no2=5;
let result=no1+no2
echo $result
result=$[ no1 + no2 ]
result=$[ $no1 + 5 ]
也可以使用(()),但使用(())时,变量名之前需要加上$:

数组

$ ass_array=([index1]=val1 [index2]=val2)
使用独立的“索引-值”进行赋值:
$ ass_array[index1]=val1
$ ass_array‘index2]=val2
数组索引
$ echo ${!array_var[*]}
$ echo ${!array_var[@]
$ echo ${!fruits_value[*]}

 while   read  n  ;do
   echo  " name  is   $n  "
   done   <   name                  #文本文件每行

   cat student_name.txt | while read name  ;   do
    useradd $name
    echo $name is created
    done 

find

find /var -not ( -user root -o -user lp -o -user gdm )

与xargs 配合

压缩

compress .Z
gzip .gz
bzip2 .bz2
xz .xz
zip .
tar
cpio

-j: bzip2, -z: gzip, -J: xz

软硬符号链接
df -i --print-type

符号链接和硬链接的区别?
符号链接:
软链接有自己的文件属性及权限等;
可对不存在的文件或目录创建软链接;
软链接可交叉文件系统;
软链接可对文件或目录创建;
创建软链接时,链接计数 i_nlink 不会增加;
删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

硬链接:
文件有相同的 inode 及 data block;
只能对已存在的文件进行创建;
不能交叉文件系统进行硬链接的创建;
不能对目录进行创建,只可对文件创建;
删除一个硬链接文件并不影响其他有相同 inode 号的文件。

每个文件存在两个计数器:i_count 与 i_nlink,即引用计数与硬链接计数。结构体 inode 中的 i_count 用于跟踪文件被访问的数量,而 i_nlink 则是上述使用 ls -l 等命令查看到的文件硬链接数。或者说 i_count 跟踪文件在内存中的情况,而 i_nlink 则是磁盘计数器。当文件被删除时,则 i_nlink 先被设置成 0。文件的这两个计数器使得 Linux 系统升级或程序更新变的容易。系统或程序可在不关闭的情况下(即文件 i_count 不为 0),将新文件以同样的文件名进行替换,新文件有自己的 inode 及 data block,旧文件会在相关进程关闭后被完整的删除

创建软链接是以相对路径创建时,该链接会在当前目录下寻找相同文件名的文件,如果无法找到,该链接失效。链接文件有自己的节点数据。

原文地址:https://www.cnblogs.com/g2thend/p/11621017.html

时间: 2024-10-18 12:30:35

linux-shell脚本基础-2的相关文章

Linux shell脚本基础学习详细介绍(完整版)一

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Linux 脚本编写基础◆1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执

Linux shell脚本基础学习详细介绍(完整版)二

详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续. Linux shell脚本基础已经被分成好几个部分了,这里对控制流程的内容也就马上讲完了,这是最后一部分关于here document,这里举例稍微有点复杂,我们慢慢来分析这个复杂Linux shell脚本. 6. Here documents 当要将几行文字传递给一个命令时,here docu

linux——Shell 脚本基础篇(变量类型,变量操作,定义,运算与逻辑关系)

Shell 脚本基础 1.变量 什么是变量 #a=1 # echo $a 1 变量:可以变化的量 1.2变量名称注意事项 变量名不能以数字开头 不能与系统中已有的环境变量重名,尽量不要全部使用大写,尽量不要使用"_"下划线开头 最好做到见名知意 不能使用程序中的保留字,列如if,for等 1.3变量类型 字符型 数值型 整型浮点型 布尔型 条件是和否 #$echo $a 引用 abc 撤销 unset +(变量名)a 1.4变量操作 * 设置变量 * 引用变量 * 撤销变量 单引号和双

Linux shell脚本-基础学习笔记

Linux脚本能力不是太强,最近再补习下,毕竟linux shell在日常工作中还是很普遍的, 用起来更方便.省时省力. 以下是学习笔记,偏理论,后面有几个例子,供参考. shell脚本组成元素系统命令.文本处理工具(grep\sed等).变量.条件判断.循环结构和函数 -------------------------------------------- 三剑客:grep,sed,awk,还有wc,sort,head等 ------------------------------------

《Linux Shell脚本攻略》 笔记 第一章:Shell起步基础

<Linux Shell脚本攻略> 笔记 第一章:Shell起步基础 1.变量:在bash中,每一个变量的值都是字符串.无论你给变量赋值时,有没有使用引号,值都会以字符串的形式存储. 2.var=value; //赋值操作 var = value: //相等操作 3.获取字符串的长度 [[email protected] ~]$ var=yang [[email protected] ~]$ length=${#var} [[email protected] ~]$ echo $length

Linux运维之道之ENGINEER1.4(shell脚本基础)

ENGINEER1.4 SHELL脚本基础 认识shell环境 bash shell的使用方式 交互式: --人工干预,智能化程度高 --逐条解释执行,效率低 非交互式: --需要提前设计,智能化难度大: --批量执行,效率高: --方便在后台及悄悄地执行: 什么是shell脚本:提前设计可执行语句,用来完成特定任务的文件 --解释型程序 --顺序,批量执行 规范shell脚本的一般组成: #!环境声明 #注释文本 可执行代码 ----------------------------------

Linux Shell脚本编程学习笔记和实战

http://www.1987.name/141.html shell基础 终端打印.算术运算.常用变量 Linux下搜索指定目录下特定字符串并高亮显示匹配关键词 从键盘或文件中获取标准输入 [read命令] 文件的描述符和重定向 数组.关联数组和别名使用 函数的定义.执行.传参和递归函数 条件测试操作与流程控制语句 获取时间日期格式和延时 [date.sleep命令] 内部字段分隔符IFS和脚本的调试DEBUG 显示.读取或拼接文件内容 [cat命令] 文件查找与打印文件列表 [find命令]

老李分享:《Linux Shell脚本攻略》 要点(一)

老李分享:<Linux Shell脚本攻略> 要点(一) 第一章:Shell起步基础 1.变量:在bash中,每一个变量的值都是字符串.无论你给变量赋值时,有没有使用引号,值都会以字符串的形式存储. 2.var=value; //赋值操作 var = value: //相等操作 3.获取字符串的长度 [[email protected] ~]$ var=yang [[email protected] ~]$ length=${#var} [[email protected] ~]$ echo

Linux Shell脚本例子

Shell脚本是我们运维人员管理的最基础知识,下面就是我在学习过程中的一些小例子(比起大牛来说).写这篇博客的目的,是为了记录自己学习脚本的历程,也是为了能和读者一起探讨学习. # Example1: 自动创建脚本的模板 脚本名:creat_scripts.sh  # 功能描述:creat_scripts.sh SCRIPTS_NAME 如果创建的脚本名文件不存在,则创建成脚本文件; # 如果对应的文件存在,且为脚本文件,则打开文件到最后一行: # 如果对应的文件存在,但不是脚本文件,则提示退出

Linux shell入门基础(六)

六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行的角色是不一样的: #shell scripts(UNIX Like系统的原则有一条:程序越短越好) #bash csh tcsh ksh #which startx(查看文件的路径) /usr/X11R6/bin/startx #vi `which startx` #!/bin/sh …… #vi