第十四讲——bash特性 bash这个玩意儿看起来好像没有怎么见过,实际上我们已经使用了很久了,是的,就是CLI,一个shell。 shell:提供用户交互接口的程序。 因为bash功能强大且开源,所以很多发型版本默认的安装版本就是bash。 shell启动于用户输入正确的用户密码后,根据/etc/passwd中的第七字段来确认用户登录后的shell环境。 如果当前用户登录了两个相同的用户,他们的shell各不相干。 bashell程序只有一个,但是一个程序可以有多个进程。 进程是程序的副本,也是程序执行的实例。 linux操作系统允许一个用户登录多次,且每个登录后的终端都是独立的。 进程名可能会相同,但是内核是通过进程号来进行管理的。 shell是一个程序,但是它自身才有很多的内置命令。 shell是有shell和子shell的概念的,即shell中还可以再打开shell,且相互独立。可使用exit退出。 对于子shell而言,它本身bin不知道还有一个sell在运行,它认为自己就是一个独立的shell,父shell也是如此,即进程间相互不能知道彼此的存在。 bashell的特性: 1.命令历史 history 2.管道重定向 | 3.命令别名 alias 4.命令行编辑 5.命令展开 {花括号展开} ~波浪线展开 6.文件名通配 7.支持变量 8.支编程(.sh)即bashell是一个脚本语言解释器,支持脚本的编写 bash命令行编辑的快捷键 命令行光标跳转 ctrl+a 跳到行首 ctrl+e 跳到行尾 ctrl+u 删除光标前的所有字符(至行首) ctrl+k 删除光标后的所有字符(至行尾) ctrl+左右键 跳跃一个单词 ctrl+l 清屏 history 命令历史查看 -c 清空命令历史 history -d 500 删除第500条命令 history -d 500 3 删除从第500条开始的3条 用户登录进去执行的命令都在内存缓冲区里面,正常退出会保存到家目录下的~/.bash.hiatory -w 保存历史命令至历史命令文件 !n 执行历史命令中的第n条命令 !-n 执行历史命令中倒数第n条命令 !! 执行上一条命令 !string 执行历史命令中最近一个以指定字符串开头的命令。 string为指定的字符串 !$ 引用上一条命令的最后一个参数 按ESC键后再按.(dot)也可以引用上一条命令的最后一个参数 ALT + . 引用上一条命令的最后一个参数。 环境变量: PATH:命令搜索路径。 HISTSIZE:历史命令缓冲区大小。默认为1000 bash中的命令补全 PATH环境变量设置正常(命令路径),按下tab键会补全命令。 路径补全,在给出打头路径下查找,不唯一时,按两次tab键可以显示路径下的内容。 命令别名:是shell的别名 alias rm=’rm -rf’ 在shell中定义的别名只是在当前shell进程中有效,永久有效需要写入配置文件,也可以是全局的。 unalias 撤销别名 命令替换: 把命令中的某个子命令替换为命令的执行结果。 echo “This dir is `pwd`” 使用反引号。 echo “This dir is $(pwd)” 使用$()引用命令。 echo执行前先执行pwd bash 支持的引号 “ 反引号,命令替换 “” 弱引用,引号内可以实现变量的替换。 ” 强引用,不完成变量的替换。 站在用户的角度shell有两种 一是登录式shell 正常通过某终端登录的shell 也可以是su – username或者su -l username 登录式shell读取配置文件的顺序: /etc/profile——>/etc/profile.d/*.sh—–>~/.bash_profile—–>~/.bashrc—–>/etc/bashrc /etc/bashrc全局的但是是最后读取的 二是非登录式shell su username 图形界面下的命令窗口 自动执行的shell脚本 非登录式shell读取配置文件的顺序: ~/.bashrc—–>/etc/bashrc—–>/etc/profile.d/*.sh 不读取环境设定 编辑完文件后重启或者重新登录生效。 bash的配置文件:按作用范围 全局配置 /etc/bashrc /etc/profile /etc/profile.d/*.sh 对所有用户生效 个人配置(家目录下) ~/.bashrc ~/.bash_profile 对相应用户生效。 profile 类文件 1.设定环境变量 2. 运行命令或者脚本 3.已登录就执行的命令,准备工作 bashrc 类文件 1.设定本地变量 2.定义命令别名 如果一个环境变量在全局上定义了,个人用户也定义了,以个人用户的为准并生效,即作用范围越小越是最终生效。 bash是shell脚本解释器 脚本时shell提供的能力 所以脚本一定是某个shell的脚本,或者某个解释器的脚本。 给自己讲linux 2016-12-14 评论 1544 次浏览
第十三讲——基础命令3 先回顾一下之前的命令。 目录管理命令: ls cd pwd mkdir rmdir tree ls:显示目录下的文件,不加参数则显示当前目录下的文件。 -l 显示详细信息 -d 显示当前目录信息 -h 人性化显示信息 cd:目录切换命令。 pwd:显示当前所在目录。 mkdir:创建新目录 -p递归创建,且可以使用花括号展开 tree:以目录树的形式展开目录,不跟参数则默认为当前目录。 文件管理命令: touch stat file rm cp mv nano(简单的文本编辑器) touch: 改变文件的时间戳,如果文件不存在则创建。 -a 改变文件的访问时间 -m 改变文件的修改时间 -c 不创建任何文件 stat: 查看 或者显示文件系统的状态。 file: 查看文件的类型。 rm 删除文件 -f 强制删除,不提醒 -r 递归删除 cp 复制文件 复制文件时,默认复制连接所指向的文件。 -p 保留文件属主属组时间戳 -a 保留文件所有属性归档存放,不改变文件任何属性,只是打包起来以后有需要时再展开。是一种备份的常用机制。 -d 保留连接属性 -R 递归复制 -L 随符号链接一起拷贝源文件。 install 复制文件并制定权限,作用目标只能是文件,在RPM包制作的时候会用到。 -d 创建目录,可创建多个(使用花括号展开) install默认复制的权限为rwxr-xr-x -m 权限指定 mv:移动文件,可直接操作文件和目录。 -f 强制覆盖(如果目录已存在) 日期时间管理: date clock hwclock cal date 时间查看命令,也可修改系统时间 date 月日时分年.秒 修改日期的格式。 clock 显示硬件时间 hwclock -w 将系统时间写入硬件 hwclock -s 读取一年时间写入系统 cal 显示日历 文本处理命令: cat more head tail cut sort uniq cat 连接并显示文件内容,可以跟多个文件连续显示 -n 显示行号 -E 显示每一行的结束符 linux 中的换行符为$ windows中的换行符为$加回车fu -v 显示行首符 -A显示所有字符 cat不跟任何参数时,将所有的标准输入进行标准输出 cat命令能使用shift+pageup/pagedown进行翻页,但是缓存有限,不一定能翻到行首。 tac 反向显示文档 more 只能向下翻页,翻至末尾会自动退出。 less man命令调用的是less命令,用法同man,空格向下翻页,B向上翻页 head 查看文档前N行 -n 指定显示的行数,默认为10行。 空白行也是一行 tail 查看文档后N行 -n 指定并显示行数,默认为10行。 -f 动态显示文件的末尾,常用于监控文件 cut 列提取命令 -d 指定分隔符 默认为一个空格,tab等不可以 -f 指定要显示的字段 -f 1,3 提取第一列和第三列 -f 1-3 提取第一列和第三列 sort:内容排序按照ANSCII码升序 sort特点:相邻并且完全一样的行才为相同行,不相邻但完全相同的行不认为是重复 -n 按数值大小排序(升序) -r 逆序排列(降序) -t 指定字段分隔符 -k 指定某一段 sort -t : -k 3 -n /etc/passwd 指定分隔符 指定第三列 按数值大小排列 -u unique 唯一的,即相同的行只显示一次 -f 忽略大小写 uniq 配合sort命令使用 -d 只显示重复的行 -D 显示所有重复的行 -c 显示重复的次数 sort -t : -k 3 -n /etc/passwd |uniq -c wc word count 统计字符、单词、行数 -l 只显示行数 -w 只显示单词书 -c 只显示字节数 -m 只显示字符数 -L 统计最长的一行包含多少个字符 tr 字符处理命令,用于转换或者删除字符 tr ‘ab’ ‘AB’ 利用管道或者重定向进行替换 对应替换遇到a替换成A,遇到b替换成B tr ‘a-z’ ‘A-Z’ 对应替换 -d 删除字符 tr -d ‘ab’ 删除字符集中出现的所有字符。 给自己讲linux 2016-12-13 评论 1392 次浏览
第十二讲——基础命令2 额……这几天迷上了一本小说,加班加点连续通宵四五天终于搞定一本小说,就当是放松了几天,回头看看好像忘了不少,悲剧了……还好是复习,要是正儿八经的从头学习的话太不应该了…… 废话就不多讲了,直接开始命令。 再废话一句,一般来说横向制表符为八个空白字符。 date 时间查看命令,在linux操作系统中有两个时间,一个是系统时间,一个是硬件时间。 date 月日时分年.秒 修改系统时间 date +”This year is %Y%nToday is %d” %n 换行 hwclock 查看硬件时间 hwclock -w 同步系统时间至硬件,将系统时间写入硬件 hwclock -s 读取硬件时间,将硬件时间写入系统。 计时是以格林尼治时间为准,因为在数据库中体现的应为精确时间而非当地时间。 配置服务器的时候操作系统时钟是非常常用的操作。 info command ,命令在线帮助文档,作为man命令的补充 cal 查看日历 echo 打印字符到屏幕 -e 支持转义字符,以下转义字符均为-e选项下,内容需要用双引号引起来。 /n 换行 /t 横向制表符 /v 纵向制表符 file : 辨识文件类型 file /bin/ls :ELF 是一种可执行文件的存储格式。可执行的,可连接的。 在windows中为PE,可移植的。 特殊文件:主设备号(major) 次设备号(minor) 一个设备要有设备文件才能被linux访问,一般来说,当插入一个新设备时会在/dev目录下自动创建。 type command,查看命令类型,是外部命令还是内建命令。 whatis command,查看命令在man中属于第几章节。 “\”,反斜杠用于转义,backslash escapes 逃逸字符 tree 查看目录树,目录展开。 mkdir -p /mnt/test/{x/m,y} 等价于mkdir -p /mnt/test/x/m /mnt/test/y 此为花括号展开的用法 -v 显示过程 cd ~username 波浪线展开,切换到用户的家目录,root用户生效。 stat 查看(显示)文件或者文件系统的状态信息。 另外关于创建文件,创建文件可以使用文本编辑器完成。我们使用的Word使用的是字处理器,除了文本里面还保存了字体大小、格式、颜色等属性。 ASCII码:共有128个不同的字符的纯文本,没有任何修饰。 计算机最小的单位为bit,但是在硬盘上的存储是以字节为单位的kb 2^16=65536 汉字由两个字节组成,可以表示65536个汉字。 汉字等文字通过我们常见的字符集(转义器)翻译 GB_18030 国标 GBK 国标 GB2132 国标 为了方便使用,避免不同的字符集翻译导致乱码,国际上采用Unicode 给自己讲linux 2016-12-12 评论 1490 次浏览
第十一讲——基础命令 额……终于把那些绕来绕去的玩意儿搞定了,接下来的工作就比较轻松愉快了,当然,只是暂时的。 我们先来回顾一下之前的命令。 1.关于用户管理的命令 useradd 添加用户 userdell -r 连用户和用户家一块儿干掉 usermod改变已添加用户的信息 passwd 修改用户密码 2.组管理命令 groupadd 添加组 groupdel 删除组 groupmod 修改组信息 gpasswd 添加组密码 3.权限管理命令 chmod 权限管理 4.目录管理命令 ls、cd、pwd、mkdir、rmdir、tree ld命令和cd命令已经做过说明,不再赘述 pwd :显示当前目录路径。 mkdir: 创建目录,如果是在当前目录下创建,则 mkdir filename即可,否则需要指定路径如mkdir /tmp/test mkdir -p /tmp/test/x/m /tmp/test/y ——>等价于mkdir -p /tmp/test/{x/m,y},称为花括号展开这是bash的一种特性。 -v 显示创建过程 -p 递归创建目录,如果有连续一个以上不存在的目录需要加次选项,例如mkdir -p /tmp/1/2/3/4/5 tree :显示目录树结构,不加参数显示当前目录下的结构,否则需指定路径,例如tree /etc rmdir :删除空目录,当目录不为空时无法删除,支持-p递归删除空目录,很少使用。 5.文件管理命令: touch、stat、file、rm、cp、mv、nano touch :touch并不是创建文件,只是如果这个文件不存在则创建,touch主要用于修改文件时间戳。 -c 不创建任何文件 -a 改变访问时间 -m 改变修改时间 -t 指定修改时间 stat: 查看文件或者文件系统的状态信息 stat filename 或者stat direct 即可查看问价或者目录的状态信息。 file :查看文件的类型 file filename rm :删除命令 -r 递归删除,常用于删除目录。 -f 强制删除,不询问,很危险,慎用。 cp :复制命令(copy) cp 源 目标 对于cp命令来说,只有最后一个是目标,其他的都是源,默认只复制文件。只能实现一个文件到一个文件,多个文件到一个目录。 -r 递归复制,产用于目录的复制,例如之前的/etc/skel 复制到家目录下并修改权限,就可以使用cp命令。 -f 强行复制,强行覆盖已存在文件,不提示。 -i 覆盖提示。 -a 保留源文件的所有属性(archive),归档存放,不改变文件的任何属性,只是打包放起来,以后需要时再展开,是一种备份的常用机制 -a的命令是 -dR的合成命令 -d 保持链接属性 -R 递归复制 -P 保持复制链接,cp复制时默认是复制链接所指向的文件 -L 随符号链接拷贝源文件 mv :移动文件(剪切文件) mv SRC(源) DEST(目标) -f 强制覆盖(如果目标已存在) nano :一个文本编辑器,非常简单,键入nano回车即可,界面上有提示,唯一注意的就是^尖括号代表的是ctrl。 另外介绍一个命令install install命令:复制一个文件并制定属性。 install SRC DEST 用法同cp -d 创建多个目录 install -d /tmp/{a,b,c} 创建a,b,c三个目录于/tmp下。 -m 权限的制定 install 作用目标盘只能是文件,在rpm包制作时会使用到。 给自己讲linux 2016-12-11 评论 1422 次浏览
第十讲——创建用户的相关文件以及系统目录 上一讲,我们讲了用户的添加删除、权限的更改、用户组的添加删除。基本上能够认识一个用户添加的流程了。 那么添加一个用户会涉及到哪些文件?我们就一起来看上一看。 首先讲一讲/etc/passwd文件,这个文件里包含了与用户相关的大量信息,这个文件名是不是似曾相识的感觉,是的,就是那个给用户添加密码的命令。 还记得我们讲过的man命令吗?使用man 5 passwd就可以查看这个文件里的相关格式,不过这个文档应该是英文的,所以说,还是要努力的学习学习英语。 就简要的说一说这个文件的构成,/etc/passwd文件分为七个字段,每一个字段之间用冒号隔开 第一字段:用户名 第二字段:密码占位符,表示用户有密码,但是密码并不保存在这里,而是在一个叫做/etc/shadow的文件里 第三字段:UID,就是用户id 第四字段:GID,就是基本组id 第五字段:用户相关信息,但绝大多情况下为空。 第六字段:用户的家目录,系统用户虽然指定了家目录路径,但是是没有家目录的。 第七字段:用户的默认登陆后的shell,系统用户的shell大多为nologin,意思就是不能登录。 如果我们想要手动添加一个用户在这里编辑就好了,不过现在是没有办法的,因为还不会使用vi编辑器。 接下来讲一讲存放密码的文件/etc/shadow文件,又称为影子文件。 此文件我们使用man 5 shadow 也是可以查看其文件格式的。shadow文件也是由冒号分隔字段,共有九段,大可不必害怕,就是几个时间而已。 /etc/passwd 第一字段:用户名,当然是用户名,不然怎么知道是谁的密码,本流氓有些想不通,不是说好了用UID嘛,shadow文件里并没有UID,咳咳,这个有待验证。 第二字段:密码,俩感叹号的不给登录,是的,那一长串乱七八糟的字符就是密码了,密码字段用$隔成了三段,第一段意思是加密的方式,第二段则是随机字符串,用来混淆密码字段的,这个待会儿解释。 第三字段:上一次密码修改的时间。这个时间很怪,是不是,这个是时间戳,单位为天,意思是从1970.01.01 00:00至今的天数,今天没过完,是不算的,换算起来还是很简单的。 第四字段:密码最短使用期限,大概意思就是,上一次改密码到下一次改密码的时间间隔,挺奇怪的规矩。 第五字段:密码最长使用期限,这个可以理解,单位为天,是从上一次修改密码开始算起。 第六字段:密码过期提醒,就是快到最长使用期限时,提前多少天警告。 第七字段:密码逾期期限,额……就是密码使用期限已经到了,能够宽松几天,可以设定…… 第八字段:账号禁用期限,就是到期时间,这个是从1970.01.01开始算起的。 第九字段:保留字段,无意义。 三关已经过去了两关,接下来的文件和组有关/etc/group 同样的可是使用man命令查看 第一字段:组名 第二字段:组密码占位符,相关文件在一个叫/etc/gshadow的文件中。 第三字段:组ID 第四字段:组里的用户,多个用户使用逗号隔开。 组里的东西就这么一点……/etc/gshadow文件就不看了,用到了查一查就好。 现在来讲一讲加密,加密简单的划分一下,有三种: 1.对称加密 什么叫对称加密呢?简单地说,对称加密就是加密和解密使用的是同一个密码。 2.非对称加密 非对称加密是电子商务得以实施的重要基础条件,,非对称加密又叫公钥加密,每个密码是成对出现 公钥public key 私钥secret key 公钥加密的内容需要与之对应的私钥解密,公钥加密的秘钥长度比对称加密长的多,所以公钥加密比对称加密要安全的多,但是加密速度也会慢许多。 公钥加密比对称加密慢三个数量级,所以公钥很少用来加密大量的数据,常常作为密钥交换来使用。 3.单项加密 单项加密也叫散列加密或者指纹加密,单项加密只能由明文取得密文,反之不成,是非可逆的。单项加密是提取数据的特征码,每一个数据都有唯一的特征码,这个特征码为定长,也就是说不论数据多么庞大,提取的特征码都是同样的长度,这个特性被用于数据完整性校验,单项加密有一个特点就是雪崩效应,也叫蝴蝶效应,就是数据中有一丁点儿不同都会引起结果雪崩般的变化,这给文件的完整性校验提供了保证。 在我们的shadow文件中使用的就是SHA1单项加密算法,密码字段的第二段就是加到密码里的杂质,让别人无从猜测用户的密码。如果密码一样,杂志一样,那么存放的密码段就是一样的。密码生成就需要查找一下了,方法多多。 下面就来讲一下系统目录的构成: /boot :系统启动相关目录。 /dev :设备文件目录。 块设备:随机设备,可实现随机访问的设备。如硬盘、磁盘,它的访问是按照组织成对应的数据块。 字符设备:线性设备,可完成线性访问的设备。有序的,如键盘,是一个字符一个字符读取的。 /etc: 大多数配置文件的主要存放路径,或者在该目录的子目录下。 /home :用户的家目录。 /root : 管理员的家目录 /lib :library,库文件和内核文件模块(/lib/modules) /media :挂载点目录,通常用于挂载移动设备 /mnt :挂载点目录,通常用于挂载额外的临时文件系统。 /opt 可选目录,早期用于安装第三方软件。 /proc 伪文件系统,事实上里面是没有任何文件的,但是由于系统启动后的内核映射文件放在该目录下。大多为内核的可调参数和内核工作的统计数据。例如网卡的接收发送数据包统计数据,是否支持路由等等。 /sys 伪文件系统,是硬件设备相关的属性映射文件,通常用于实现设备的管理。尤其是像硬盘这样的存储设备。 /tmp 临时文件 /var 可变化的文件,cache(缓存),lock(锁文件),run(进程号存储 *。PID) /var/tmp另一个临时文件存储 /bin (binary) 可执行文件,用户命令 /sbin 管理命令 /usr universal shared read-only 全局的共享的只读文件 /usr/bin 系统启动后提供的一些基本功能的命令或可执行文件,命令涉及的库文件存放在/usr/lib /usr/sbin 系统启动后提供的基本管理功能的命令和可执行文件,命令涉及的库文件存放在/usr/lib /usr/local/bin第三方软件的安装目录,第三方软件信息都在此目录下 /usr/local/sbin第三方软件的管理命令目录。相应的库文件存放在/usr/local/lib 所涉及到的目录都在这里了,具体使用到相关配置文件再做详细说明。 给自己讲linux 2016-12-10 评论 1493 次浏览
第九讲——超人管理员、用户以及权限 说起超人,我就想起小时候加班几点都想看的动画片,可惜啊,老爹比较凶,按时关电视,周末还不给看…… 超人那是相当强大的,系统管理员root也是这样,这是一个凌驾于所有用户至上的用户,能干很多普通用户干不了的事情,比如删除根目录下的所有文件,要是真这样干了,那就悲剧了,啥都没有了,所以啊,没事儿的时候还是不要穿着超人的外衣到处晃,免得犯了错有没有超人的能力挽救…… root用户是系统默认的管理员,既然是超人当然就会有很多不一样的地方。比如命令的执行上,举个简单的例子: 每一个用户在/home下都有一个家目录,并且以用户名命名,root就比较厉害,不屑于在/home下屈居,非得单独搞一个/root,也就是根目录下有一个root的目录。除了这些最容易体现不同之处是,root可以随便去普通用户家里,甚至想干啥都可以,写写文件,改改数据,删除点什么之类的,普通用户一般来说那是连门都进不去的,为啥?因为有一种机制给普通用户之间提供了防护,这种机制就是权限。 权限这玩意儿很是古怪啊,记得上一次的文件类型后面跟着的九个短横线rwx一大串,是的,这个就是文件的权限。文件的权限是如何实现的呢?且听本大流氓叽叽歪歪一番。 首先我们文件的权限是三位一组,也就是说一个文件有三组权限,每一组具有的权限按位(顺序)是读(r)、写(w)、执行(x),所以会看到一大串摸不着头脑的字符串。 我们说了,每一个文件有三组权限,那么是哪三组?还是按照顺序,三个一组,第一组的权限是文件创建者的,称为属主,第二组的权限是文件创建者所在的组(就像小组),第三组就是其他人了。 用户组(属组):其实就是一个容器,用来关联一些权限,只要在用户组里的人都具有属于用户组的文件的权限,用户组是一个逻辑概念,并不能登录计算机,仅仅是用来指派权限。 那么什么是权限?权限就是定义资源或服务的访问能力,属主就是指定某一个人具有权限,属组是指定某一类人具有权限。对于计算机来讲,用户只是一个标识符,是用来获取资源或服务的凭证,但是对外部来讲,用户是我们人。看似是我们在操作计算机,实际上只是代为完成。另外进程也是有属主和属组的,因为它是一个程序运行的副本,所以进程是用户操作计算机的代理,进程能够访问的文件是取决于这个进程自己的权限和它所访问资源或文件的权限。这个过程的判断是由操作系统安全管理属性自动完成的。 我们来详细说一说系统权限,每一类用户都有三种权限(读、写、执行),这是对于文件来说的,对于目录呢? 我们说了,linux中一切皆文件,也就是说,目录也是文件,但是这些权限表示的意义是不太一样的,目录是路径的映射文件,其本身并不存储内容,和设备文件一样只具有元数据,元数据就是文件本身的属性,我们就来详细说一说。 对于文件: r:可读,这就意味着我们可以使用相关命令查看内容等等。 w:可写,意味着此文件可以被编辑,也可以被删除。 x:可执行,也就是说这个文件是可以被执行的,就像win下的.exe。 对于目录: r:可以对此目录使用ls命令进行查看,列出其中的文件 w:可以再目录中创建文件,也可以删除自己创建的文件,但是我们要搞清楚,用户是不能对一个没有权限的文件操作的,这个有点绕,但是必须得搞清楚。 x:目录能被执行?然并卵,文件的x权限代表着我们可以cd到该目录下,一般来说文件的r、x权限是成对出现的,如果对于一个目录能够ls列出文件但是不能cd到该目录下,或者说能cd到该目录下但是不能ls列出文件,这得是多么操蛋的事情。 rwx三位一体,按位占用,没有权限则用短横线占位。 对于一个新创建的文件来说,默认是没有执行权限的,为什么会有一个默认权限?这个就是umask在捣鬼 要说umask,我们还得捋一捋权限的数字表示 权限表示 八进制 二进制 –x 1 001 -w- 2 010 -wx 3 011 r– 4 100 r-x 5 101 rw- 6 110 rwx 7 111 我们通常把三位放到一起来看,用八进制表示其权限,另外还有一种较为简洁的记法,单独的r权限为4.单独的w权限为2,单独的x权限为1,加起来刚好为7,相互组合起来也与之对应。个人觉得很好记忆。 好了,该说说主角umsk了,这玩意儿设定的就是我们用户创建文件的权限我们使用umask命令可以查看当前用户的umask设定,一般用户为0002,我们只看后三位002,002是什么鬼,只能写? 我们要知道umask设定的是文件的默认权限,但是我们说了系统默认是不给新创建的文件执行权限的,但是目录怎么办?目录没有执行权限就无法cd,不人道。所以umask(又叫遮罩码)的设计就是 1、如果用户创建的是文件,那么就用666-umask的值作为文件的权限 2、如果用户创建的是一个目录,那么就用777-umask的值作为目录的权限 如果用户创建的是文件,那么666-002=664 664是什么?即 w r – w r – r – -为了显示清楚我加了空格实际上是没有的。 如果用户创建的是目录,那么777-002=775 775展开就是rwxrwxr-x,就这么简单。 如果我非得让新创建的文件具有执行权限,在办?使用umask 111 更改默认权限试试?结果并不是我们想象的的那样美好,是不是?新建的文件中并没有执行权限……都变成了读写权限,都多了1,怎么回事儿?这个就是linux的强大之处了,linux会默认将具有执行权限的文件权限自动+1,这是linux的一种安全机制,遵守即可,这样的话那岂不是不能运行自己写的程序脚本了? 非也非也,我们可以使用chmod命令来实现文件权限的修改。 chmod可以修改三类用户的权限,也可以修改某类用户的权限,还可以修改某类用户的某个权限。 chmod 755 filename 修改一个文件的三类用户权限 chmod u=rwx filename 修改一个用户的权限 u其实是user的缩写 chmod g=rx filename 修改一个用户组的权限,group的缩写 chmod o=r fileme 修改其他人的权限,other的缩写 chmod u+x filename 给用户执行权限 chmod o-x filename 取消其他人的执行权限 另外我们可能会需要修改一个文件夹里所有的文件权限,包括其子目录下的文件等等,我们总不能一个一个的去改吧? -R 递归修改(–reference)可以实现目录下所有文件权限的修改,包括其子目录下的所有文件。 有了权限的划分,我们的小秘密就不怕别人知道了,咳咳,超人不算人……因为其他人在不属于文件创建者所在组的话,只具有其他人的身份,而其他人的访问权限我们是可以更改的。怎么更改?嗯,我们现在还是披着超人外衣的用户,所以为了稳定操作,我们还是整一个普通用户,我们只需要两步就可以创建一个新用户了。是的,使用命令进行操作。 useradd username useradd就是我们添加用户的命令,至于名字嘛,高兴就好,取个什么canglaoshi也是可以的,useradd命令不加任何参数的话是可以按照默认的规则添加用户的,但是像我这种比较贱的非要自己定义一下怎么办? 这个就需要使用到命令的选项了,useradd具有如下选项: -u 指定用户的UID,UID是啥呢?这玩意儿就和咱的身份证差不多,计算机处理数字的能力比处理字符的能力强太 多,所以系统识别用户是靠UID来识别的,以提高效率。普通用户UID在500-65535之间,,只要不重复,想咋用咋用。但是为了方便管理,如果不指定,系统会按照已经给过的最大UID为基准,以递增的方式依次赋给用户。 -g 指定基本组,前提是这个组事先是存在的,否则就会报错。 -G 指定额外组,我们可以加入多个小组,小组之间用逗号隔开。 -c 指定用户的注释信息,什么家在哪里、电话号码之类的,不过很少会用到。 -s 指定用户shell的绝对路径,一般来说只有系统认为安全的shell才可以被指定,那么系统觉得安全的shell放在哪里?一 般来说系统觉得安全的shell放在/etc/shells目录下,这里边就有之前说的什么cshell、tcshell等等。 -m 强制为用户创建家目录,家目录里保存了用户的环境配置信息,所以每一个用户才可以自定义登陆后的环境。 -m通常和-k一起使用,-k就是从/etc/skel下拷贝环境配置模板到用户家目录下,并将属主和属组更改为当前创 建的用户,/etc/skel中存放了shell的环境配置文件,这个在更改权限的时候再讲,先存疑。 -M 不创建家目录,是的,连家都没有的光杆司令,所以也就没有相应的shell环境变量配置文件,也就没有办法实 现环境的配置。 -r 添加系统用户,系统用户是什么鬼,简单地说,系统用户就是执行后台服务的特殊用户,系统用户一般没有登 录系统的权限,不是没有,是压根儿就没想让系统用户能登录操作系统。特殊用户UID从1-499 好多……就连我都有深深的罪恶感了,难道添加个用户这么麻烦?非也,就像之前说的,复杂的命令都是有配置文件的,useradd的配置文件在/etc/default/useradd,在这里面对用户的诸多选项进行了默认设置,所以没有特殊需要一般使用useradd直接添加用户就好了。 俗话说创造难毁灭易,在这里也是适用的,咱辛辛苦苦添加的用户,可以通过一个简单的命令删除的连毛都不剩。 userdel username ,是的,就这么简单,仅有一个-r的选项,供我们删除家目录,这个是不是有点狠,有点把人家干掉还把房子干掉的感觉……罪过啊罪过。 如果我们一激动不小心添加用户的时候把名字搞错了,咋整,改名这件事是可以办到的使用usermod命令就可以办到。 usermod [option] username 这个命令的使用有一个要求,你得先登录这个用户才可以,我们使用root命令先切换过去:su – username -l 更改用户名 -e 定义用户的过期时间,格式为年月日 -f 非活动时间(禁止但没有过期的时间) -L 锁定用户账号 -U 解锁用户 -G 添加额外组(附加组),会覆盖之前的操作覆盖,需要同-a选项一起使用,追加附加组。 -d 指定新的家目录,同时应当跟上-m参数,改变家目录的同时将此前家目录中的文件移动至新的家目录中。如果 没有这么操作,就会发生用户无法访问之前的家目录的情况。 讲了半天都没有涉及到密码操作,额……因为我们之前没有设置新用户的登录密码,所以系统是不能登录的,但是可以再已经登录的shell中进行切换 切换的命令就是su ,这个su命令比较好玩,它有两种情况一种称为完全切换,就是su – username,中间有个短横线,而另一种称为不完全切换,就是不加短横线的情况,这个从家目录的位置可以看出来,完全切换是将用户的家目录一同切换,而不完全切换则没有切换到用户的家目录下,也就是说没有被切换用户的shell环境。这个操作一下就能够体会得到。 设置密码的命令是passwd,password的缩写,其实我觉得这缩写不够简洁,缩就缩嘛,还非得只缩减俩字符……好歹也是缩减嘛…… passwd的命令还是相当简单的格式如下 passwd 回车就可以更改当前用户的密码,root用户比较厉害,可以指定任何一个用户,然后修改其密码,所以说超人不是人啊…… 有了密码我们就可以正常的登录操作了,linux操作系统默认是不允许空密码的用户进行登录的,所我们只能够su过去。 passwd有一个选项比较厉害:–stdin,这个选项支持从标准输入接收,突然觉得很乱,是不是?!什么叫标准输入?!这个在脚本的时候会讲,什么!还有脚本?!嗯,是的,不然怎么叫成神路,这是一条布满荆棘的羊肠小道,很多人被拦在了路途中……但就算是这样也要暴力通过,哪怕是九死一生,额……有点夸张,死是肯定不会的。 现在我们已经具有一个用户账户了,而且也可以随意的修改属性。 那么我们能不能单独建一个组?答案是可以的,我们可以使用groupadd添加一个用户组,同样的可以指定其GID等等 说一说组管理命令 groupadd 组名 -g 指定GID -r 添加一个系统组,有点像useradd中的-r 哦 groupdel 组名 作用是删除用户组 groupmod 修改组属性,同样的需要是用户组的成员才可以 -g 改变GID -n 改变组名 gpasswd 添加组密码,这个就神奇了,不能登陆还有密码?事实上组密码只是用于验证一个非组内用户添加该组为基本组或者额外组的。 如果我们不属于一个组的组员,但是我需要临时访问这个组。我们可以使用newgrp 登录为一个新的用户组,这时候组密码就会发生作用了,newgrp具有登录属性,我们可以按需使用exit退出。 嗯……我发现我逼逼叨叨的有点多,好了此次暂时结束,下一讲将会涉及一些关于权限和系统目录。 给自己讲linux 2016-12-09 评论 1486 次浏览