您的位置:新葡亰496net > 电脑系统 > linux用户组和权限管理,Linux系统基础

linux用户组和权限管理,Linux系统基础

发布时间:2019-08-17 18:17编辑:电脑系统浏览(98)

    一、Linux用户管理

    Linux系统基础(1篇),linux系统基础1篇

    终端: 用户与主机交互,必然用到的设备; 物理终端:直接接入本机的显示器和键盘设备;/dev/console 虚拟终端:附加在物理终端之上的以软件方式虚拟实现的终端,CentOS 6默认启动6个虚拟终端 Ctrl Alt F#: [1,6] 图形终端:附加在物理终端之上的以软件方式虚拟实现的终端,但额外会提供桌面环境; 设备文件路径:/dev/tty# 模拟终端: 图形界面下打开的命令行接口,基于ssh协议或telnet协议等远程打开的界面 设备文件:/dev/pts/#    [0,oo) 查看当前的终端设备:tty 交互式接口:启动终端后,在终端设备附加一个交互式应用程序 GUI: X protocol, window manager, desktop Desktop: GNOME (C, gtk) KDE   (C , qt) XFCE  (轻量级桌面) CLI: shell程序: sh (bourn) csh  tcsh ksh (korn) bash (bourn again shell), GPL zsh  显示当前使用的shell: # echo ${SHELL} 显示当前系统使用的所有shell: # cat /etc/shells 命令提示符:prompt [[email protected] ~]# [[email protected] ~]:PS1 prompt: 管理员:# 普通用户:$ 命令: 输入命令,回车: 提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来; 表现为一个或多个进程; 在shell中可执行的命令有两类: 内建命令:由shell自带的,而且通过某命令形式提供; 外部命令:在当前系统的某文件系统路径下有对应的可执行程序文件; which,whereis 区别内部或外部命令: # type COMMAND 运行命令: 命令格式: COMMAND [OPTIONS...] [ARGUMENTS...] 选项:用于启用或关闭命令的某个或某些功能; 短选项:-c, 例如:-l, -h 多个短选项可命令使用,例如-l -h, 可写作-lh; 长选项:--word,例如:--long, --human-readable 参数:命令的作用对象 向命令提供数据; 注意: 1、多选项,以及多参数和命令之间都应该使用空白字符分隔 2、取消命令执行:Ctrl c 文件系统: C:Program filesoffice11wordword.exe /etc/sysconfig/network-scripts/ifcfg-eth0 文件有两类数据: 元数据:metadata 数据:data 1、文件名严格区分字符大小写;file1, File1, FILE1是不同的文件; 2、文件名可使用除/以外的任意字符,不建议使用特殊字符; /: 根目录,路径分隔符; 3、文件名长度最长不能超过255个字符; 4、所以.开头的文件,均为隐藏文件; 路径: 绝对路径:从根目录起始的路径; 相对路径:对当前位置起始的路径; 当前位置的表示方式: (1) ./: ./sysconfig/network-scripts (2) 省略上述符号: sysconfig/network-scripts ..:表示当前目录的上一级目录 当前目录:current directory, 也称作working directory; pwd: printing working directory LSB: Linux Standard Base 命令总结:ls, cd, type, tty, cat, which, whereis, pwd, echo 命令: (1) 文件系统相关: 目录管理 文件管理 文件查看 文件编辑 (2) 系统管理相关:Linux命令帮助的获取 外部命令:都有一个可执行程序,位于文件系统某目录下; which, whereis shell程序搜寻可执行程序文件的路径定义在PATH环境变量中; # echo $PATH 注意:自左至右 格式:COMMAND [OPTIONS...] [ARGUMENTS...] 内部命令: # help COMMAND 外部命令: (1) # COMMAND --help # COMMAND -h (2) 使用手册(manual) # man COMMAND (3) 信息页 # info COMMAND (4) 程序自身的帮助文档 README INSTALL ChangeLog (5) 程序官方文档 官方站点:Documentation (6) 发行版的官方文档 (7) Google 内部命令帮助: # help COMMAND hash命令: shell搜寻到的外部命令的路径结果会缓存至kv(key-value)存储中; history命令: 管理命令历史; 登录shell时,会读取命令历史文件中记录下的命令:~/.bash_history 登录进shell后新执行的命令只会记录在缓存中;这些命令会用户退出时“追加”至命令历史文件中; history: -a: 追加本次会话新执行的命令历史列表至历史文件中; -d: 删除历史中指定的命令; -c: 清空命令历史; 快捷操作: !#: 调用历史中第#条命令; !string:调用历史中最近一个以string开头的命令; !!: 上一条命令 外部命令帮助获取: (2) man COMMAND 手册页:/usr/share/man man1 ... man8 man1: 用户命令 man2: 系统调用 man3: C库调用 man4: 设备文件及特殊文件 man5: 配置文件格式 man6: 游戏 man7: 杂项 man8: 管理类的命令 注意:有些关键在不止一个章节中存在帮助手册; 要查看指定章节中的手册:man # COMMAND man命令的配置文件:/etc/man.config MANPATH /PATH/TO/SOMEWHERE: 指明新的手册文件搜索位置 # man -M /PATH/TO/SOMEWHERE COMMAND: 到指定位置下搜索COMMAND命令的手册页并显示之; 帮助手册中的段落说明: NAME SYNOPSIS DESCRIPTION OPTIONS EXAMPLES AUTHOR REPORTING BUGS SEE ALSO SYNOPSIS: []:可选内容 <>: 必选内容 a|b:二选一 ...: 同一内容可出现多次 man命令的操作方法: Space, ^V, ^f, ^F: 向文件尾翻屏; b, ^B: 向文件首部翻屏; d, ^D: 向文件尾部翻半屏; u, ^U: 向文件首部翻半屏; RETURN, ^N, e, ^E or j or ^J: 向文件尾部翻一行; y or ^Y or ^P or k or ^K:向文件首部翻一行; q: 退出; #:跳转至第#行; 1G: 回到文件首部 G:翻至文件尾部 文本搜索: /KEYWORD:  以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写; n: 下一个 N:上一个 ?KEYWORD: 以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写; n: 跟搜索命令同方向,下一个 N:跟搜索命令反方向,上一个 (3) info info COMMAND (4) 程序自身的帮助文档 /usr/share/doc/COMMAND-VERSION (5) 程序官方文档 (6) 发行版的官方文档 (7) Google (8) slideshare date: date [OPTION]... [ FORMAT]:显示 FORMAT: 格式符号 %D %F %T        date [MMDDhhmm[[CC]YY][.ss]]:设置        MM: 月分        DD:几号        hh: 小时        mm: 分钟        YY: 两位年份        CCYY: 四位年份        .ss: 秒钟    Linux的两种时钟:     系统时钟:由Linux内核通过CPU的工作频率进行的计时;     硬件时钟:     hwclock: 显示硬件时钟     -s, --hctosys     -w, --systohc     cal:日历 目录相关的命令: 当前目录或工作目录 主目录,家目录:HOME root: /root 普通用户:/home/USERNAME /home/tom ~:用户的主目录 cd:  cd 或 cd ~: 回当前用户的主目录 cd ~USERNAME: 切换至指定用户的主目录 cd -: 在上一个目录和当前目录之间来回切换 . .. 相关的环境变量: PWD:保存了当前目录路径; OLDPWD:上一次所在目录路径; pwd: 显示当前目录 ls: list 显示指定路径下的文件列表; ls [OPTION]... [DIR]... -a, --all: 显示所有文件,包括隐藏文件; -l: 长格式 -rw-r--r-- 1 root root 44800 Aug 14 14:32 install.log -rw-r--r--: 最左侧的第一位:文件类型 -, d, l, b, c, p, s 后面的9位:访问权限,perm 数字:文件被硬链接的次数; 左root: 文件的owner 右root: 文件的group 44800:文件的size Aug 14 14:32 : 文件的最近一次被修改的时间 install.log: 文件名 -h, --human-readable:单位换算 -d: 显示目录自身的相关属性;通常要与-l一起使用; -r, --reverse: 逆序显示 -R, --recursive: 递归 stat /PATH/TO/SOMEFILE:获取指定文件的元数据 文件查看命令:cat, tac cat [OPTION]... [FILE]... -E: 显示行结束符$ -n: 对显示出的每一行进行编号 文件内容类型查看命令:file file /PATH/TO/SOMEWHERE 回显命令:echo -n: 禁止自动添加换行符号; -e: 允许使用转义符; n: 换行 t: 制表符 echo "$VAR_NAME": 变量会替换,双引号表弱引用 echo '$VAR_NAME': 变量不会替换,强引用 which:显示命令对应的程序文件路径 which [OPTION] COMMAND --skip-alias:禁止显示别名 whatis: 使用mkwhatis命令可将当前系统上所有的帮助手册及与之对应的关键字创建为一个数据库; 系统管理类命令: 关机: halt, poweroff, shutdown, init 0 重启: reboot, shutdown, init 6 跟用户登录相关: who, whoami, wLinux的文件系统: 根文件系统(rootfs): root filesystem LSB, FHS: (FileSystem Heirache Standard) /etc, /usr, /var, /root, /home, /dev /boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录; /bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序; /sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序; /lib:基本共享库文件,以及内核模块文件(/lib/modules); /lib64:专用于x86_64系统上的辅助共享库文件存放位置; /etc:配置文件目录(纯文本文件); /home/USERNAME:普通用户家目录; /root:管理员的家目录; /media:便携式移动设备挂载点; cdrom usb /mnt:临时文件系统挂载点; /dev:设备文件及特殊文件存储位置; b: block device,随机访问 c: character device,线性访问 /opt:第三方应用程序的安装位置; /srv:系统上运行的服务用到的数据; /tmp:临时文件存储位置; /usr: universal shared, read-only data; bin: 保证系统拥有完整功能而提供的应用程序; sbin: lib: lib64: include: C程序的头文件(header files); share:结构化独立的数据,例如doc, man等; local:第三方应用程序的安装位置; bin, sbin, lib, lib64, etc, share /var: variable data files cache: 应用程序缓存数据目录; lib: 应用程序状态信息数据; local:专用于为/usr/local下的应用程序存储可变数据; lock: 锁文件 log: 日志目录及文件; opt: 专用于为/opt下的应用程序存储可变数据; run: 运行中的进程相关的数据;通常用于存储进程的pid文件; spool: 应用程序数据池; tmp: 保存系统两次重启之间产生的临时数据; /proc: 用于输出内核与进程信息相关的虚拟文件系统; /sys:用于输出当前系统上硬件设备相关信息的虚拟文件系统; /selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置; Linux上的应用程序的组成部分: 二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin 库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64 配置文件:/etc, /etc/DIRECTORY, /usr/local/etc 帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc Linux下的文件类型: - (f):普通文件; d: 目录文件; b: 块设备; c: 字符设备; l: 符号链接文件; p: 管道文件; s: 套接字文件;socket; 系统管理类命令: 关机: halt, poweroff, shutdown, init 0 重启: reboot, shutdown, init 6 跟用户登录相关: who, whoami, w 关机或重启: halt, poweroff reboot -f: 强制,不调用shutdown -p: 切断电源 shutdown: shutdown [OPTION]...  TIME [MESSAGE] -r: reboot -h: halt -c:cancel TIME:  now: 立刻 m: 相对时间表示法,从命令提交开始多久之后;例如 3; hh:mm: 绝对时间表示,指明具体时间; 用户登录信息查看命令: whoami: 显示当前登录有效用户; who: 系统当前所有的登录会话; w: 系统当前所有的登录会话及所做的操作;bash的基础特性(1): (1) 命令历史 history 环境变量: HISTSIZE:命令历史记录的条数; HISTFILE:~/.bash_history; HISTFILESIZE:命令历史文件记录历史的条数; history -d OFFSET -c history #: 显示历史中最近的#条命令; -a: 手动追加当前会话缓冲区的命令历史至历史文件中; 调用历史中的命令: !#: 重复执行第#条指令; !!:  !string 调用上一条命令的最后一个参数: !$:  ESC, . Alt . 控制命令历史的记录方式: 环境变量:HISTCONTROL ignoredups:忽略重复的命令;连续且相同方为“重复”; ignorespace:忽略所有以空白开头的命令; ignoreboth:ignoredups, ignorespace; 修改环境变量值的方式:export 变量名="值" 变量赋值:把赋值符号后面的数据存储于变量名指向内存空间; (2) 命令补全 bash执行命令: 内部命令: 外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到即为要执行的命令; 直接补全:Tab,用户给定的字符串只有一条惟一对应的命令; 以用户给定的字符串为开头对应的命令不惟一,则再次Tab会给出列表; (3) 路径补全 把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名; 如果惟一:则直接补全; 否则:再次Tab,给出列表; (4) 命令行展开 ~: 展开为用户的主目录 ~USERNAME:展开为指定用户的主目录 {}:可承载一个以逗号分隔的列表,并将其展开为多个路径 /tmp/{a,b} = /tmp/a, /tmp/b /tmp/{tom,jerry}/hi = /tmp/tom/hi, /tmp/jerry/hi (5) 命令的执行结果状态 成功 失败 bash使用特殊变量$?保存最近一条命令的执行状态结果: 0:成功 1-255:失败 程序执行有两类结果: 程序的返回值; 程序的执行状态结果;目录管理类命令: cd, pwd, ls mkdir, rmdir, tree mkdir [options] /path/to/somewhere -p: 存在于不报错,且可自动创建所需的各目录; -v: 显示详细信息 -m MODE: 创建目录时直接指定权限; tree:  -d: 只显示目录 -L level:指定显示的层级数目 -P pattern: 只显示由指定pattern匹配到的路径; rmdir:删除空目录 rmdir [OPTION]... DIRECTORY... -v: 显示过程;文本文件查看类命令: cat, tac more, less, tail, head more more [OPTIONS...] FILE... -d: 显示翻页及退出提示 less less [OPTIONS...] FILE... head head [OPTION]... [FILE]... -c #: 指定获取前#字节 -n #: 指定获取前#行 -#: tail  tail [OPTION]... [FILE]... -c #: 指定获取后#字节 -n #: 指定获取后#行 -#: -f: 跟踪显示文件新追加的内容;文件的时间戳管理工具: touch 文件:metadata, data 查看文件状态:stat 三个时间戳: access time:访问时间,简写为atime,读取文件内容 modify time: 修改时间, mtime,改变文件内容(数据) change time: 改变时间, ctime,元数据发生改变 touch命令: touch [OPTION]... FILE... -a: only atime -m: only mtime -t STAMP: [[CC]YY]MMDDhhmm[.ss] -c: 如果文件不存,则不予创建 文件系统: boot, bin, sbin, lib, lib64, dev, home, root, mnt, media, etc, proc, sys usr var bash的基础特性: 命令补全 路径补全 命令历史 命令行展开: ~, {} 命令的状态结果 成功:0 失败:1-255 目录管理:mkdir, rmdir 文件查看:more, less, tail, head 时间戳管理:touch -a, -m, -t -c文件管理: cp, mv, rm 复制命令:cp cp [OPTION]... [-T] SOURCE DEST        cp [OPTION]... SOURCE... DIRECTORY        cp [OPTION]... -t DIRECTORY SOURCE...        cp SRC DEST        SRC是文件:        如果目标不存在:新建DEST,并将SRC中内容填充至DEST中;        如果目录存在:        如果DEST是文件:将SRC中的内容覆盖至DEST中;        此时建议为cp命令使用-i选项;        如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中;        cp SRC... DEST        SRC...:多个文件        DEST必须存在,且为目录,其它情形均会出错;        cp SRC DEST        SRC是目录:        此时使用选项:-r        如果DEST不存在:则创建指定目录,复制SRC目录中所有文件至DEST中;        如果DEST存在:        如果DEST是文件:报错        如果DEST是目录:        常用选项:        -i:交互式        -r, -R: 递归复制目录及内部的所有内容;        -a: 归档,相当于-dR --preserv=all        -d:--no-dereference --preserv=links        --preserv[=ATTR_LIST]        mode: 权限        ownership: 属主属组        timestamp:         links        xattr        context        all        -p: --preserv=mode,ownership,timestamp        -v: --verbose        -f: --force    mv: move,移动文件       mv [OPTION]... [-T] SOURCE DEST       mv [OPTION]... SOURCE... DIRECTORY       mv [OPTION]... -t DIRECTORY SOURCE...              常用选项:        -i: 交互式        -f: 强制    rm: remove,删除    rm [OPTION]... FILE...    常用选项:    -i: 交互式    -f: 强制删除    -r: 递归    rm -rf     文本编辑器:nano    全屏编辑器bash的基础特性(2): 1、命令别名(alias) 通过alias命令实现: (1) alias 显示当前shell进程所有可用的命令别名; (2) alias NAME='VALUE' 定义别名NAME,其相当于执行命令VALUE; 注意:在命令行中定义的别名,仅对当前shell进程有效;如果想永久有效,要定义在配置文件中; 仅对当前用户:~/.bashrc 对所有用户有效:/etc/bashrc Note: 编辑配置给出的新配置不会立即生效; bash进程重新读取配置文件: source /path/to/config_file .  /path/to/config_file 撤消别名:unalias unalias [-a] name [name ...] Note: 如果别名同原命令的名称,则如果要执行原命令,可使用"COMMAND"; 2、glob (globbing) bash中用于实现文件名“通配” 通配符:*, ?, [] (1) * 任意长度的任意字符 a*b:  aab, ab, a123b,  abc (2) ? 任意单个字符 a?b: aab ab, a12b, abc (3) [] 匹配指定范围内的任意单个字符 [0-9] [a-z]:不区分字符大小写 (4) [^] 匹配指定范围外的任意单个字符 [^0-9] 专用字符集合: [:digit:]:任意数字,相当于0-9 [:lower:]:任意小写字母 [:upper:]: 任意大写字母 [:alpha:]: 任意大小写字母 [:alnum:]:任意数字或字母 [:space:]: [:punct:]:标点符号 3、bash的快捷键 Ctrl l: 清屏,相当于clear命令; Ctrl a:跳转至命令开始处; Ctrl e:跳转至命令结尾处; Ctrl c:取消命令的执行; Ctrl u: 删除命令行首至光村所在处的所有内容; Ctrl k: 删除光标所在处至命令行尾部的所有内容; 4、bash的的I/O重定向及管道 程序:指令 数据 读入数据:Input 输出数据:Output 打开的文件都有一个fd: file descriptor (文件描述符) 标准输入:keyborad, 0 标准输出:monitor, 1 标准错误输出:monitor, 2 I/O重定向:改变标准位置 输出重定向:COMMAND > NEW_POS, COMMAND >> NEW_POS >:覆盖重定向,目标文件中的原有内容会被清除; >>: 追加重定向,新内容会追加至目标文件尾部; # set -C: 禁止将内容覆盖输出至已有文件中; 强制覆盖:>| # set C:  2>: 覆盖重定向错误输出数据流; 2>>: 追加重定向错误输出数据流; 标准输出和错误输出各自定向至不同位置: COMMAND > /path/to/file.out 2> /path/to/error.out 合并标准输出和错误输出为同一个数据流进行重定向: &>:覆盖重定向 &>>:追加重定向 COMMAND > /path/to/file.out 2> &1 COMMAND >> /path/to/file.out 2>> &1 输入重定向:< tr命令:转换或删除字符 tr [OPTION]... SET1 [SET2] HERE Documentation:<< # cat << EOF # cat > /path/to/somefile << EOF 管道: COMMAND1 | COMMAND2 | COMMAND3 |... Note:最后一个命令会在当前shell进程的子shell进程中执行; tee命令: tee [OPTION]... [FILE]...文本处理工具:wc, cut, sort, uniq wc命令: wc [OPTION]... [FILE]... -l: lines -w: words -c: characters cut命令: cut [OPTION]... [FILE]... -d DELIMITER: 指明分隔符 -f FILEDS: #: 第#个字段 #,#[,#]:离散的多个字段,例如1,3,6 #-#:连续的多个字段, 例如1-6 混合使用:1-3,7 --output-delimiter=STRING sort命令: sort [OPTION]... [FILE]... -f: 忽略字符大小写 -r: 逆序 -t DELIMITER: 字段分隔符 -k #:以指定字段为标准排序 -n: 以数值大小进行排序 -u: uniq,排序后去重 uniq命令: uniq [OPTION]... [FILE]... -c: 显示每行重复出现的次数; -d: 仅显示重复过的行; -u: 仅显示不曾重复的行; Note: 连续且完全相同方为重复用户和组管理 资源分派: Authentication:认证 Authorization:授权 Accouting:审计 Audition token, identity(username/password) Linux用户:Username/UID 管理员:root, 0 普通用户:1-65535 系统用户:1-499, 1-999 对守护进程获取资源进行权限分配; 登录用户:500 , 1000 交互式登录; Linux组:Groupname/GID 管理员组:root, 0 普通组: 系统组:1-499, 1-999 普通组:500 , 1000 Linux安全上下文: 运行中的程序:进程 (process) 以进程发起者的身份运行: root: cat tom: cat 进程所能够访问的所有资源的权限取决于进程的发起者的身份; Linux组的类别: 用户的基本组(主组): 组名同用户名,且仅包含一个用户:私有组 用户的附加组(额外组): Linux用户和组相关的配置文件: /etc/passwd:用户及其属性信息(名称、UID、基本组ID等等); /etc/group:组及其属性信息; /etc/shadow:用户密码及其相关属性; /etc/gshadow:组密码及其相关属性; /etc/passwd: name:password:UID:GID:GECOS:directory:shell 用户名:密码:UID:GID:GECOS:主目录:默认shell /etc/group: group_name:password:GID:user_list 组名:组密码:GID:以当前组为附加组的用户列表(分隔符为逗号) /etc/shadow 用户名:加密了的密码:最近一次更改密码的日期:密码的最小使用期限:最大密码使用期限:密码警告时间段:密码禁用期:账户过期日期:保留字段 加密机制: 加密:明文--> 密文 解密:密文--> 明文 单向加密:提取数据指纹 md5: message digest, 128bits sha1: secure hash algorithm, 160bits sha224: 224bits sha256: 256bits sha384: 384bits sha512: 512bits 雪崩效应:初始的条件的微小改变,将会引起结果的巨大改变; 定长输出: 密码的复杂性策略: 1、使用数字、大写字母、小写字母及特殊字符中至少3种; 2、足够长; 3、使用随机密码; 4、定期更换;不要使用最近曾经使用过的密码; 用户和组相关的管理命令: 用户创建:useradd useradd [options] LOGIN -u UID: [UID_MIN, UID_MAX], 定义在/etc/login.defs -g GID:指明用户所属基本组,可为组名,也可以GID; -c "COMMENT":用户的注释信息; -d /PATH/TO/HOME_DIR: 以指定的路径为家目录; -s SHELL: 指明用户的默认shell程序,可用列表在/etc/shells文件中; -G GROUP1[,GROUP2,...[,GROUPN]]]:为用户指明附加组;组必须事先存在; -r: 创建系统用户 CentOS 6: ID<500 CentOS 7: ID<1000 默认值设定:/etc/default/useradd文件中 useradd -D  -s SHELL 组创建:groupadd groupadd [OPTION]... group_name -g GID: 指明GID号;[GID_MIN, GID_MAX] -r: 创建系统组; CentOS 6: ID<500 CentOS 7: ID<1000 查看用户相关的ID信息:id id [OPTION]... [USER] -u: UID -g: GID -G: Groups -n: Name 切换用户或以其他用户身份执行命令:su su [options...] [-] [user [args...]] 切换用户的方式: su UserName:非登录式切换,即不会读取目标用户的配置文件; su - UserName:登录式切换,会读取目标用户的配置文件;完全切换; Note:root su至其他用户无须密码;非root用户切换时需要密码; 换个身份执行命令: su [-] UserName -c 'COMMAND' 选项: -l:“su -l UserName”相当于“su - UserName” 用户属性修改:usermod usermod [OPTION] login -u UID: 新UID -g GID: 新基本组 -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项,表示append; -s SHELL:新的默认SHELL; -c 'COMMENT':新的注释信息; -d HOME: 新的家目录;原有家目录中的文件不会同时移动至新的家目录;若要移动,则同时使用-m选项; -l login_name: 新的名字; -L: lock指定用户 -U: unlock指定用户 -e YYYY-MM-DD: 指明用户账号过期日期; -f INACTIVE: 设定非活动期限; 给用户添加密码:passwd passwd [OPTIONS] UserName: 修改指定用户的密码,仅root用户权限 passwd: 修改自己的密码; 常用选项: -l: 锁定指定用户 -u: 解锁指定用户 -n mindays: 指定最短使用期限 -x maxdays:最大使用期限 -w warndays:提前多少天开始警告 -i inactivedays:非活动期限; --stdin:从标准输入接收用户密码; echo "PASSWORD" | passwd --stdin USERNAME Note: /dev/null, bit buckets      /dev/zero,  删除用户:userdel userdel [OPTION]... login -r: 删除用户家目录; 组属性修改:groupmod groupmod [OPTION]... group -n group_name: 新名字 -g GID: 新的GID; 组删除:groupdel groupdel GROUP 组密码:gpasswd gpasswd [OPTION] GROUP -a user: 将user添加至指定组中; -d user: 删除用户user的以当前组为组名的附加组 -A user1,user2,...: 设置有管理权限的用户列表 newgrp命令:临时切换基本组; 如果用户本不属于此组,则需要组密码; 修改用户属性:chage chage [OPTION]... LOGIN -d LAST_DAY -E, --expiredate EXPIRE_DATE -I, --inactive INACTIVE -m, --mindays MIN_DAYS -M, --maxdays MAX_DAYS -W, --warndays WARN_DAYS 其它命令:chfn, chsh, finger 命令总结:useradd, groupadd, su, id, usermod, userdel, groupmod, groupdel, passwd, newgrp, pwck, gpasswd, chage, chsh, chfn, finger权限管理: 文件的权限主要针对三类对象进行定义: owner: 属主, u group: 属组, g other: 其他, o 每个文件针对每类访问者都定义了三种权限: r: Readable w: Writable x: eXcutable 文件: r: 可使用文件查看类工具获取其内容; w: 可修改其内容; x: 可以把此文件提请内核启动为一个进程; 目录: r: 可以使用ls查看此目录中文件列表; w: 可在此目录中创建文件,也可删除此目录中的文件; x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录; --- 000 0 --x 001 1 -w- 010 2 -wx 011 3 r-- 100 4 r-x 101 5 rw- 110 6 rwx 111 7 例如: 640: rw-r----- rwxr-xr-x: 755 修改文件权限:chmod chmod [OPTION]... OCTAL-MODE FILE... -R: 递归修改权限 chmod [OPTION]... MODE[,MODE]... FILE... MODE: 修改一类用户的所有权限: u= g= o= ug= a= u=,g= 修改一类用户某位或某些位权限 u u- chmod [OPTION]... --reference=RFILE FILE... 参考RFILE文件的权限,将FILE的修改为同RFILE; 修改文件的属主和属组: 仅root可用; 修改文件的属主:chown chown [OPTION]... [OWNER][:[GROUP]] FILE... 用法: OWNER OWNER:GROUP :GROUP Note: 命令中的冒号可用.替换; -R: 递归 chown [OPTION]... --reference=RFILE FILE... 修改文件的属组:chgrp  chgrp [OPTION]... GROUP FILE...        chgrp [OPTION]... --reference=RFILE FILE...        -R    文件或目录创建时的遮罩码:umask    FILE: 666-umask    Note: 如果某类的用户的权限减得的结果中存在x权限,则将其权限 1    DIR: 777-umask     umask: 查看    umask #: 设定    命令总结:chmod, chown, chgrp, umask 文件管理、用户管理、权限管理、bash的基础特性 文件管理:cp, mv, rm 用户管理: useradd, usermod, chsh, chfn, chage, userdel groupad, groupmod, groupdel passwd, gpasswd, pwck id, finger, who, whoami, w su 配置文件:/etc/passwd, /etc/shadow, /etc/group, /etc/gshadow  权限管理: perm: mode(rwxrwxrwx), ownership  chmod chown chgrp -R, --reference=RFILE FILE: 666-umask DIR: 777-umask umask [UMASK] bash基础特性: 命令行展开:~, {} 命令别名:alias/unalias 命令历史:history 命令和路径补全:$PATH glob: *, ?, [], [^] 快捷键:Ctrl {a,e,l,c,u,k} 命令hash:hashbash的基础特性(3) 1、提供了编程环境 程序:指令 数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 程序的执行方式: 计算机:运行二进制指令; 编程语言: 低级:汇编 高级: 编译:高级语言-->编译器-->目标代码 C、C , java 解释:高级语言-->解释器-->机器代码 shell, perl, python 过程式编程: 顺序执行 循环执行 选择执行 shell编程:过程式、解释执行 编程语言的基本结构: 数据存储:变量、数组 表达式 语句 shell脚本:文本文件 shebang: #!/bin/bash #!/usr/bin/python #!/usr/bin/perl magic number: 魔数 运行脚本: 1、给予执行权限,通过具体的文件路径指定文件执行; 2、直接运行解释器,将脚本作为解释器程序的参数运行; 变量: 命名的内存空间; 数据存储方式:ASCII 字符:110:24 数值:110 --> 8 整型 浮点型 变量:变量类型 作用: 1、数据存储格式; 2、参与的运算; 3、表示的数据范围; 类型: 字符 数值: 整型 浮点型 编程程序语言: 强类型: 弱类型:bash 把所有要存储的数据统统当作字符进行 不支持浮点数; 逻辑运算: true, false 1, 0 与: 1 && 1 = 1 1 && 0 = 0 0 && 1 = 0 0 && 0 = 0 或: 1 || 1 = 1 1 || 0 = 1 0 || 1 = 1 0 || 0 = 0 非: ! 1 = 0 ! 0 = 1 短路运算: 与: 第一个为0,结果必定为0; 第一个为1,第二个必须要参与运算; 或: 第一个为1,结果必定为1; 第一个为0,第二个必须要参与运算;grep: Linux上文本处理三剑客 grep:文本过滤(模式:pattern)工具;  grep, egrep, fgrep sed:stream editor,文本编辑工具; awk:Linux上的实现gawk,文本报告生成器; grep: Global search REgular expression and Print out the line. 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行; 模式:由正则表达式字符及文本字符所编写的过滤条件; REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能; 分两类: 基本正则表达式:BRE 扩展正则表达式:ERE grep -E, egrep 正则表达式引擎 grep [OPTIONS] PATTERN [FILE...] 选项: --color=auto: 对匹配到的文本着色显示; -v: 显示不能够被pattern匹配到的行; -i: 忽略字符大小写; -o: 仅显示匹配到的字符串; -q: 静默模式,不输出任何信息; -A #:after, 后#行 -B #: before, 前#行 -C #:context, 前后各#行 -E:使用ERE; 基本正则表达式元字符: 字符匹配: .:  匹配任意单个字符; []: 匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符 [:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:] 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数; *:匹配前面的字符任意次; 例如: grep "x*y"  abxy xay xxxxxxy 贪婪模式 .*:任意长度的任意字符; ?:匹配其前面的字符0或1次;即前面的可有可无; :匹配其前面的字符至少1次; {m}:匹配前面的字符m次; {m,n}:匹配前面的字符至少m次,至多n次; {0,n}:匹配前面的字符至多n次; {m,}:匹配前面的字符至少m次; 位置锚定: ^:行首锚定;用于模式的最左侧; $:行尾锚定;用于模式的最右侧; ^PATTERN$: 用于模式匹配整行; ^$: 空行; ^[[:space:]]*$ < 或 b:词首锚定;用于单词模式的左侧; > 或 b:词尾锚定;用于单词模式的右侧; <PATTERN>:匹配整个单词; 分组: ():将一个或多个字符捆绑在一起,当作一个整体进行处理; (xy)*ab Note: 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: 1, 2, 3, ... 1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符; (ab (xy)*): 1: ab (xy)* 2: xy 后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身) 如果用户root存在,显示其默认的shell程序; # id root &> /dev/null && grep "^root>" /etc/passwd | cut -d: -f7 找出/etc/passwd中的两位或三位数; # grep "<[0-9]{2,3}>" /etc/passwd 显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存非空白字符的行; # grep "^[[:space:]] [^[:space:]]" /etc/grub2.cfg 找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行; # netstat -tan | grep "LISTEN[[:space:]]*$" 添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;  grep "^([[:alnum:]] >).*1$" /etc/passwd 写一个脚本,实现如下功能 如果user1用户存在,就显示其存在,否则添加之; 显示添加的用户的id号等信息; #!/bin/bash id user1 &> /dev/null && echo "user1 exists." || useradd user1 id user1 egrep及扩展的正则表达式 egrep = grep -E egrep [OPTIONS] PATTERN [FILE...] 扩展正则表达式的元字符: 字符匹配: . [] [^] 次数匹配: * ?: 0或1次; :1次或多次; {m}:匹配m次; {m,n}:至少m,至多n次; 锚定: ^ $ <, b >, b 分组: () 后向引用:1, 2, ... 或者: a|b C|cat: C或cat 1、显示当前系统root、centos或user1用户的默认shell和UID; # grep -E '^(root|centos|user1)>' /etc/passwd | cut -d: -f1,3,7 2、找出/etc/rc.d/init.d/functions文件(centos6)中某单词后面跟一个小括号的行; # grep -E -o "^[_[:alpha:]] ()" /etc/rc.d/init.d/functions 3、使用echo输出一绝对路径,使用egrep取出其基名; # echo "/mnt/sdc" | grep -E -o "[^/] /?$" | cut -d"/" -f1 进一步地:使用egrep取出路径的目录名,类似于dirname命令的结果; 4、找出ifconfig命令结果中1-255之间的数值; 5、找出ifconfig命令结果中的IP地址; fgrep:不支持正则表达式搜索;bash的基础特性(4) 变量类型: 数据存储格式、存储空间大小、参与运算种类; 字符型 数值型: 整型 浮点型 强类型:定义变量时必须指定类型、参与运算必须符合类型要求;调用未声明变量会产生错误; 弱类型:无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无须事先定义可直接调用; bash bash中的变量的种类: 根据变量的生效范围等标准: 本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效; 环境变量:生效范围为当前shell进程及其子进程; 局部变量:生效范围为当前shell进程中某代码片断(通常指函数); 位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数; 特殊变量:$?, $0, $*, [email protected], $# 本地变量: 变量赋值:name='value' 可以使用引用: value: (1) 可以是直接字串; name="username" (2) 变量引用:name="$username" (3) 命令引用:name=`COMMAND`, name=$(COMMAND) 变量引用:${name}, $name "":弱引用,其中的变量引用会被替换为变量值; '':强引用,其中的变量引用不会被替换为变量值,而保持原字符串; 显示已定义的所有变量 set 销毁变量: unset name 环境变量: 变量声明、赋值: export name=VALUE declare -x name=VALUE 变量引用:$name, ${name} 显示所有环境变量: export env printenv 销毁: unset name bash有许多内建的环境变量:PATH, SHELL, UID, HISTSIZE, HOME, PWD, OLD, HISTFILE, PS1 变量命名法则: 1、不能使程序中的保留字:例如if, for;  2、只能使用数字、字母及下划线,且不能以数字开头; 3、见名知义, 只读变量: readonly name declare -r name 位置变量: 在脚本代码中调用通过命令行传递给脚本的参数; $1, $2, ...:对应调用第1、第2等参数; shift [n] $0: 命令本身; $*: 传递给脚本的所有参数; [email protected]: 传递给脚本的所有参数; $#: 传递给脚本的参数的个数; 示例:判断给出的文件的行数 #!/bin/bash linecount="$(wc -l $1| cut -d' ' -f1)" echo "$1 has $linecount lines." bash的配置文件: 按生效范围划分,存在两类: 全局配置: /etc/profile /etc/profile.d/*.sh /etc/bashrc 个人配置: ~/.bash_profile ~/.bashrc 按功能划分,存在两类: profile类:为交互式登录的shell提供配置 全局:/etc/profile, /etc/profile.d/*.sh 个人:~/.bash_profile 功用: (1) 用于定义环境变量; (2) 运行命令或脚本; bashrc类:为非交互式登录的shell提供配置 全局:/etc/bashrc 个人:~/.bashrc 功用: (1) 定义命令别名; (2) 定义本地变量; shell登录: 交互式登录: 直接通过终端输入账号密码登录; 使用“su - UserName”或“su -l UserName”切换的用户 /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc 非交互式登录: su UserName 图形界面下打开的终端 执行脚本 ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh 编辑配置文件定义的新配置的生效方式: (1) 重新启动shell进程; (2) 使用source或.命令进程; 问题: 1、定义对所有用户都生效的别名? 2、让用户的PATH环境变量的值多出一个路径,例如多如/usr/local/apache2/bin 管理员? 所有? bash中的算术运算 , -, *, /, %, ** 实现算术运算: (1) let var=算术表达式 (2) var=$[算术表达式] (3) var=$((算术表达式)) (4) var=$(expr arg1 arg2 arg3 ...) 乘法符号有些场景中需要转义; bash有内建的随机数生成器:$RANDOM 增强型赋值: =, -=, *=, /=, %= let varOPERvalue 例如:let count =1 自增,自减: let var =1 let var let var-=1 let var-- 计算/etc/passwd文件中的第10个用户和第20用户的ID之和; #!/bin/bash userid1=$(head -n 10 /etc/passwd | tail -n 1 | cut -d: -f3) userid2=$(head -n 20 /etc/passwd | tail -n 1 | cut -d: -f3) useridsum=$[$userid1 $userid2] echo "uid sum: $useridsum" 传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和; #!/bin/bash spaceline1=$(grep "^[[:space:]]*$" $1 | wc -l) spaceline2=$(grep "^[[:space:]]*$" $2 | wc -l) echo "The sum of space line: $[$spaceline1 $spaceline2]" 统计/etc, /var, /usr目录共有多少个一级子目录和文件; 条件测试: 判断某需求是否满足,需要由测试机制来实现; Note: 专用的测试表达式需要由测试命令辅助完成测试过程; 测试命令: test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]] Note: EXPRESSION前后必须有空白字符; bash的测试类型: 数值测试: -gt: 是否大于; -ge: 是否大于等于; -eq: 是否等于; -ne: 是否不等于; -lt: 是否小于; -le: 是否小于等于; 字符串测试: ==:是否等于; >: 是否大于; <: 是否小于; !=: 是否不等于; =~: 左侧字符串是否能够被右侧的PATTERN所匹配; Note: 此表达式一般用于[[  ]]中; -z "STRING":测试字符串是否为空,空则为真,不空则为假; -n "STRING":测试字符串是否不空,不空则为真,空则为假; Note:用于字符串比较时的用到的操作数都应该使用引号; 文件测试 bash自定义退出状态码 exit [n]:自定义退出状态码; 注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字; 注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码; 接受一个文件路径作为参数; 如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出; 如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数;egrep, 扩展的正则表达式,  变量, 配置文件, 算术运算, 条件测试, 退出状态码 ERE: 字符匹配:., [], [^] 次数匹配:*, ?, , {m,n} 位置锚定:^, $, <, >, b 分组:(), 1, 2, .. 或者: a|b 变量: 本地变量 环境变量 局部变量 位置变量 特殊变量 不能使用保留字; 命令:unset, export, declare -x, set, env, printenv, readonly 配置文件: profile, bashrc 算术运算: let, $[], $(()), expr =, -=, *=, /= , -- 条件测试: test, [], [[]] 三种: 数值:-lt, -le, -gt, -ge, -ne, -eq 字符串:==, !=, >, <, =~, -z, -n 文件 自定义退出码: exit [n] [ $# -lt 1 ] && echo "At least one argument." && exit 1vim编辑器 简介 vi: Visual Interface,文本编辑器 文本:ASCII, Unicode 文本编辑种类: 行编辑器: sed 全屏编辑器:nano, vi VIM - Vi IMproved 使用 vim:模式化的编辑 基本模式: 编辑模式,命令模式 输入模式 末行模式: 内置的命令行接口 打开文件: # vim [OPTION]... FILE... #: 打开文件后,直接让光标处于第#行的行首; /PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首; 模式转换: 编辑模式 --> 输入模式 i: insert, 在光标所在处输入; a: append, 在光标所在处后面输入; o: 在当前光标所在行的下方打开一个新行; I:在当前光标所在行的行首输入; A:在当前光标所在行的行尾输入; O:在当前光标所在行的上方打开一个新行; c C 输入模式 --> 编辑模式 ESC 编辑模式 --> 末行模式 : 末行模式 --> 编辑模式 ESC 关闭文件: :q 退出 :q! 强制退出,丢弃做出的修改; :wq 保存退出 :x 保存退出 :w /PATH/TO/SOMEWHERE ZZ: 保存退出; 光标跳转: 字符间跳转: h, j, k, l h: 左 l: 右 j: 下 k: 上 #COMMAND:跳转由#指定的个数的字符; 单词间跳转: w:下一个单词的词首 e:当前或下一单词的词尾 b:当前或前一个单词的词首 #COMMAND:由#指定一次跳转的单词数 行首行尾跳转: ^: 跳转至行首的第一个非空白字符; 0: 跳转至行首; $: 跳转至行尾; 行间移动: #G:跳转至由#指定行; G:最后一行; 1G, gg: 第一行; 句间移动: ) ( 段落间移动: } { vim的编辑命令: 字符编辑: x: 删除光标处的字符; #x: 删除光标处起始的#个字符; xp: 交换光标所在处的字符及其后面字符的位置; 替换命令(r, replace) r: 替换光标所在处的字符 删除命令: d: 删除命令,可结合光标跳转字符,实现范围删除; d$:  d^: d0: dw de db #COMMAND dd: 删除光标所在的行; #dd:多行删除; 粘贴命令(p, put, paste): p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面; P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面; 复制命令(y, yank): y: 复制,工作行为相似于d命令; y$ y0 y^ ye yw yb #COMMAND yy:复制行 #yy: 复制多行; 改变命令(c, change) c: 修改 编辑模式 --> 输入模式 c$ c^ c0 cb ce cw #COMMAND cc:删除并输入新内容 #cc:  其它编辑操作 可视化模式: v: 按字符选定 V:按行行定 Note:经常结合编辑命令; d, c, y 撤消此前的编辑: u(undo):撤消此前的操作; #u: 撤消指定次数的操作; 撤消此前的撤消: Ctrl r 重复前一个编辑操作: . 翻屏操作: Ctrl f: 向文件尾部翻一屏; Ctrl b: 向文件首部翻一屏; Ctrl d: 向文件尾部翻半屏; Ctrl u:向文件首部翻半屏; vim中的末行模式: 内建的命令行接口 (1) 地址定界 :start_pos,end_pos #: 具体第#行,例如2表示第2行; #,#: 从左侧#表示行起始,到右侧#表示行结尾; #, #: 从左侧#表示的行起始,加上右侧#表示的行数; .: 当前行 $: 最后一行 .,$-1 %:全文, 相当于1,$ /pat1/,/pat2/: 从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束; #,/pat/ /pat/,$ 使用方式: 后跟一个编辑命令 d y w /PATH/TO/SOMEWHERE: 将范围内的行另存至指定文件中; r /PATH/FROM/SOMEFILE:在指定位置插入指定文件中的所有内容; (2) 查找 /PATTERN:从当前光标所在处向文件尾部查找; ?PATTERN:从当前光标所在处向文件首部查找; n:与命令同方向; N:与命令反方向; (3) 查找并替换 s: 在末行模式下完成查找替换操作 s/要查找的内容/替换为的内容/修饰符 要查找的内容:可使用模式 替换为的内容:不能使用模式,但可以使用linux用户组和权限管理,Linux系统基础。1, 2, ...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容; 修饰符: i: 忽略大小写 g: 全局替换;默认情况下,每一行只替换第一次出现; 查找替换中的分隔符/可替换为其它字符,例如 [email protected]@@ s### 1、复制/etc/grub2.cfg至/tmp/目录,用查找替换命令删除/tmp/grub2.cfg文件中的行首的空白字符; %s/^[[:space:]] //g 2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号; :%s/^[[:space:]]/#&/ 多文件模式: vim FILE1 FILE2 FILE3 ... :next 下一个 :prev 前一个 :first 第一个 :last 最后一个 :wall 保存所有 :qall 退出所有 窗口分隔模式: vim -o|-O FILE1 FILE2 ... -o: 水平分割 -O: 垂直分割 在窗口间切换:Ctrl w, Arrow 单文件窗口分割: Ctrl w,s: split, 水平分割 Ctrl w,v: vertical, 垂直分割 定制vim的工作特性: 配置文件:永久有效 全局:/etc/vimrc 个人:~/.vimrc 末行:当前vim进程有效 (1) 行号 显示:set number, 简写为set nu 取消显示:set nonumber, 简写为set nonu (2) 括号匹配 匹配:set showmatch, 简写为set sm 取消:set nosm (3) 自动缩进 启用:set ai 禁用:set noai (4) 高亮搜索 启用:set hlsearch 禁用:set nohlsearch (5) 语法高亮 启用:syntax on 禁用:syntax off (6) 忽略字符的大小写 启用:set ic 不忽略:set noic 获取帮助: :help  :help subjectbash条件测试: 测试方式: test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]] 测试表达式的类别: 数值比较 字符串测试 文件测试: 存在性测试 -a FILE -e FILE: 文件存在性测试,存在为真,否则为假; 存在性及类别测试 -b FILE:是否存在且为块设备文件; -c FILE:是否存在且为字符设备文件; -d FILE:是否存在且为目录文件; -f FILE:是否存在且为普通文件; -h FILE 或 -L FILE:存在且为符号链接文件; -p FILE:是否存在且为命名管道文件; -S FILE:是否存在且为套接字文件; 文件权限测试: -r FILE:是否存在且可读 -w FILE: 是否存在且可写 -x FILE: 是否存在且可执行 文件特殊权限测试: -g FILE:是否存在且拥有sgid权限; -u FILE:是否存在且拥有suid权限; -k FILE:是否存在且拥有sticky权限; 文件大小测试: -s FILE: 是否存且非空; 文件是否打开: -t fd: fd表示文件描述符是否已经打开且与某终端相关 -N FILE:文件自动上一次被读取之后是否被修改过; -O FILE:当前有效用户是否为文件属主; -G FILE:当前有效用户是否为文件属组; 双目测试: FILE1 -ef FILE2: FILE1与FILE2是否指向同一个设备上的相同inode FILE1 -nt FILE2: FILE1是否新于FILE2; FILE1 -ot FILE2: FILE1是否旧于FILE2; 组合测试条件: 逻辑运算: 第一种方式: COMMAND1 && COMMAND2 COMMAND1 || COMMAND2 ! COMMAND [ -e FILE ] && [ -r FILE ] 第二种方式: EXPRESSION1 -a EXPRESSION2 EXPRESSION1 -o EXPRESSION2 ! EXPRESSION 必须使用测试命令进行; # [ -z "$hostName" -o "$hostName"=="localhost.localdomain" ] && hostname www.madu.com # [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab vim: 编辑模式、输入模式、末行模式、可视化模式 跳转:h,j,k,l,w,b,e,),(,},{, G, ^, 0, $ 编辑:x, r, c, d, y, p, u, ctrl r 查找: /, ?, n, N 查找替换: s s/// g: i: 末行定界: # m,n m, # . $ /pat1/ /pat1/,/pat2/ % 文件测试: 单目:-e, -f, -d, -b, -c, -L, -P, -S, -r, -w, -x, -s 双目:-nt, -ot 组合测试:-a, -o, !文件查找: 在文件系统上查找符合条件的文件; 文件查找:locate, find 非实时查找(数据库查找):locate 实时查找:find locate: 依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);手动更新数据库(updatedb); 索引构建过程需要遍历整个根文件系统,极消耗资源; 工作特点: 查找速度快; 模糊查找; 非实时查找; locate KEYWORD find: 实时查找工具,通过遍历指定路径下的文件系统完成文件查找; 工作特点: 查找速度略慢; 精确查找; 实时查找; 语法: find [OPTION]... [查找路径] [查找条件] [处理动作] 查找路径:指定具体目标路径;默认为当前目录; 查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件; 处理动作:对符合条件的文件做什么操作;默认输出至屏幕; 查找条件: 根据文件名查找: -name "文件名称":支持使用glob *, ?, [], [^] -iname "文件名称":不区分字母大小写 -regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称; 根据属主、属组查找: -user USERNAME:查找属主为指定用户的文件; group GRPNAME: 查找属组为指定组的文件; -uid UserID:查找属主为指定的UID号的文件; -gid GroupID:查找属组为指定的GID号的文件; -nouser:查找没有属主的文件; -nogroup:查找没有属组的文件; 根据文件类型查找: -type TYPE: f: 普通文件 d: 目录文件 l: 符号链接文件 s:套接字文件 b: 块设备文件 c: 字符设备文件 p: 管道文件 组合条件: 与:-a 或:-o 非:-not, ! !A -a !B = !(A -o B) !A -o !B = !(A -a B) 找出/tmp目录下,属主不是root,且文件名不是fstab的文件; find /tmp ( -not -user root -a -not -name 'fstab' ) -ls find /tmp -not ( -user root -o -name 'fstab' ) -ls 根据文件大小来查找: -size [ |-]#UNIT 常用单位:k, M, G #UNIT: (#-1, #] -#UNIT:[0,#-1] #UNIT:(#,oo) 根据时间戳: 以“天”为单位; -atime [ |-]#,   #: [#,# 1) #: [# 1,oo] -#: [0,#) -mtime -ctime 以“分钟”为单位: -amin -mmin -cmin 根据权限查找: -perm [/|-]MODE MODE: 精确权限匹配 /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可; -MODE:每一类对象都必须同时拥有为其指定的权限标准; 处理动作: -print:默认的处理动作,显示至屏幕; -ls:类似于对查找到的文件执行“ls -l”命令; -delete:删除查找到的文件; -fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中; -ok COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令; 对于每个文件执行命令之前,都会交互式要求用户确认; -exec COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令;  {}: 用于引用查找到的文件名称自身; 注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令; 有些命令不能接受过多参数,此时命令执行可能会失败;另一种方式可规避此问题: find | xargs COMMAND  1、查找/var目录下属主为root,且属组为mail的所有文件或目录; # find /var -user root -group mail 2、查找/usr目录下不属于root、bin或hadoop的所有文件或目录; # find /usr -not -user root -a -not -user bin -a -not -user hadoop # find /usr -not ( -user root -o -user bin -o -user hadoop ) 3、查找/etc目录下最周一周内其内容修改过,同时属主不为root,也不是hadoop的文件或目录; # find /etc -mtime -7 -a -not -user root -a -not -user hadoop # find /etc/ -mtime -7 -a -not ( -user root -o -user hadoop ) 4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件或目录; # find / -nouser -a -nogroup -a -atime -7 5、查找/etc目录下大于1M且类型为普通文件的所有文件; # find /etc -size 1M -type f 6、查找/etc目录下所有用户都没有写权限的文件; # find /etc -not -perm /222 7、查找/etc目录下至少有一类用户没有执行权限的文件; # find /etc -not -perm -111 8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件; # find /etc/init.d -perm -113Linux文件系统上的特殊权限 SUID, SGID, Sticky 1 权限 r, w, x user, group, other 2 安全上下文 前提:进程有属主和属组;文件有属主和属组; (1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限; (2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组; (3) 进程访问文件时的权限,取决于进程的发起者: (a) 进程的发起者,同文件的属主:则应用文件属主权限; (b) 进程的发起者,属于文件的属组;则应用文件属组权限; (c) 应用文件“其它”权限; 3 SUID (1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限; (2) 启动为进程之后,其进程的属主为原程序文件的属主; 权限设定: chmod u s FILE...  chmod u-s FILE... 4 SGID 默认情况下,用户创建文件时,其属组为此用户所属的基本组; 一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组; 权限设定: chmod g s DIR... chmod g-s DIR... 5 Sticky 对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除自己的文件; 权限设定: chmod o t DIR... chmod o-t DIR... SUID SGID STICKY 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7 chmod 4777 /tmp/a.txt 几个权限位映射: SUID: user, 占据属主的执行权限位; s: 属主拥有x权限 S:属主没有x权限 SGID: group,  占据group的执行权限位; s: group拥有x权限 S:group没有x权限 Sticky: other, 占据ohter的执行权限位; t: other拥有x权限 T:other没有x权限bash脚本编程: 过程式编程语言: 顺序执行 选择执行 循环执行 选择执行: if 判断条件 then 条件为真的分支代码 fi if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi    

    终端: 用户与主机交互,必然用到的设备; 物理终端:直接接入本机的显示器和键盘设备;/dev/conso...

    用户组和权限管理

    第一部分 Linux命令行

    1、用户,组,权限

    Authentication 认证

    Authorization 授权

    Adition 审计

    认证:认证标识,口令

    权限:不同用户,权限不同

    介绍安全3A

    资源分派:

    Authentication:认证

    Authorization:授权

    Accouting|Audition:审计

    1. 基本的bash shell命令

    用户 :username,UID

        root:管理员,拥有全部权限,0

        普通用户:权限由管理员授予,1-65535

          系统用户:对守护进程获取资源进行权限分配,1-499(centOS 6),1-999(centOS 7)

          登陆用户:交互式登录,500 (centOS 6),999 (centOS 7)

    用户user

    令牌token,identity

    登陆成功后拿到令牌。

    Linux用户:Username/UID

    管理员:root, 0

    普通用户:1-65535

    系统用户:1-499, 1-999(CentOS7)

    对守护进程获取资源进行权限分配

    登录用户:500 , 1000 (CentOS7)

    交互式登录

    1.1 启动shell

    组:groupname,GID

        管理员组:root,0

        普通组:

          系统组:1-499, 1-999(CENTOS7)
               普通组:500 , 1000 (CENTOS7)

      Linux组的类别
          用户的主要组(primary group)
          用户必须属于一个且只有一个主组
          组名同用户名,且仅包含一个用户,私有组
          用户的附加组(supplementary group)
          一个用户可以属于零个或多个辅助组

        进程代表用户身份运行,进程的权限由启动的用户的权限决定。

      Linux用户和组的主要配置文件: 
          /etc/passwd:用户及其属性信息(名称、UID、主组ID等)
          /etc/group:组及其属性信息
          /etc/shadow:用户密码及其相关属性
          /etc/gshadow:组密码及其相关属性

    组group

    Linux组:Groupname/GID

    管理员组:root, 0

    普通组:

    系统组:1-499, 1-999(CENTOS7)

    普通组:500 , 1000 (CENTOS7)

    其实在Linux中并不分成管理员组和用户组,主要分主组和附加组。

    /etc/passwd文件包含所有系统用户列表及基本配置信息:rich:x:501:501:Rich Blum:/home/rich:/bin/bash

    passwd文件格式

        login name:登录用名(Tom)
        passwd:密码  (x)
        UID:用户身份编号
        GID:登录默认所在组编号 
        GECOS:用户全名或注释
        home directory:用户主目录 (/home/Tom)
        shell:用户默认使用shell (/bin/bash)

    安全上下文

    Linux安全上下文

    运行中的程序:进程(process)

    以进程发起者的身份运行:

    root: /bin/cat

    sunan: /bin/cat

    进程所能够访问资源的权限取决于进程的运行者的身份

    - 用户名- 用户密码(占位符)- 用户的系统UID(用户ID)- 用户的系统GID(组ID)- 用户的全名- 用户的默认主目录- 用户的默认shell程序

    shadow文件格式

        登录用名
        用户密码:一般用sha512加密(安全散列算法,能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。)
        从1970年1月1日起到密码最近一次被更改的时间
        密码再过几天可以被变更(0表示随时可被变更)
        密码再过几天必须被变更(99999表示永不过期)
        密码过期前几天系统提醒用户(默认为一周)
        密码过期几天后帐号会被锁定
        从1970年1月1日算起,多少天后帐号失效

    组的类别

    Linux组的类别

    用户的主要组(primary group)

    用户必须属于一个且只有一个主组(并且主组不能删除,除非组不是任何用户的主组)

    组名同用户名,且仅包含一个用户,私有组

    用户的附加组(supplementary group)

    一个用户可以属于零个或多个辅助组

    [root@localhost ~]#id  postfix
    
    uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
    

    查看用户的id和主组和附加组,一个组已经成为了某个账号的主组,这个组是不能删除的。

    1.2 shell提示符

     group文件格式

    群组名称:就是群组名称
    群组密码:通常不需要设定,密码是被记录在 /etc/gshadow
    GID:就是群组的 ID
    以当前组为附加组的用户列表(分隔符为逗号)

    用户和组的配置文件

    Linux用户和组的主要配置文件:

    /etc/passwd:用户及其属性信息(名称、UID、主组ID等)

    /etc/group:组及其属性信息

    /etc/shadow:用户密码及其相关属性

    /etc/gshadow:组密码及其相关属性

    $:bash shell的默认提示符

    gshdow文件格式

    群组名称:就是群组名称
    群组密码:
    组管理员列表:组管理员的列表,更改组密码和成员
    以当前组为附加组的用户列表:(分隔符为逗号)

    passwd文件格式

    login name:登录用户名(sunan)

    passwd:密码(x)

    UID:用户身份编号(1000)

    GID:登录默认所在组编号(1000)

    GECOS:用户全名或注释

    home directory:用户主目录(/home/wang)

    shell:用户默认使用shell (/bin/bash)

    [root@localhost ~]#whatis passwd
    
    passwd (1)           - update user's authentication tokens
    
    sslpasswd (1ssl)     - compute password hashes
    
    passwd (5)           - password file
    

    查看/etc/passwd帮助,是在第5章。

    [root@localhost ~]#man 5 passwd
    
    PASSWD(5)             Linux Programmer's Manual            PASSWD(5)
    
    NAME
    
           passwd - password file
    
    DESCRIPTION
    
           The /etc/passwd file is a text file that describes user login
    
           accounts for the system.
    
    name:password:UID:GID:GECOS:directory:shell
    

    查看/etc/passwd的帮助,每个字段表示的意思如上面最后一行描述所示,字段间用冒号隔开,其中CECOS是用户全名或注释,其他的应该都是可以理解的。

    [root@localhost ~]#getent 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
    
    [root@localhost ~]#cat /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
    

    上面两条命令都能查看passwd内容,第一条命令方便点。

    [root@localhost ~]#getent passwd  sunan
    
    sunan:x:1000:1000:sunan:/home/sunan:/bin/bash
    

    想查看某个用户后面直接加上用户名即可,这就是上面说的方便。

    [root@localhost ~]#pwunconv
    
    [root@localhost ~]#getent passwd  sunan
    
    sunan:$6$5ROKagTj/2yRGbuE$zwaSMvClYng4.oIE0fY90cY2SWL4HoIzZ.3da8x0BE1wJSn64fAXbS1E9leXiYvQ04tgv/Hf9E2lAl7BTOW/N0:1000:1000:sunan:/home/sunan:/bin/bash
    

    使用上面命令是使/etc/shadow中的密码回归到/etc/passwd中,但是这样不安全,并且使得/etc/shadow文件丢失。同时对修改用户名,不建议在passwd中直接改,

    因为不止passwd中有用户名,shadow中也有,这样就需要改多个文件。尽量使用命令改用户名,这样涉及这个用户的所有文件都可以修改掉。

    [root@localhost ~]#cat /etc/shadow
    
    cat: /etc/shadow: No such file or directory
    
    [root@localhost ~]#pwconv        
    
    [root@localhost ~]#cat /etc/shadow
    
    root:$6$N23hSc6iqrrtt7A.$OL78oRDi5TwUd1fy6tnzQxeZIA3/jlU3WhGVynPTaymVsJdBftbL6jLGD2l41GLSWs4H0F1DaSV8C.deWCeDl1:17486:0:99999:7:::
    

    再回到系统默认的文件,执行pwconv即可。

    root@localhost ~]#vim /etc/passwd
    
    root:x:1000:0:root:/root:/bin/bash
    
    sunan:x:0:1000:sunan:/home/sunan:/bin/bash
    
    gentoo:x:1001:1001:Gentoo Distribution:/home/gentoo:/bin/csh
    
    "/etc/passwd" 42L, 2168C written
    

    修改root UID为1000,sunan UID为0这样孙安就拥有了超级管理员权限。如果是root和sunan的UID都不为0了怎么办,这样就没人拥有管理员权限了,其实只要有一个终端还没退出管理员登陆,就可以形式管理员权限,因为在登录的时候就已经授予管理员权限了,只要不退出就一直拥有管理员权限。创建个快照,我们试一试没有管理员系统会发生什么。

    root@localhost ~]#vim /etc/passwd
    
    root:x:1000:0:root:/root:/bin/bash
    
    sunan:x:0:1000:sunan:/home/sunan:/bin/bash
    
    gentoo:x:1001:1001:Gentoo Distribution:/home/gentoo:/bin/csh
    
    "/etc/passwd" 42L, 2168C written
    

    重启发现启动不了了,重启进入菜单选项,centos7上选择第一项按e键,进入编辑界面。

    图片 1

    图片 2

    在上图的最后添加 init=/bin/sh

    图片 3

    最后的提示可以看到敲Ctrl x启动生效

    图片 4

    上图可以看到文件系统是只读的,不能在 / 下面创建文件,通过命令把 / 改为可读写,这样就可以创建文件了。然后,修改/etc/passwd文件中的root的UID为0,exit退出重启即可。

    Centos6.9上:

    图片 5

    在上面的最后空格添加 init=/bin/bash 然后敲回车

    图片 6

    可以看到文件系统是只读的,不能在 / 下面创建文件,通过命令把 / 改为可读写,这样就可以创建文件了。

    图片 7

    通过nano修改root的UID为0,exit退出重启。

    [root@localhost ~]#chfn sunan
    
    Changing finger information for sunan.
    
    Name [sunan]: sunan
    
    Office []: opt
    
    Office Phone []: 12
    
    Home Phone []: 12
    
    Finger information changed.
    
    [root@localhost ~]#getent passwd sunan
    
    sunan:x:1000:1000:sunan,opt,12,12:/home/sunan:/bin/bash
    

    chfn修改用户的信息说明,可以看到用户信息已经修改

    echo $PS1:显示当前默认提示符设置(PS1:控制默认命令行提示符的格式)

    2、用户,组操作指令

    useradd [options] LOGIN
        -u UID
        -o 配合-u 选项,不检查UID的唯一性
        -g GID:指明用户所属基本组,可为组名,也可以GID
        -c "COMMENT":用户的注释信息
        -d HOME_DIR: 以指定的路径(不存在)为家目录
        -s SHELL: 指明用户的默认shell程序
             可用列表在/etc/shells文件中
        -G GROUP1[,GROUP2,...]:为用户指明附加组,组须事先存在
        -N 不创建私用组做主组,使用users组做主组
        -r: 创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000
        -m  创建家目录,用于系统用户
        -M  不创建家目录,用于非系统用户

    usermod [OPTION] login 用户属性修改
        -u UID: 新UID
        -g GID: 新主组
        -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
        -s SHELL:新的默认SHELL
        -c 'COMMENT':新的注释信息
        -d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
        -l login_name: 新的名字;
        -L: lock指定用户,在/etc/shadow 密码栏的增加 !
        -U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
        -e YYYY-MM-DD: 指明用户账号过期日期
        -f INACTIVE: 设定非活动期限

    userdel [OPTION]... login 删除用户
        -r: 删除用户家目录

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

    su [options...] [-] [user [args...]]
        su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
        su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
        root su至其他用户无须密码;非root用户切换时需要密码
        su [-] UserName -c 'COMMAND'换个身份执行命令
        -l  --login
        su -l UserName  相当于 su - UserName

    passwd [OPTIONS] UserName: 修改指定用户的密码
        -d:删除指定用户密码
        -l:锁定指定用户
        -u:解锁指定用户
        -e:强制用户下次登录修改密码
        -f: 强制操作
        -n mindays: 指定最短使用期限
        -x maxdays:最大使用期限
        -w warndays:提前多少天开始警告
        -i inactivedays:非活动期限
        --stdin:从标准输入接收用户密码
         echo "PASSWORD" | passwd --stdin USERNAME

    groupadd [OPTION]... group_name
        -g GID: 指明GID号;[GID_MIN, GID_MAX]
        -r: 创建系统组
            CentOS 6: ID<500
            CentOS 7: ID<1000

    groupmod [OPTION]... group  

        -n group_name: 新名字  

        -g GID: 新的GID

    groupdel GROUP  组删除

    gpasswd [OPTION] GROUP
        -a user  将user添加至指定组中
        -d user  从指定组中移除用户user
        -A user1,user2,...  设置有管理权限的用户列表

    newgrp命令:临时切换主组

    chown 修改文件的属主

    chown [OPTION]... [OWNER][:[GROUP]] FILE...

      -R: 递归
        chown [OPTION]... --reference=RFILE FILE...

      user1:grp1 file    :将文件file的属主改为user1,属组改为grp1,用.也可以。

    chgrp [OPTION]... GROUP FILE...
           chgrp [OPTION]... --reference=RFILE FILE...
           -R 递归

    chmod :修改文件的权限

    文件的权限修改要用到000-777的参数,

    rwx    
    --- 000 0
    --x 001 1
    -w- 010 2
    -wx 011 3
    r-- 100 4
    r-x 101 5
    rw- 110 6
    rwx 111 7

     

     

     

     

     

     

     

     

     

    表中表示了一位的权限设置,三位表示属主、属组、其他权限。

      chmod 777 file:表示给file文件所有的权限都开放

      chmod 740 file: 表示给file文件属主所有权限,属组读权限,其他用户不给权限。

      输入位数不足左侧补零,要补齐位数。

      普通文件不要给任何执行权限,除非确定可以运行

      目录一定要有执行权限,否则回无法cd进入

      修改目录权限不会修改目录下的文件的权限。

    chmod -R 递归

       g= :组权限修改,u=用户权限修改,o=其他权限,a=所有用户权限。可组合使用。例如:

      ug=rw,给与属主和属组读写权限,不给执行权限,不改其他用户权限。

      o=  ,其他用户权限全部取消

      u w:表示给属主写权限,不改变其他位置

      go-r:表示取消属组和其他用户的读权限

       x file :表示给所有用户操作权限

       w file:只给属主加写的权限

      --reference filea=fileb :将文件a的权限设置的与b相同

    更改访问控制列表

    getfacl file 查看访问控制列表

    setfacl

      setfacl -m u:user1:rw file.txt  更改访问控制列表,使user1对文件file.txt能读能写。普通用户可改自己文件。root用户有所有权限。

      setfacl -m  g:grp1:rw file

      -x 减权限 例如:  setfacl -x g:grp1 file  删除访问控制列表,不用指定权限。

      ACL:Access Control List,实现灵活的权限管理
      除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
      CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
      CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
      tune2fs –o acl /dev/sdb1
      mount –o acl /dev/sdb1  /mnt/test
      ACL生效顺序:所有者,自定义用户,自定义组,其他人

    shadow文件格式

    登录用户名

    用户密码:一般用sha512加密

    从1970年1月1日起到密码最近一次被更改的时间

    密码再过几天可以被变更(0表示随时可被变更)

    密码再过几天必须被变更(99999表示永不过期)

    密码过期前几天系统提醒用户(默认为一周)

    密码过期几天后帐号会被锁定

    从1970年1月1日算起,多少天后帐号失效

    $ PS1="[t][u]$":创建新的提示符,只需给PS1变量赋一个新的字符串

    Linux文件系统上的特殊权限

    SUID, SGID, Sticky

    三种常用权限:r, w, x    user, group, other
    安全上下文
      前提:进程有属主和属组;文件有属主和属组
         (1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
         (2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
         (3) 进程访问文件时的权限,取决于进程的发起者
         (a) 进程的发起者,同文件的属主:则应用文件属主权限
         (b) 进程的发起者,属于文件属组;则应用文件属组权限
         (c) 应用文件“其它”权限

    可执行文件上SUID权限

      任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
      启动为进程之后,其进程的属主为原程序文件的属主
      SUID只对二进制可执行程序有效
      SUID设置在目录上无意义
        权限设定:
         chmod u s FILE...    -rwsr--r--   -rwSr--r--   小写原来有执行权限,大写原来没有。
         chmod u-s FILE...

    可执行文件上SGID权限

      任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
      启动为进程之后,其进程的属组为原程序文件的属组
        权限设定:
         chmod g s FILE...     -rwxrwsr--
         chmod g-s FILE...

    sticky位 粘滞位

      具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
      在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
      sticky 设置在文件上无意义
      权限设定:
        chmod o t file
        chmod o-t file
        例如:ls -ld /tmp

           drwxrwxrwt  12 root  root  4096 Nov 2 15:44 /tmp

      drwxrwxrwT t大写表示原来没有执行权限

      sst可以设置在最左侧,用0-7表示。

      chmod 5775 file 表示设置SUID和stick位,后边与之前相同。

    group文件格式

    群组名称:就是群组名称

    群组密码:通常不需要设定,密码是被记录在/etc/gshadow

    GID:就是群组的ID

    以当前组为附加组的用户列表(分隔符为逗号)

    记录一个问题:

    同学问为什么在/etc/group最后只能看到以这个组为附加组用户,不能看到以这个组为主组用户?

    答:/etc/group记录了 组名 组密码 组ID 附加组列表,以当前组为主组的用户是记录到/etc/passwd中的,通过对应组ID就可以找到这个以这个组为主组的用户。

    1.3 bash手册

    二、文本处理

    文本查看,分析,统计工具

    正则表达式

    扩展正则表达式

    vim

    grep

    sed

    gshdow文件格式

    群组名称:就是群组名称

    群组密码:(组默认没有口令)

    组管理员列表:组管理员的列表,更改组密码和成员(添加和删除用户账号)

    默认root账号是组管理员

    以当前组为附加组的用户列表:(分隔符为逗号) same as /etc/group

    man bash:man手册页面

    文本查看,分析,统计工具

    cat 查看文件,将文件内容全部输出到标准输出

    more 按页查看,到尾部自动退出

    less 按页查看,指令man使用的文本查看工具。

    head 输出前十行  head -1: 输出第一行

    tail 输出后十行 tail -1: 输出最后一行

      tail -f 监视,持续输出文件尾部的追加的新内容

    cut -d: -f7 file       以:为分割,显示第七个字段

    cut -d‘ ’  以空格为分割

    wc         word cut,字符统计

       -l  只显示行

      -w  只显示单词

      -m 只显示字符数

      -c  只显示字节

     sort 排序

      -r  逆序

      -n  以大小排

      -f  忽略大小写

       -u 去重 unique

    uniq 去连续重复

      -c 显示重复计数

      -d 显示重复出现的行

      -u 显示只出现一次的行

    diff  比较

    patch 打补丁 

    用户和组管理命令

    用户管理命令

    useradd

    usermod

    userdel

    组帐号维护命令

    groupadd

    groupmod

    groupdel

    1.4 浏览文件系统

    正则表达式

    REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
      程序支持:grep,sed,awk,vim, less,nginx,varnish等
      分两类:
         基本正则表达式:BRE
         扩展正则表达式:ERE            grep -E, egrep
      正则表达式引擎:
         采用不同算法,检查处理正则表达式的软件模块
               PCRE(Perl Compatible Regular Expressions)
      元字符分类:字符匹配、匹配次数、位置锚定、分组
      man  7 regex

    字符匹配

      .    匹配任意单个字符
       []   匹配指定范围内的任意单个字符
       [^]  匹配指定范围外的任意单个字符
       [:alnum:] 字母和数字
       [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
       [:lower:] 小写字母    [:upper:] 大写字母
       [:blank:] 空白字符(空格和制表符)
       [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
       [:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
       [:digit:] 十进制数字 [:xdigit:]十六进制数字
       [:graph:] 可打印的非空白字符
       [:print:] 可打印字符
       [:punct:] 标点符号

    匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
       * 匹配前面的字符任意次,包括0次
       贪婪模式:尽可能长的匹配
       .* 任意长度的任意字符
       ? 匹配其前面的字符0或1次
        匹配其前面的字符至少1次
       {n} 匹配前面的字符n次
       {m,n} 匹配前面的字符至少m次,至多n次
       {,n} 匹配前面的字符至多n次
       {n,} 匹配前面的字符至少n次

    位置锚定:定位出现的位置
       ^ 行首锚定,用于模式的最左侧
       $ 行尾锚定,用于模式的最右侧
       ^PATTERN$  用于模式匹配整行
       ^$  空行
       ^[[:space:]]*$  空白行
       < 或 b 词首锚定,用于单词模式的左侧
       > 或 b 词尾锚定;用于单词模式的右侧
       <PATTERN> 匹配整个单词

    分组:() 将一个或多个字符捆绑在一起,当作一个整体进行处理,如:(root)
      分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: 1, 2, 3, ...
      1  表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
        示例:  (string1 (string2)*)
               1 :string1 (string2)*
               2 :string2
    后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
      或者:|
         示例:a|b: a或b  C|cat: C或cat   (C|c)at:Cat或cat

    用户创建:useradd

    useradd  [options]  LOGIN

    -u UID

    -o 配合-u 选项,不检查UID的唯一性

    -g GID:指明用户所属基本组,可为组名,也可以GID

    -c "COMMENT":用户的注释信息

    -d HOME_DIR:以指定的路径(不存在)为家目录

    -s SHELL: 指明用户的默认shell程序

    可用列表在/etc/shells文件中

    -G GROUP1[,GROUP2,...]:为用户指明附加组,组须事先存在

    -N 不创建私用组做主组,使用users组做主组

    -r: 创建系统用户CentOS 6: ID<500,CentOS 7: ID<1000

    -m 创建家目录,用于系统用户

    -M 不创建家目录,用于非系统用户

    [root@localhost ~]#useradd -u 1005 -o merry
    
    [root@localhost ~]#useradd -u 1005 -o lilei
    
    [root@localhost ~]#cat /etc/passwd | tail -2
    
    merry:x:1005:1005::/home/merry:/bin/bash
    
    lilei:x:1005:1006::/home/lilei:/bin/bash
    

    创建两个相同的id的用户可以看到UID相同但GID和家目录都不相同,得到的权限一样。这两个用户谁在前登陆显示谁。

    [root@localhost ~]#useradd -r -m -d /app/nginx nginx
    
    [root@localhost ~]#ls /app
    
    a     aaa.log  fstab       ls.out   new1win.txt  who.out    win.txt
    
    aa    a.txt    linux.txt   man.txt  newwin.txt   win1.txt
    
    aaaa  f        lost found  name     nginx        win22.txt
    

    -r默认不创建家目录,系统用户,-m强制创建家目录。有时候就是指定的1-500的uid,系统也认为是一个普通的用户,因为没有-r指定。

    [root@localhost ~]#useradd -r -m -d /app/zabbix -s /sbin/nologin zabbix
    

    设置一个服务使用的系统用户。

    常见Linux目录名称

    文本处理常用工具

    grep 全局搜索正则表达式并打印

      逐行处理,显示匹配到的

      -v 显示未匹配到的

      -i 忽略大小写

      -n:显示匹配的行号
      -c: 统计匹配的行数
      -o: 仅显示匹配到的字符串
      -q: 静默模式,不输出任何信息
      -A #: after, 后#行
      -B #: before, 前#行
      -C #:context, 前后各#行
      -e:实现多个选项间的逻辑or关系
         grep –e ‘cat ’  -e ‘dog’  file
      -w:匹配整个单词
      -E:使用ERE
      -F:相当于fgrep,不支持正则表达式

       (a|b)a或b

    sed  Stream EDitor, 行编辑器

      sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
    功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等
    参考:

    地址定界:
       (1) 不给地址:对全文进行处理
       (2) 单地址:
          #: 指定的行,$:最后一行
          /pattern/:被此处模式所能够匹配到的每一行
       (3) 地址范围:
          #,#
          #, #
          /pat1/,/pat2/
          #,/pat1/
       (4) ~:步进
          1~2 奇数行
          2~2 偶数行

    sed [option]... 'script' inputfile...
      常用选项:
      -n:不输出模式空间内容到屏幕,即不自动打印
      -e: 多点编辑
      -f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
      -r: 支持使用扩展正则表达式
      -i.bak: 备份文件并原处编辑

      d: 删除模式空间匹配的行,并立即启用下一轮循环
      p:打印当前模式空间内容,追加到默认输出之后
      a []text:在指定行后面追加文本
           支持使用n实现多行追加
      i []text:在行前面插入文本
      c []text:替换行为单行或多行文本
      w /path/somefile: 保存模式匹配的行至指定文件
      r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后
      =: 为模式空间中的行打印行号
      !:模式空间中匹配行取反处理 

      s///:查找替换,支持使用其它分隔符,s@@@,s###
        替换标记:
        g: 行内全局替换
        p: 显示替换成功的行
        w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

     awk  格式化文本并打印   gawk: GNU awk

    vim

      vi: Visual Interface,文本编辑器
      文本:ASCII, Unicode
      文本编辑种类:
       行编辑器: sed
       全屏编辑器:nano, vi
       vim - Vi Improved
      其他编辑器:
         gedit  一个简单的图形编辑器
         gvim  一个Vim编辑器的图形版本

    # vim [OPTION]... FILE...
       #: 打开文件后,让光标处于第#行的行首, 默认行尾
       /PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首
      –b file 二进制方式打开文件
      –d file1 file2…  比较多个文件
      -m file  只读打开文件
      ex  file 或 vim –e  直接进入ex模式
      如果该文件存在,文件被打开并显示内容
      如果该文件不存在,当编辑后第一次存盘时创建它

      击键行为是依赖于 vim的 的“模式”
      三种主要模式:
        命令(Normal)模式:默认模式,移动光标,剪切/粘贴文本
        插入(Insert)或编辑模式: 修改文本
        扩展命令(extended command )模式: 保存,退出等
      Esc键 退出当前模式
      Esc键 Esc键 总是返回到命令模式

     图片 8

    命令模式 --> 插入模式
      i: insert, 在光标所在处输入
      I:在当前光标所在行的行首输入
      a: append, 在光标所在处后面输入
      A:在当前光标所在行的行尾输入
      o: 在当前光标所在行的下方打开一个新行
      O:在当前光标所在行的上方打开一个新行

    字符编辑:  

      x: 删除光标处的字符  

      #x: 删除光标处起始的#个字符  

      xp: 交换光标所在处的字符及其后面字符的位置  

      ~:转换大小写  

      J:删除当前行后的换行符

    替换命令(r, replace)

      r: 替换光标所在处的字符  

      R:切换成REPLACE模式

    删除命令:
      d: 删除命令,可结合光标跳转字符,实现范围删除
      d$: 删除到行尾
      d^:删除到非空行首
      d0:删除到行首
      dw:
      de:
      db:
      #COMMAND
      dd: 删除光标所在的行
      #dd:多行删除
      D:从当前光标位置一直删除到行尾,留空行,等同于d$

    复制命令(y, yank):
      y: 复制,行为相似于d命令
      y$
      y0
      y^
      ye
      yw
      yb
      #COMMAND
      yy:复制行
      #yy: 复制多行
      Y: 复制整行

    粘贴命令(p, paste):
      p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
      P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面

    改变命令(c, change)
      c: 修改后切换成插入模式

    撤销命令

      u 撤销

      ctrl r撤销之前的撤销,取消撤销

      .  点表示重复之前的操作

    光标跳转

    命令模式字符间跳转:
      h: 左  l: 右 j: 下 k: 上
      #COMMAND:跳转由#指定的个数的字符
    命令模式单词间跳转:
      w:下一个单词的词首
      e:当前或下一单词的词尾
      b:当前或前一个单词的词首
      #COMMAND:由#指定一次跳转的单词数
    命令模式当前页跳转:
      H:页首  M:页中间行 L:页底

    行首行尾跳转:
       ^: 跳转至行首的第一个非空白字符
       0: 跳转至行首
       $: 跳转至行尾
    行间移动:
       #G、扩展模式:# :跳转至由#指定行
       G:最后一行
       1G, gg: 第一行
    句间移动:
       ):下一句 (:上一句
    段落间移动:
       }:下一段 {:上一段

    扩展模式

      按“:”进入Ex模式 
      创建一个命令提示符:   处于底部的屏幕左侧
      命令:
       w 写(存)磁盘文件
       wq 写入并退出
       x 写入并退出
       q  退出
       q! 不存盘退出,即使更改都将丢失 
       r filename 读文件内容到当前文件中
       w  filename 将当前文件内容写入另一个文件
       !command 执行命令
       r!command 读入命令的输出

      c$
      c^
      c0
      cb
      ce
      cw
      #COMMAND
      cc:删除当前行并输入新内容,相当于S
      #cc:
      C:删除当前光标到行尾,并切换成插入模式

    地址定界
      :start_pos,end_pos
      # 具体第#行,例如2表示第2行
      #,# 从左侧#表示起始行,到右侧#表示结尾行 
      #, #  从左侧#表示的起始行,加上右侧#表示的行数
      :2, 3  表示2到5行
      .   当前行
      $  最后一行
      .,$-1 当前行到倒数第二行
      %  全文, 相当于1,$

      /pat1/,/pat2/
        从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
      #,/pat/
      /pat/,$
    使用方式:后跟一个编辑命令
      d
      y
      w file: 将范围内的行另存至指定文件中
      r  file:在指定位置插入指定文件中的所有内容

    查找
      /PATTERN:从当前光标所在处向文件尾部查找
      ?PATTERN:从当前光标所在处向文件首部查找
      n:与命令同方向
      N:与命令反方向

    s: 在扩展模式下完成查找替换操作
      格式:s/要查找的内容/替换为的内容/修饰符
      要查找的内容:可使用模式
      替换为的内容:不能使用模式,但可以使用1, 2, ...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容
      修饰符:
        i: 忽略大小写
        g: 全局替换;默认情况下,每一行只替换第一次出现
        gc:全局替换,每次替换前询问
    查找替换中的分隔符/可替换为其它字符,例如
      s@/etc@/var@g
      s#/boot#/#i

    允许选择的文本块
      v 面向字符
      V 面向行
      ctrl-v 面向块
    可视化键可用于与移动键结合使用:
      w  )   }   箭头等
    突出显示的文字可被删除,复制,变更,过滤,搜索,替换等

    插入模式 --------> 命令模式
        ESC
    命令模式 --------> 扩展命令模式
          :
    扩展命令模式 --------> 命令模式
          ESC,enter

    退出:

      扩展模式:
        :q 退出
        :q! 强制退出,丢弃做出的修改
        :wq 保存退出
        :x 保存退出
      命令模式
        ZZ: 保存退出
        ZQ:不保存退出

    多文件分割
      vim -o|-O FILE1 FILE2 ...
      -o: 水平分割
      -O: 垂直分割
      在窗口间切换:Ctrl w, Arrow
      单文件窗口分割:
      Ctrl w,s: split, 水平分割
      Ctrl w,v: vertical, 垂直分割
      ctrl w,q:取消相邻窗口
      ctrl w,o:取消全部窗口
      :wqall 退出

    配置文件:永久有效
      全局:/etc/vimrc
      个人:~/.vimrc
    扩展模式:当前vim进程有效
      (1) 行号
        显示:set number, 简写为set nu
        取消显示:set nonumber, 简写为set nonu
      (2) 忽略字符的大小写
        启用:set ic
        不忽略:set noic
      (3) 自动缩进
         启用:set ai
         禁用:set noai 

      (4)智能缩进
        启用:smartindent 简写 set si
        禁用:set nosi
      (5) 高亮搜索
        启用:set hlsearch
        禁用:set nohlsearch
      (6) 语法高亮
        启用:syntax on
        禁用:syntax off
      (7) 显示Tab和换行符 ^I 和$显示
        启用:set list
        禁用:set nolist

      (8) 文件格式
        启用windows格式:set  fileformat=dos
        启用unix格式:set fileformat=unix
        简写: set ff=dos|unix
      (9) 设置文本宽度
        启用: set textwidth=65 (vim only)
        禁用: set wrapmargin=15
      (10) 设置光标所在行的标识线
        启用:set cursorline,简写cul
        禁用:set no cursorline
      (11) 复制保留格式
        启用: set paste
        禁用: set nopaste

    Set 帮助
      :help option-list 
      :set or :set all
    vi/vim内置帮助 
      :help
      :help topic
      Use :q to exit help
    vimtutor 练习

    创建用户:useradd

    默认值设定:/etc/default/useradd文件中

    显示或更改默认设置

    useradd-D =cat /etc/default/useradd

    useradd–D -s SHELL

    useradd–D –b BASE_DIR

    useradd–D –g GROUP

    /:根目录/bin:GNU用户工具/boot:启动目录/dev:设备目录/etc:系统配置文件目录/home:主目录,创建用户目录/lib:库目录,存放系统和应用程序的库文件/media:媒体目录/mnt:挂载目录/opt:可选目录,存放可选软件包/root:根主目录/sbin:GNU管理员级工具/tmp:临时目录/usr:用户安装软件目录/var:可变目录,存放经常变化的目录

    Linux安装包安装

    rpm: Redhat Package Manager
       RPM  Package Manager

    源代码:name-VERSION.tar.gz|bz2|xz
        VERSION: major.minor.release
    rpm包命名方式:
      name-VERSION-release.arch.rpm
        例:bash-4.2.46-19.el7.x86_64.rpm
      VERSION: major.minor.release
      release:release.OS
      常见的arch:
        x86: i386, i486, i586, i686
        x86_64: x64, x86_64, amd64    
        跟平台无关:noarch

    包:分类和拆包
      Application-VERSION-ARCH.rpm: 主包
      Application-devel-VERSION-ARCH.rpm 开发子包
      Application-utils-VERSION-ARHC.rpm 其它子包
      Application-libs-VERSION-ARHC.rpm 其它子包
    包之间:可能存在依赖关系,甚至循环依赖
    解决依赖包管理工具:
      yum:rpm包管理器的前端工具
      apt-get:deb包管理器前端工具
      zypper: suse上的rpm前端管理工具
      dnf: Fedora 18 rpm包管理器前端管理工具

    查看二进制程序所依赖的库文件
      ldd /PATH/TO/BINARY_FILE
    管理及查看本机装载的库文件
      ldconfig 加载库文件
      /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系
    配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
    缓存文件:/etc/ld.so.cache

    程序包管理器:
      功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
    包文件组成 (每个包独有)
      RPM包内的文件
      RPM的元数据,如名称,版本,依赖性,描述等
      安装或卸载时运行的脚本
    数据库(公共):/var/lib/rpm
      程序包名称及版本
      依赖关系
      功能说明
      包安装后生成的各文件路径及校验码信息

    管理程序包的方式:
      使用包管理器:rpm
      使用前端工具:yum, dnf
    获取程序包的途径:
      (1) 系统发版的光盘或官方的服务器;
        CentOS镜像:
        
        
        
        
     (2) 项目官方站点

     (3) 第三方组织:
      Fedora-EPEL:
        Extra Packages for Enterprise Linux
      Rpmforge:RHEL推荐,包很全
      搜索引擎:
        
        
        
        
    (4) 自己制作
      注意:第三方包建议要检查其合法性。    来源合法性,程序包的完整性

     YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具
      yum repository: yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下)

      yum客户端配置文件:
      /etc/yum.conf:为所有仓库提供公共配置
      /etc/yum.repos.d/*.repo:为仓库的指向提供配置
      仓库指向的定义:
        [repositoryID]
        name=Some name for this repository
        baseurl=url://path/to/repository/
        enabled={1|0}
        gpgcheck={1|0}
        gpgkey=URL
        enablegroups={1|0}
        failovermethod={roundrobin|priority}
          roundrobin:意为随机挑选,默认值
          priority:按顺序访问
        cost=   默认为1000

    yum的repo配置文件中可用的变量:
      $releasever: 当前OS的发行版的主版本号
      $arch: 平台,i386,i486,i586,x86_64等
      $basearch:基础平台;i386, x86_64
      $YUM0-$YUM9:自定义变量
    实例:
      
      
      

    阿里云repo文件:
      
    CentOS系统的yum源
      阿里云:
    EPEL的yum源:
      阿里云:
      
    yum命令的用法:
        yum [options] [command] [package ...]
      显示仓库列表:
        yum repolist [all|enabled|disabled]
      显示程序包:
        yum list
        yum list [all | glob_exp1] [glob_exp2] [...]
        yum list {available|installed|updates} [glob_exp1] [...]
      安装程序包:
        yum install package1 [package2] [...]
        yum reinstall package1 [package2] [...]  (重新安装)

      升级程序包:
        yum update [package1] [package2] [...]
        yum downgrade package1 [package2] [...] (降级)
      检查可用升级:
        yum check-update
      卸载程序包:
        yum remove | erase package1 [package2] [...]

      查看程序包information:
        yum info [...]
      查看指定的特性(可以是某文件)是由哪个程序包所提供:
        yum provides | whatprovides feature1 [feature2] [...]
      清理本地缓存:
        清除/var/cache/yum/$basearch/$releasever缓存
        yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
      构建缓存:
        yum makecache

    搜索:yum search string1 [string2] [...]
      以指定的关键字搜索程序包名及summary信息
    查看指定包所依赖的capabilities:
      yum deplist package1 [package2] [...]
    查看yum事务历史:
      yum history [info|list|packages-list|packages-info|
      summary|addon-info|redo|undo|
      rollback|new|sync|stats]
      yum history
      yum history info 6
      yum history undo 6
    日志 :/var/log/yum.log

      安装及升级本地程序包:
        yum localinstall rpmfile1 [rpmfile2] [...]
           (用install替代)
        yum localupdate rpmfile1 [rpmfile2] [...]
          (用update替代)
      包组管理的相关命令:
        yum groupinstall group1 [group2] [...]
        yum groupupdate group1 [group2] [...]
        yum grouplist [hidden] [groupwildcard] [...]
        yum groupremove group1 [group2] [...]
        yum groupinfo group1 [...]

    yum的命令行选项:
      --nogpgcheck:禁止进行gpg check
      -y: 自动回答为“yes”
      -q:静默模式
      --disablerepo=repoidglob:临时禁用此处指定的repo
      --enablerepo=repoidglob:临时启用此处指定的repo
      --noplugins:禁用所有插件

     wget 下载到本地

    source 重新加载配置文件

    mount 挂载系统外文件

     

    新建用户的相关文件和命令

    /etc/default/useradd

    /etc/skel/*

    /etc/login.defs

    newusers passwd格式文件批量创建用户

    将和/etc/passwd文件中一样的格式的内容保存到一个文件a.txt中

    newusers a.txt即可批量创建用户,即同时改变了那4个文件。

    chpasswd 批量修改用户口令

     在b.txt文件中存放用户名:密码的格式,chpasswd b.txt

    遍历目录

    用户属性修改

    usermod [OPTION]  login

    -u UID: 新UID

    -g GID: 新主组

    -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项

    -s SHELL:新的默认SHELL

    -c 'COMMENT':新的注释信息

    -d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项

    -l login_name: 新的名字;

    -L: lock指定用户,在/etc/shadow 密码栏的增加!

    -U: unlock指定用户,将/etc/shadow 密码栏的! 拿掉

    -e YYYY-MM-DD: 指明用户账号过期日期

    -f INACTIVE: 设定非活动期限

    [root@localhost ~]#id sunn
    
    uid=1002(sunn) gid=1002(sunn) groups=1002(sunn),0(root),1000(sunan)
    
    [root@localhost ~]#usermod -G "" sunn
    
    [root@localhost ~]#id sunn          
    
    uid=1002(sunn) gid=1002(sunn) groups=1002(sunn)
    
    [root@localhost ~]#usermod -aG root,sunan sunn
    
    [root@localhost ~]#id
    
    uid=0(root) gid=0(root) groups=0(root)
    
    [root@localhost ~]#id sunn
    
    uid=1002(sunn) gid=1002(sunn) groups=1002(sunn),0(root),1000(sunan)
    
    [root@localhost ~]#usermod -G sunn sunn
    
    [root@localhost ~]#id sunn            
    
    uid=1002(sunn) gid=1002(sunn) groups=1002(sunn)
    

    上面是两种去除用户附加组的方法,一种是用空的去覆盖原来的附加组,另一种是使用主组去覆盖附加组,因为主组只能是主组不能是附加组,所以将附加组清空了。

    [root@localhost ~]#usermod -d /app/sunn -m /home/sunn
    
    [root@localhost /app/sunn]#ls -a /app/sunn
    
    .   .bash_history  .bash_profile  .cache   .mozilla
    
    ..  .bash_logout   .bashrc        .config
    

    其中的-d是指定家目录 -m是搬家。

    cd:切换目录

    删除用户

    userdel[OPTION]... login

    -r: 删除用户家目录

    绝对文件目录:从根目录开始

    查看用户相关的ID信息

    id [OPTION]... [USER]

    -u: 显示UID

    -g: 显示GID

    -G: 显示用户所属的组的ID

    -n: 显示名称,需配合ugG使用

    [root@localhost /app]#userdel sunn
    
    [root@localhost /app]#cd /home
    
    [root@localhost /home]#ll
    
    total 24
    
    drwx------  5 bb     sunan  4096 Nov 16 17:21 bb
    
    drwx------  3 gentoo gentoo 4096 Nov 15 08:58 gentoo
    
    drwx------  3 merry  lilei  4096 Nov 16 18:46 lilei
    
    drwx------  3 merry  merry  4096 Nov 16 18:46 merry
    
    drwx------. 5 sunan  sunan  4096 Nov 16 10:29 sunan
    
    drwx------  5   1002   1002 4096 Nov 16 15:48 sunn
    

    删除用户只是用户名没了,其他的一切还在。

    [root@localhost /home]#useradd -u 1002 sunn
    
    useradd: warning: the home directory already exists.
    
    Not copying any file from skel directory into it.
    
    Creating mailbox file: File exists
    
    [root@localhost /home]#ll
    
    total 24
    
    drwx------  5 bb     sunan  4096 Nov 16 17:21 bb
    
    drwx------  3 gentoo gentoo 4096 Nov 15 08:58 gentoo
    
    drwx------  3 merry  lilei  4096 Nov 16 18:46 lilei
    
    drwx------  3 merry  merry  4096 Nov 16 18:46 merry
    
    drwx------. 5 sunan  sunan  4096 Nov 16 10:29 sunan
    
    drwx------  5 sunn   sunn   4096 Nov 16 15:48 sunn
    

    创建一个相同名字的用户又可以找回原来用户了

    [root@localhost /home]#userdel -r sunn
    

    这样把家目录和邮箱也删除了,-r命令太危险。

    [root@localhost /home]#userdel -r -f  sunn
    
    userdel: user sunn is currently used by process 8453
    

    即使有进程正在使用也可以使用-f选项直接删除

    相对文件目录:.:表示当前目录;..:表示当前目录的父目录

    切换用户或以其他用户身份执行命令

    su  [options...]   [-]   [user [args...]]

    切换用户的方式:

    su UserName:非登录式切换,即不会读取目标用户的配置文件,变量不切换,不改变当前工作目录

    su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换

    root su至其他用户无须密码;非root用户切换时需要密码

    换个身份执行命令:

    su[-] UserName -c 'COMMAND'

    选项:-l --login

    su-l UserName相当于su - UserName

    [sunn@localhost ~]$su - root -c 'cat /etc/shadow'
    
    Password:
    
    root:$6$N23hSc6iqrrtt7A.$OL78oRDi5TwUd1fy6tnzQxeZIA3/jlU3WhGVynPTaymVsJdBftbL6jLGD2l41GLSWs4H0F1DaSV8C.deWCeDl1:17486:0:99999:7:::
    
    bin:*:17486:0:99999:7:::
    

    使用管理员权限不用多次切换。

    1.5 文件和目录列表

    设置密码

     passwd[OPTIONS] UserName: 修改指定用户的密码,仅root用户权限

     passwd: 修改自己的密码

     常用选项:

    -l:锁定指定用户

    -u:解锁指定用户

    -e:强制用户下次登录修改密码

    -n mindays: 指定最短使用期限

    -x maxdays:最大使用期限

    -w warndays:提前多少天开始警告

    -iinactivedays:非活动期限

    --stdin:从标准输入接收用户密码

    echo "PASSWORD" | passwd—stdinUSERNAME

    1.5.1基本列表功能

    用户相关的其它命令

     chfn指定个人信息

     chsh指定shell

     finger

    ls:显示当前目录下的文件和目录

    创建组

     groupadd[OPTION]... group_name

    -g GID: 指明GID号;[GID_MIN, GID_MAX]

    -r: 创建系统组

    CentOS 6: ID<500

    CentOS 7: ID<1000

    [root@localhost ~]#usermod -G sunan sunn
    
    [root@localhost ~]#id sunn
    
    uid=1002(sunn) gid=1002(sunn) groups=1002(sunn),1000(sunan)
    
    [root@localhost ~]#usermod -G root sunn
    
    [root@localhost ~]#id sunn
    
    uid=1002(sunn) gid=1002(sunn) groups=1002(sunn),0(root)
    

    通过上面可以看到一个账号用于一个附加组的情况下,再添加附加组会导致原来的附加组被替换掉。解决办法添加-a(append)选项即可

    [root@localhost ~]#groups sunn
    
    sunn : sunn root sunan
    

    使用groups命令查看用户属于的所有组,其中第一个是主组,后面是附加组。

    [sunn@localhost ~]$newgrp  sunan
    
    [sunn@localhost ~]$id
    
    uid=1002(sunn) gid=1000(sunan) groups=1000(sunan),0(root),1002(sunn)
    

    切换主组命令 newgrp

    -F:区分文件和目录-a:显示隐藏文件和目录-R:列出当前目录下包含的目录中的文件

    修改和删除组

     组属性修改:groupmod

    groupmod[OPTION]... group

    -n group_name: 新名字

    -g GID: 新的GID

     组删除:groupdel

    groupdelGROUP

    [root@localhost /home]#groupdel sunn
    
    groupdel: cannot remove the primary group of user 'sunn'
    

    组下面存在以这个组为主组的用户,那么这个组不能删除。

    1.5.2修改输出信息

    更改组密码

     组密码:gpasswd

     gpasswd[OPTION] GROUP

    -a user 将user添加至指定组中

    -d user 从指定组中移除用户user

    -A user1,user2,... 设置有管理权限的用户列表

     newgrp命令:临时切换主组

    如果用户本不属于此组,则需要组密码

    [sunn@localhost ~]$newgrp aa
    
    Password:
    
    [sunn@localhost ~]$groups
    
    aa root sunan sunn
    

    如果用户本不属于此组,则需要组密码,组密码设定gpasswd。但是newgrp只能临时生效,没有写到配置文件中。

    注意:一般情况下,组是不设口令的,因为不安全,普通用户只要知道组口令就可以把自己加到组里面,拥有一些权限。组不设口令,就只能使用root添加了。

    sunn:!::
    
    [root@localhost ~]#gpasswd sunn
    
    Changing the password for group sunn
    
    New Password:
    
    Re-enter new password:
    
    [root@localhost ~]#getent gshadow sunn
    
    sunn:$6$ZMWfIRMv$jbirRff67fLIEd9/VxdrQnpz0xLGuRYl068Bj3QRtdO/46Xll1bLD6z92nvQT252UTb94mNmjC/q.uHNv.zP20::
    

    sunn组默认没有密码,通过gpasswd命令添加密码。

    [root@localhost ~]#getent gshadow aa
    
    aa:$6$FCDelTjwb4$r9SSfGGKi.fpb1ITJWczoeEUxHxlZMv7.CXT47hNDVLvGycLQ2IbSU9ZHy45WD4fPJTt9jqWMCZgeUu5XkDBC1::
    
    [root@localhost ~]#gpasswd -A sunn aa
    
    [root@localhost ~]#getent gshadow aa
    
    aa:$6$FCDelTjwb4$r9SSfGGKi.fpb1ITJWczoeEUxHxlZMv7.CXT47hNDVLvGycLQ2IbSU9ZHy45WD4fPJTt9jqWMCZgeUu5XkDBC1:sunn:
    

    组默认没有管理员,使用gpasswd -A添加管理员。

    [sunn@localhost ~]$gpasswd -a sunan aa
    
    Adding user sunan to group aa
    
    [sunn@localhost ~]$
    

    因为sunn用户是aa组的管理员这样sunn用户就可以向aa组添加成员了。

    ls -l:显示详细信息

    更改和查看组成员

    groupmems[options] [action]

    options:

    -g, --group groupname更改为指定组(只有root)

    Actions:

    -a, --add username 指定用户加入组

    -d, --delete username 从组中删除用户

    -p, --purge 从组中清除所有成员(清空的是附属组,主组不能清除)

    -l, --list 显示组成员列表

    groups [OPTION].[USERNAME]... 查看用户所属组列表

    [root@localhost /home]#groups sunn
    
    sunn : sunn
    
    [root@localhost /home]#groupmems  -l -g root
    
    Gentoo
    

    显示用户所属组,显示组中用户。

    - 文件类型- 文件的权限- 文件的硬链接总数- 文件属主的用户名- 文件属组的组名- 文件的大小- 文件的上次修改时间- 文件名或目录名

    文件权限

    文件属性

    -rw-------. 1 root root 1914 Nov 7 17:46 anaconda-ks.cfg

    文件类型、selinux或acl、文件权限、连接数、文件所有者、文件所属组、文件大小、文件最后被修改时间、文件名

    文件属性操作

    chown设置文件的所有者

    chgrp设置文件的属组信息

    1.5.3 完整的参数列表

    修改文件的属主和属组

    修改文件的属主:chown

    chown[OPTION]... [OWNER][:[GROUP]] FILE...

    用法:

    OWNER

    OWNER:GROUP

    :GROUP

    命令中的冒号可用.替换

    -R: 递归

    chown[OPTION]... --reference=RFILE FILE...

    修改文件的属组:chgrp

    chgrp[OPTION]... GROUP FILE...

    chgrp[OPTION]... --reference=RFILE FILE...

    -R 递归

    ls -sail: -a:列出所有文件 -i:列出索引节点

    文件权限

    文件的权限主要针对三类对象进行定义

    owner: 属主, u

    group: 属组, g

    other: 其他, o

    每个文件针对每类访问者都定义了三种权限

    r: Readable

    w: Writable

    x: eXcutable

    文件:

    r: 可使用文件查看类工具获取其内容

    w: 可修改其内容

    x: 可以把此文件提请内核启动为一个进程

    目录:

    r: 可以使用ls查看此目录中文件列表

    w: 可在此目录中创建文件,也可删除此目录中的文件

    x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录

    X:只给目录x权限,不给文件x权限

    ​       -l:产生一个长列表 -s:列出文件的块大小

    修改文件权限

    chmod[OPTION]... OCTAL-MODE FILE...

    -R: 递归修改权限

    chmod[OPTION]... MODE[,MODE]... FILE...

    MODE:

    修改一类用户的所有权限:

    u= g= o= ug= a= u=,g=

    修改一类用户某位或某些位权限

    u u-g g-o o-a a- -

    chmod[OPTION]... --reference=RFILE FILE...

    参考RFILE文件的权限,将FILE的修改为同RFILE

    1.5.4 过滤输出列表

    权限设置示例

    chgrp sales testfile

    chown root:admins testfile

    chmod u wx,g-r,o=rx file

    chmod -R g rwX /testdir

    chmod 600 file

    chown mage testfile

    所有者可以执行chgrp命令,不能执行chown,因为你不能把你生成的文件变成别人的。同时要删除一个文件,必须要对文件所在的目录有写权限,不然删除不掉,

    因为文件名和节点对应信息在目录的数据中存放。

    读和写权限对root是不生效,但是执行权限对root生效。root比较特殊,只要是有执行权限就行不管是u g o上的,但其他用户就必须严格执行先后匹配顺序,先匹配了,后面的权限就不能再匹配了。

    文件能不能删不是 取决于文件本身,而是取决于文件的家目录。

    ls -l 文件名:文件名中,?代表一个字符,*代表零个或者多个字符

    新建文件和目录的默认权限

    umask值 可以用来保留在创建文件权限

    新建FILE权限: 666-umask

    如果所得结果某位存在执行(奇数)权限,则将其权限 1,偶数不变。

    新建的文件为了安全考虑,默认不加执行权限。

    新建DIR权限: 777-umask

    非特权用户umask是002

    root的umask是022

    umask: 查看

    umask #: 设定

    umask 002

    umask–S 模式方式显示

    umask–p 输出可被调用

    全局设置:/etc/bashrc用户设置:~/.bashrc

    [root@centos7 ~]#umask
    
    0022
    

    查看当前用户的umask值

    [sunan@centos7 ~]$umask 644
    
    [sunan@centos7 ~]$touch a
    
    [sunan@centos7 ~]$ll
    
    total 0
    
    -----w--w-. 1 sunan sunan 0 Nov 18 09:43 a
    

    设定用户的umask值,创建文件查看成功,但是只能临时生效,注销登陆失效。

    [sunan@centos7 ~]$umask
    
    0002
    
    [sunan@centos7 ~]$pwd
    
    /home/sunan
    
    [sunan@centos7 ~]$nano .bashrc
    
    umask 026
    
    [sunan@centos7 ~]$. .bashrc
    
    [sunan@centos7 ~]$umask     
    
    0026
    

    永久生效修改用户配置文件信息,添加umask 026执行生效,只是针对此用户生效,如果是需要其他用户生效,需要修改/etc/bashrc。

    [root@centos7 ~]#umask 145 ;touch f1
    
    [root@centos7 ~]#ll f1
    
    -rw--w--w-. 1 root root 0 Nov 18 09:54 f1
    

    可以看到将umask修改为145,默认创建的文件f1权限应该是521,但实际是622,因为文件默认没有执行权限,奇数 1。

    总结:其实真正的计算不是这样的,是用666的二进制与掩码的二进制记性计算

    110110110

    001100101     其中掩码中的0表示不关心,1表示从最大权限中去掉对应权限。

    110010010=622 只和文件有关系,和目录没关系,因为目录不用考虑安全问题。

    1.6 处理文件

    Linux文件系统上的特殊权限

    SUID, SGID, Sticky

    三种常用权限:r, w, x user, group, other

    安全上下文

    前提:进程有属主和属组;文件有属主和属组

    (1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限

    (2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组

    (3) 进程访问文件时的权限,取决于进程的发起者

    (a) 进程的发起者,同文件的属主:则应用文件属主权限

    (b) 进程的发起者,属于文件属组;则应用文件属组权限

    (c) 应用文件“其它”权限

    1.6.1 创建文件

    可执行文件上SUID权限

    任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

    启动为进程之后,其进程的属主为原程序文件的属主

    SUID只对二进制可执行程序有效

    SUID设置在目录上无意义

    权限设定:

    chmod u s FILE...

    chmod u-s FILE...

    touch 文件名:创建空文件,也可以更改文件的访问和修改时间

    可执行文件上SGID权限

    任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

    启动为进程之后,其进程的属组为原程序文件的属组

    权限设定:

    chmod g s FILE...

    chmod g-s FILE...

    -a:只修改访问时间-m:只修改修改时间-t:指定特定的时间

    目录上的SGID权限

    默认情况下,用户创建文件时,其属组为此用户所属的主组

    一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组

    通常用于创建一个协作目录

    权限设定:

    chmod g s DIR...

    chmod g-s DIR...

    [root@centos7 ~]#chmod g s aaaa/
    
    [root@centos7 ~]#ll -d aaaa/   
    
    drwxr-sr-x. 2 root root 4096 Nov 18 14:21 aaaa/
    
     [root@centos7 ~]#chmod  0755  aaaa/
    
    [root@centos7 ~]#ll -d aaaa/
    
    drwxr-sr-x. 2 root root 4096 Nov 18 14:21 aaaa/
    
    [root@centos7 ~]#echo aaa>a.txt
    
    [root@centos7 ~]#ll a.txt
    
    -rw-r--r--. 1 root root 4 Nov 18 14:24 a.txt
    
    [root@centos7 ~]#chmod g s a.txt
    
    [root@centos7 ~]#ll a.txt
    
    -rw-r-Sr--. 1 root root 4 Nov 18 14:24 a.txt
    
    [root@centos7 ~]#chmod g x a.txt       
    
    [root@centos7 ~]#ll a.txt
    
    -rw-r-sr--. 1 root root 4 Nov 18 14:24 a.txt
    
    [root@centos7 ~]#chmod 0654 a.txt
    
    [root@centos7 ~]#ll a.txt
    
    -rw-r-xr--. 1 root root 4 Nov 18 14:24 a.txt
    

    使用数字能去掉文件的SUID和SGID,但不能去掉目录的SGID和SUID。man chmod给出了详细的解释。

    1.6.2 复制文件

    Sticky 位

    具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权

    在目录设置Sticky 位,只有文件的所有者或root可以删除该文件

    sticky 设置在文件上无意义,因为删除文件要对文件所在目录有权限。

    目录上有rwxrwxrws权限,不能删除文件,不能对文件重命名,mv f1 f2不能重命名,因为重命名相当于删了重建。可以读文件,可以向文件中追加内容和清空文件内容。

    [root@centos7 ~]#ll -d /tmp
    
    drwxrwxrwt. 15 root root 4096 Nov 18 14:30 /tmp
    

    tmp目录是大家公用目录,能在里面创建文件但是不能删除别人建的文件。

    权限设定:

    chmod o t DIR...

    chmod o-t DIR...

    例如:ls-ld /tmp

    drwxrwxrwt 12 root root 4096 Nov215:44 /tmp

    [root@centos7 /aa]#ll /etc/shadow
    
    ----------. 1 root root 1346 Nov 18 12:35 /etc/shadow
    
    sunan:$6$yBIaPLgZ$AHxtOXkPE0HZVto5.2zSbYWU/EBk3Hy0NzJO/NQ1ZCKFC9XvuWoD9QW8nGZ8IWiVlDm6rj8E2eJnIDhxK8kyh0:17488:0:99999:7:::
    

    对于sunan用户对文件/etc/shadow没有任何权限为什么修改了文件的内容。

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

    是因为特殊权限s的作用,使得运行它的用户临时自动继承它的所有者root的权限,他再通过passwd命令去修改/etc/shadow文件。

    [root@centos7 /aa]#chmod u s /usr/bin/nano
    
    [root@centos7 /aa]#ll /usr/bin/nano
    
    -rwsr-xr-x. 1 root root 205904 Jun 10  2014 /usr/bin/nano
    
    [root@centos7 /aa]#chmod u-s /usr/bin/nano
    
    [root@centos7 /aa]#ll /usr/bin/nano      
    
    -rwxr-xr-x. 1 root root 205904 Jun 10  2014 /usr/bin/nano
    
    [root@centos7 /aa]#chmod 4755 /usr/bin/nano
    
    [root@centos7 /aa]#ll /usr/bin/nano       
    
    -rwsr-xr-x. 1 root root 205904 Jun 10  2014 /usr/bin/nano
    
    [root@centos7 /aa]#chmod 755 /usr/bin/nano
    
    [root@centos7 /aa]#ll /usr/bin/nano      
    
    -rwxr-xr-x. 1 root root 205904 Jun 10  2014 /usr/bin/nano
    

    为nano命令添加和删除s权限。

    [root@centos7 /aa]#chmod u-x /bin/passwd
    
    [root@centos7 /aa]#ll /bin/passwd
    
    -rwSr-xr-x. 1 root root 27832 Jun 10  2014 /bin/passwd
    
    [root@centos7 /aa]#chmod u x /bin/passwd
    
    [root@centos7 /aa]#ll /bin/passwd
    
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /bin/passwd
    

    去除x权限使得s变成了S,即s权限有问题了。

    SUID一般不去手动设置,是开发者设置好,只要知道是做什么的就行。

    cp 源文件目录 目标文件目录:复制文件

    特殊权限数字法

    SUID SGID STICKY

    000 0

    001 1

    010 2

    011 3

    100 4

    101 5

    110 6

    111 7

    chmod4777 /tmp/a.txt

    cp -R:递归复制整个文件目录

    权限位映射

    SUID: user,占据属主的执行权限位

    s: 属主拥有x权限

    S:属主没有x权限

    SGID: group,占据属组的执行权限位

    s: group拥有x权限

    S:group没有x权限

    Sticky: other,占据other的执行权限位

    t: other拥有x权限

    T:other没有x权限

    1.6.3 链接文件

    设定文件特定属性

    chattr i 不能删除,改名,更改(包括root)

    -i 去除属性。

    chattr a 只能追加内容

    nano不能追加,因为不知道你是不是在修改文件,即使你在最后加东西。

    echo sdfa>>a.txt 可以追加。

    chattr A  不会更新读时间

    lsattr 显示特定属性

    [root@centos7 /app]#groupmems  -l -g opts
    
    sun  sunny
    
    [sunny@centos7 /app/sharegroup]$ll
    
    total 0
    
    -rw-rw-r--. 1 sun   sun   0 Nov 18 15:00 sun
    
    -rw-rw-r--. 1 sunny sunny 0 Nov 18 15:01 sunny
    
    [sunny@centos7 /app/sharegroup]$echo new>>sun
    
    bash: sun: Permission denied
    

    虽然两个用户属于一个组,但是相互之间还是改不了文件,因为文件的所属组不一样。

    [root@centos7 /app]#chgrp opts sharegroup/sun*
    
    [root@centos7 /app]#cd sharegroup/
    
    [root@centos7 /app/sharegroup]#ll
    
    total 0
    
    -rw-rw-r--. 1 sun   opts 0 Nov 18 15:00 sun
    
    -rw-rw-r--. 1 sunny opts 0 Nov 18 15:01 sunny
    
    [root@centos7 /app/sharegroup]#su sun
    
    [sun@centos7 /app/sharegroup]$echo aa>>sunny
    
    [sun@centos7 /app/sharegroup]$cat sunny
    
    aa
    

    把文件的所属组改成一样就可以相互修改数据了。 但是用户每次新建的文件的所属组每次都会变成原来的组,这样需要每次都要修改文件的所属组。解决办法:只要在组权限上面天剑SGID权限即可解决。

    [root@centos7 /app]#chmod g s sharegroup/
    
    [root@centos7 /app]#ll
    
    drwxrws---. 2 root opts  4096 Nov 18 15:14 sharegroup
    
    [sun@centos7 /app/sharegroup]$touch sun1
    
    [sun@centos7 /app/sharegroup]$ll
    
    total 4
    
    -rw-rw-r--. 1 sun   sun  0 Nov 18 15:14 a
    
    -rw-rw-r--. 1 sun   opts 0 Nov 18 15:00 sun
    
    -rw-rw-r--. 1 sun   opts 0 Nov 18 15:16 sun1
    
    -rw-rw-r--. 1 sunny opts 3 Nov 18 15:09 sunny
    

    g s权限后,所有新建的文件的所属组就变成了opts。一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组

    通常用于创建一个协作目录

    注意:SUID和SGID、Sticky只是针对普通的用户生效,对root无效。

    cp -l:创建硬链接,其中包含了源文件的信息及位置。

    访问控制列表

    ACL:Access Control List,实现灵活的权限管理

    除了文件的所有者,所属组和其它人,可以对更多的用户设置权限

    CentOS7  默认创建的xfs和ext4文件系统具有ACL功能

    CentOS7  之前版本,装完系统有新建的分区,即默认手工创建的ext4文件系统无ACL功能,需手动增加

    tune2fs –o acl/dev/sdb1

    mount –o acl/dev/sdb1 /mnt/test

    ACL生效顺序:所有者,自定义用户,自定义组,其他人

    为多用户或者组的文件和目录赋予访问权限rwx

    mount -o acl /directory

    getfacl file |directory

    setfacl -m u:wang:rwx file|directory

      -m:设置后续的参数给文件用。 

    setfacl -Rm g:sales:rwX directory

      -R:递归赋予属性

    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文件上的group权限是mask值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限

    getfacl 可看到特殊权限:flags

    通过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需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)

    用户或组的设置必须存在于mask权限设定范围内才会生效

    setfacl-m mask::rxfile

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

    示例:

    setfacl --set u::rw,u:wang:rw,g::r,o::-file1

    备份和恢复ACL

    主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息

    getfacl -R /tmp/dir1 > acl.txt

    setfacl -R -b /tmp/dir1

    setfacl -R --set-file=acl.txt /tmp/dir1

    setfacl --restore acl.txt

    getfacl -R /tmp/dir1

    [root@centos7 /app]#setfacl  -m u:sun:rw f1
    
    [root@centos7 /app]#getfacl f1
    
    # file: f1
    
    # owner: root
    
    # group: root
    
    user::rw-
    
    user:sun:rw-
    
    group::r--
    
    mask::rw-
    
    other::r--
    

    mask:除了属主和other的其他的用户的最高权限不能超过mask。

    同时设置group的权限不能使用chmod  g 权限 f1这种方式,这种方式设置的是mask权限,要使用setfacl -m group::x f1这种形式。

    [root@centos7 /app]#echo u:sun:rwx > sun.acl
    
    [root@centos7 /app]#cat sun.acl
    
    u:sun:rwx
    
    [root@centos7 /app]#touch d2
    
    [root@centos7 /app]#setfacl  -R -M sun.acl d2
    
    [root@centos7 /app]#getfacl d2
    
    # file: d2
    
    # owner: root
    
    # group: root
    
    user::rw-
    
    user:sun:rwx
    
    group::r--
    
    mask::rwx
    
    other::r--
    

    通过文件创建权限 -M选项的作用。

    [root@centos7 ~]#setfacl -R -m sunan:rw /app/html
    
    [root@centos7 ~]#getfacl /app/html/c.html       
    
    getfacl: Removing leading '/' from absolute path names
    
    # file: app/html/c.html
    
    # owner: root
    
    # group: root
    
    user::rw-
    
    user:sunan:rw-
    
    group::r--
    
    mask::rw-
    
    other::r--
    
    [root@centos7 ~]#touch /app/html/b.html
    
    [root@centos7 ~]#getfacl !$
    
    getfacl /app/html/b.html
    
    getfacl: Removing leading '/' from absolute path names
    
    # file: app/html/b.html
    
    # owner: root
    
    # group: root
    
    user::rw-
    
    group::r--
    
    other::r--
    

    事实表明上面创建的ACL权限只对设置ACL权限前生成的文件有效,对以后新的生成的文件无效。

    [root@centos7 ~]#setfacl -R -m d:sunan:rw /app/html
    
    [root@centos7 ~]#touch /app/html/d.html
    
    [root@centos7 ~]#getfacl !$
    
    getfacl /app/html/d.html
    
    getfacl: Removing leading '/' from absolute path names
    
    # file: app/html/d.html
    
    # owner: root
    
    # group: root
    
    user::rw-
    
    user:sunan:rw-
    
    group::r-x                      #effective:r--
    
    mask::rw-
    
    other::r--
    

    要相对以后的文件生效需要加上d选项。

    [root@centos7 ~]#getfacl -R /app/html/ >/app/html.acl
    
    getfacl: Removing leading '/' from absolute path names
    
    [root@centos7 ~]#setfacl  -Rb /app/html          清空ACL权限
    
    [root@centos7 ~]#setfacl  -R  --set-file=/app/html.acl /app/html/  恢复ACL权限
    
    [root@centos7 /app]#setfacl --restore html.acl   这样恢复更简单些
    

    cp -s:创建软连接,一个符号链接。

    1.6.4重命名文件

    mv 文件名 新文件名:mv命令是用来移动文件的(moving),也可以用于重命名。

    1.6.5 删除文件

    rm:删除文件也就是移除(removing),加-f强制删除。

    1.7 处理目录

    1.7.1创建目录

    mkdir:创建目录

    1.7.2删除目录

    rmdir:删除空目录,可以--ignore-fail-on-non-empty删除非空目录

    rm -rf:强制递归删除目录

    1.8 查看文件内容

    1.8.1 查看文件统计信息

    status:显示某个文件的所有状态信息

    1.8.2 查看文件类型

    file:查看文件类型

    文本文件可执行文件数据文件

    1.8.3 查看整个文件

    1.   `cat`:查看整个文件。`-n`添加行号,`-s`压缩空白行

    more:显示文件的内容,但会在显示每页数据之后停下来

    less:显示文件内容,功能上更高级

    1.8.4 查看部分文件

    tail:显示文件末尾部分内容

    head:显示文件开头部分内容

    1. 更多的bash shell命令

    2.1 检测程序

    2.1.1 探查进程

    ps:显示运行在当前控制台的当前用户的进程

    -ef:查看系统上运行的所有进程-H:把输出的进程组织成层级形式,即树状--forest:显示层级结构信息

    1.Unix风格参数2.BSD风格参数3.GNU全字参数

    2.1.2 实时监测进程

    top:实时显示进程信息

    2.1.3 结束进程

    kill PID:结束进程号的进程

    killall 进程名:结束相关进程

    2.2 检测磁盘空间

    2.2.1 挂载存储媒体

    mount:显示当前系统挂载的设备列表

    umount:卸载挂载的设备

    2.2.2 使用df命令

    df:挂载已挂载磁盘的使用的情况

    -h:以人类可读的形式显示

    2.2.3 使用du命令

    du:显示某个特定目录的磁盘使用情况

    2.3 处理数据文件

    2.3.1 排序数据

    sort:将文件数据默认按照标准的字符排序。

    -n:将数字按照数字排序

    -M:按月排序

    -k:

    -t:

    n:

    2.3.2 搜索数据

    grep pattern file:搜索数据

    -v:反向搜索,搜出不匹配的项目

    -n:显示匹配数据所在的行数

    -c:只显示所在行数

    2.3.3 压缩数据

    bzip2工具(.bz2)

    bzip2:压缩文件bunzip2:解压.bz2文件​bzcat:显示压缩的文本文件内容bziprecover:尝试修复损坏的压缩文件

    gzip工具(.gz)

    gzip:压缩文件gunzip:解压文件gzcat:查看压缩的文本文件内容

    zip工具(.zip)

    zip:压缩文件unzip:解压文件​zipcloak:创建一个加密压缩文件,包含指定的文件和目录zipnote:从zip文件中提取批注

    2.3.4 归档数据

    tar:归档打包数据,常见加上-zxvf

    tar命令选项:

    -A:将一个已有的tar归档文件追加到另一个tar文件-c:创建一个新的tar归档文件-d:检查归档文件和文件系统的不同之处,或者是从已有的etar归档文件中删除-r:追加文件到已有的tar文件末尾-t:列出已有tar归档文件的内容-u:将比tar归档文件中已有的同名文件新的文件追加到该tar归档文件中-x:从已有的tar归档文件中提取文件​-C dir:切换到指定目录-f file:输出结果到文件或设备-j:将输出重定向给bzip2命令来压缩内容-p:保留所有文件权限-v:在处理文件时显示文件-z:将输出重定向给gzip命令来压缩内容

    1. 使用Linux环境变量

    3.1 什么是环境变量

    ​ bash shell用环境变量的特性来存储有关shell会话和工作环境的信息。环境变量分为全局变量和局部变量。

    ​ 全局变量不仅对shell会话可见,对所有shell创建的子进程也可见。

    ​ 局部变量只对创建他们的shell可见。

    printenv:查看全局变量

    echo $全局变量名:显示单个变量值

    set:显示某个特定进程设置的所有环境变量,包括全局变量。没有单独命令能显示局部变量。

    3.2 设置环境变量

    设置局部变量

    ​ 启动bash shell 即可为局部变量赋值。如:test=testing。但是在子shell和父shell中都不能使用。

    设置全局变量:

    ​ 创建全局变量的方法是先创建一个局部变量,再导出到全局环境中,通过export完成。

    $test = testing$export test$bash$echo $testtesting

    3.3删除环境变量

    unset 环境变量名:删除环境变量,注意不要用$。

    如果在子进程中删除了全局环境变量,那么只对当前子进程有效。

    3.4 默认shell环境变量

    ​ 不是所有的默认环境变量都会在运行set命令时列出。尽管是默认环境变量,但并不代表它们所有必须有一个值。

    3.5 设置PATH环境变量

    ​ PATH环境变量是Linux系统上造成最多问题的变量。它定义了命令行输入命令的搜索路径。如果找不到,则会产生一个错误。

    3.6 定位系统环境变量

    3.6.1登陆shell

    登陆shell会从以下4个不同启动文件读取命令。

    /etc/profile//bash shell的主启动目录$HOME/.bash_profile$HOME/.bash_login$HOME/.profile

    剩下三个$HOME启动文件都有同一个作用:提供一个用户专属的启动文件来定义用户专有环境变量。大多数发行版只有三个文件中的一个。

    3.6.2交互式shell

    如果bash shell不是登陆系统时启动,shell被称为交互式shell。交互式shell不会访问/etc/profile文件,而是只用寻找用户HOME目录的.bashrc是否存在。.bashrc文件有两个作用:查看/etc目录下共用bashrc文件,二是为用户提供一个定制自己的命令别名和私有脚本函数的地方。

    3.7 可变数组

    环境变量可以作为数组来使用:$ mytest=(one two three four)

    $echo $mytest[2]

    $echo $mytest[*]

    3.8 使用命令别名

    alias 别名='命令':设置别名

    -p:显示已有别名列表

    1. 理解Linux文件权限

    4.1 Linux的安全性

    4.1.1  /etc/passwd文件:包含与用户有关的信息

    4.1.2  /etc/shadow文件:能对linux系统如何管理密码有更多的控制,只有root用户可以访问

    4.1.3  添加新用户:

    useradd:使用系统默认值及命令行参数来添加新用户

    -D:查看系统默认值

    -m:创建用户home目录

    -c comment:-d home_dir:-e expire_date:-f inactive_days:

    4.1.4 删除用户:

    userdel:删除etc/passwd的用户信息,不会删除系统中的用户文件。

    -r:同时删除用户的HOME目录及mail目录。

    4.1.5 修改用户:

    usermod:修改用户账户字段,并可以指定主要组以及附加组的所属关系。

    -l:修改用户账户的登陆名

    -L:锁定用户,无法登陆

    -p:修改用户账户密码

    -U:解除账户锁定

    passwd:修改已有用户密码

    chpasswd:从文件中读取登录名密码对,并更新密码

    chsh  chfn  chage:用来修改特定的账户信息

    4.2 使用Linux组

    ​ 组权限允许多个用户共享一组共用的权限来访问系统上的对象,比如文件,目录和设备。

    ​ 每个组都有唯一的GID。

    /etc/group:包含系统上用到的每个组的信息。该文件有四个字段:组名;组密码;GID;用户列表。

    ​ 不能通过修改该文件来实现添加用户到组,而是要用usermod命令。

    创建新组:groupadd命令用来创建新组。

    修改组:groupmod命令可以修改已有组的GID(-g)或组名(-n)。

    4.3 理解文件权限

    文件权限符:如-rw-rw-r--。

    ​ 第一个字符代表文件的类型:

    -代表文件d代表目录l代表链接c代表字符型设备

    ​ 之后有三种三字符的码,每一种三字符码代表三种访问权限:

    r:代表对象是可读的w:代表对象是可写的x:代表对象是可执行的-:代表没有权限

    ​ 这三组字符码分别对应三个安全级别:文件属主;属组成员;其他用户

    默认文件权限:

    umask:用来设置用户创建文件和目录的默认权限

    linux文件权限码

    ---:0--x:1-w-:2-wx:3r--:4r-x:5rw-:6rwx:7

    4.4 改变安全性设置

    改变权限:

    chmod:改变文件和穆勒的安全性设置。chmod 760 file

    改变所属关系:

    chown:改变文件属主和属组。chown options owner[.group] file

    chgrp:改变文件默认属组。chgrp group file

    只有root用户能够改变文件的属主,任何属主都可以改变文件属组。

    1. 管理文件系统

    5.1 探索Linux文件系统

    5.2 操作文件系统

    创建分区:

    fdisk:用来管理存储分区,是一个交互式程序。

    p:显示存储设备详细信息n:创建新分区w:将更改保存到设备上

    创建文件系统:

    检查和修复:fsck命令用来检查和修复任意类型的linux文件系统。

    5.3 逻辑卷管理器

    使用Linux LVM

    1.定义物理卷使用fdisk命令将物理分区转换成物理卷区段使用pvcreat命令来用分区创建真实的物理卷2.创建卷组vgcreate:创建卷组vgdisplay:查看新创建的卷组的细节3.创建逻辑卷lvcreate:创建逻辑卷lvdisplay:查看逻辑卷详细信息4.创建文件系统5.修改LVM

    1. 安装软件程序

    6.1包管理基础

    6.2 基于Debian的系统

    ​ dpkg命令是基于Debian系PMS工具的核心。包含在PMS中的其它工具有:

    apt-get

    apt-cache

    aptitude(最常用)

    aptitude的使用:

    管理软件包

    aptitude:进入全屏模式,q键退出

    aptitude show package_name:单个命令使用aptitude

    dpkg -L package_name:显示某个特定软件包关联的所有文件列表

    安装软件包

    aptitude search package_name:搜索特定软件包,i:软件包已经安装;p:软件包未安装

    aptitude install package_name:安装软件包

    更新软件

    aptitude safe-upgrade:更新系统上所有软件包

    卸载软件

    aptitude remove package_name:只删除软件包但不删除数据和配置文件

    aptitude purge package_name:删除软件包和相关的数据和配置文件

    aptitude库

    库存储在/etc/apt/sources.list中。

    6.3 基于Red Hat的系统

    yum:在Red Hat和Fefora中使用(重点)urpm:在Mandriva中使用zypper:在openSUSE中使用

    yum的使用

    列出安装包

    yum list installed:列出已安装的包,输出的信息可能一闪而过,最好重定向到一个文件中,如:yum list installed > installed_software。

    yum list package_name:查看特定的软件包详细信息。

    安装软件

    yum install package_name:安装软件

    更新软件

    yum list updates:更新所有可用的软件

    yum update package_name:更新特定软件

    yum update:更新所有列在更新列表中的包

    卸载软件

    yum remove package_name:只删除软件包,保留配置文件和数据文件

    yum erase package_name:删除软件包和它的所有文件

    处理损坏的包依赖关系

    yum clean all:清理放错文职的文件

    yum deplist package_name:显示所有包的库依赖关系

    yum软件库

    yum repolist:查看正在从什么库中获取文件

    6.4 从源码安装

    解压tar包

    tar -zxvf xxx.tar.gz

    cd xxx

    ./configure:为系统配置systat

    make:构建二进制文件

    make install:安装软件

    1. 使用编辑器

    7.1 Vim编辑器

    Vim编辑器

    ​ Vim有两种模式,普通模式和插入模式。Vim初始显示的是普通模式,按i后进入编辑模式,按Esc退回到普通模式。

    h:左移一个字符j:下移一行k:上移一行l:右移一个字符​PageDown(或Ctrl F):下翻一屏数据PageUp(或Ctrl B):上翻一屏数据G:移到缓冲区最后一行num G:移到缓冲区的第num行gg:移到缓冲区的第一行

    ​ Vim在普通模式下有个命令行模式。按:进入命令行模式。

    q:如果未修改缓冲区数据,退出q!:取消所有对缓冲区数据的修改并退出w filename:将文件保存到另一个文件名下wq:将缓冲区的数据保存到文件中并退出

    编辑数据

    ​ 在插入模式下,可以向缓冲区插入数据。在普通模式下,vim也提供了一些命令来编辑缓冲区中的数据。

    x:删除当前光标所在位置的字符dd:删除当前光标所在行dw:删除当前光标所在位置的单词d$:删除当前光标所在位置至行尾的内容J:删除当前光标所在行行尾的换行符u:撤销前一编辑命令a:在当前光标后追加数据A:在当前光标所在行行尾追加数据r char:用char替换当前光标所在位置的单个字符R text:用text覆盖当前光标所在位置的数据,知道按下Esc

    复制和粘贴

    ​ 编辑数据时删除数据实际上是将数据保存到单独的寄存器中(也就是剪切),可以使用p命令来取回数据,也就是粘贴。

    ​ 复制相对复杂一点。复制的命令是y,可以与y使用与d命令相同的第二字符(yw,y$),然后用p粘贴光标所在的位置。复杂的是你不知道自己复制了什么。

    ​ 于是vim还有一种可视模式。移动光标到要复制的开始位置,按下v键进入可视模式,移动光标复制想要复制的文本,然后按下y键激活复制,p键粘贴。

    查找和替换

    查找:按下斜线(/),输入要查找的内容回车。

    1. 如果要查找的文本出现在光标当前位置之后,则光标会跳到该文本出现的第一个位置。2. 如果要查找的文本未在光标当前位置之后出现,则光标会绕过文件末尾,显示在该文本出现的第一个位置。3. 输出错误信息,说明未找到文本。4. 要继续查找同一单词,按下`/`键,然后回车。或者使用`n`键,表示下一个(next)。

    替换:进入替换模式,必须在命令行模式下输入::s/old/new/。

    ​ vim编辑器会跳到old第一次出现的地方并用new替换。可以对替换命令做一些修改来多处替换。

    :s/old/new/g一行命令替换所有old:n,ms/old/new/g替换行号n和m之间的所有old:%s/old/new/g替换整个文件中的所有old:%s/old/new/gc替换整个文件中的所有old,但在每次出现时提示

    7.2 Emacs编辑器

    7.3 KDE系编辑器

    7.4 GNOME编辑器

    (因为我自从接触到linux以来一直使用的都是vim,所以对于其他的编辑器以后了解的时候再补充吧。如果想要查看相关内容,建议阅读原书!)

    (完)


    技能树.IT修真院

    “我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

    这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧 !

    注册邀请码:99872160      注册链接:IT修真院

    本文由新葡亰496net发布于电脑系统,转载请注明出处:linux用户组和权限管理,Linux系统基础

    关键词:

上一篇:Ubuntu安装程序,安装配置Ubuntu

下一篇:没有了