u:属主
g:属组
o:其他用户
只有文件主和超级用户才可以便用该命令
改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,
使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户ID,
用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
chown Flie,...
参数
-R:递归修改目录及其内部文件的属主
--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同
--reference=/path/to/somefile file,...
同时修改属主与属组
chown USERNAME:GRPNAME file,...
chown USERNAME.GRPNAME file,...
用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。
其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以是由空格分开的要改变属组的文件列表,
也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组
chgrp
参数
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
变更文件与目录的权限,设置方式采用文字或数字代号皆可
符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。
chomd MODE file,...
chomd 750 /tmp/xyz
chomd 75 /tmpxyz 75 意味着 075
chomd 75 /tmpxyz 5 意味着 005
参数
-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
u User,即文件或目录的拥有者;
g Group,即文件或目录的所属群组;
o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
a All,即全部的用户,包含拥有者,所属群组以及其他用户;
chomd 用户类别=MODE file,...
例子:
chmod u=rw- /tmp/x
chmod u=rwx,go=r /tmp/x
u,g,a,o
chmod 用户类别+|-MODE file,...
实例
chmod u-x /tmp/xyz
chomd +x /tmp/xyz
例子:
1、新建一个没有家目录的用户openstack
useradd -M openstack
2、复制/etc/skel为/home/openstack
cp -r /etc/skel /home/openstack
3、改变/home/openstack及内部文件的属主属组均为openstack
chown -R openstack:openstack /home/openstack
4、/home/openstack及其内部的文件,属组与其他用户没有任何访问权限
chmod -R go=--- /home/openstack
验证
su - openstack
which passwd 查看路径
一种支持任意精度的交互执行的计算器语言。bash内置了对整数四则运算的支持,但是并不支持浮点运
bc 运算法则
scalc=2 保留两位精度
quit 退出
实例
算术操作高级运算bc命令它可以执行浮点运算和一些高级函数:
echo "1.212*3" | bc
3.636
设定小数精度(数值范围)
echo "scale=2;3/8" | bc
0.37
参数scale=2是将bc输出结果的小数位设置为2位。
进制转
#!/bin/bash
abc=192
echo "obase=2;$abc" | bc
计算平方和平方根:
echo "10^10" | bc
echo "sqrt(100)" | bc
penssl passwd的作用是用来计算密码hash的,目的是为了防止密码以明文的形式出现。
语法格式:
openssl passwd [options] [password]
openssl passwd常用的选项如下:
-1:表示采用的是MD5加密算法。
-in:表示和文件中读取密码
-stdin:从标准输入读取密码
-salt:指定salt值,不实用随机产生的salt。在使用加密算法进行加密时,即使密码一样,salt不一样,所计算出来的hash值也不一样,除非密码一样,salt值也一样,计算出来的hash值才一样。salt为8字节的字符串。
例子
[root@Server3 ~]# openssl passwd -1 -salt '12345678'
Password:
$1$12345678$0ME5N6oDyoEAwUp7b5UDM/
手动添加用户hive,基本组hive(5000),附加组mygroup
1)添加组名,组ID,将hive添加到附加组mygroup
nano /etc/group
2)添加用户
nano /etc/passwd
3)添加用户,密码位置为!!,日期,最短使用期限(0 不限定),最长使用期限(999 不限定)
nano /etc/shdow
4)将登陆配置信息复制到hive(不存在时,会自动创建)的家目录当中
cp /etc/skel /home/hive
5)修改属主与属组均为hive
chown -R hive.hive /home/hive
6)修改属组与其他用户权限,均为无权限
chomd -R go= /home/hive
验证 ls -la /home/hive
此时可以用su - USERNAME,但不能用于登陆
7)生成密码串
openssl passwd -1 -salt '12345678' //-1 加密种类 1代表md5 -salt 添加杂质
之后将生成的密码复制粘贴到/etc/shdow 中hive的密码位置(原来是!!)
8)登陆,进行验证
管理员创建(root),普通用户创建的文件默认权限不一样
为了安全起见,文件默认没有执行权限,这是一个Linux的一个法则
创建目录777-umask
创建文件666-umask
用来设置限制新建文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行, 并自动设置掩码mode来限制新文件的权限。用户可以通过再次执行umask命令来改变默认值,新的权限将会把旧的覆盖掉。
-p:输出的权限掩码可直接作为指令来执行;
-S:以符号方式输出权限掩码。
利用umask命令可以指定哪些权限将在新文件的默认权限中被删除。例如,可以使用下面的命令创建掩码,使得组用户的写权限,其他用户的读、写和执行权限都被取消:
umask u=, g=w, o=rwx
执行该命令以后,对于下面创建的新文件,其文件主的权限未做任何改变,而组用户没有写权限,其他用户的所有权限都被取消。
应注意:操作符“=”在umask命令和chmod命令中的作用恰恰相反。在chmod命令中,利用它来设置指定的权限,而其余权限则被删除;但是在umask命令中,它将在原有权限的基础上删除指定的权限。
不能直接利用umask命令创建一个可执行的文件,用户只能在其后利用chmod命令使它具有执行权限。假设执行了命令umask u=, g=w, o=rwx,虽然在命令行中,没有删去文件主和组用户的执行权限,但默认的文件权限还是640(即 rw-r-----),而不是750(rwxr-x---)。但是,如果创建的是目录或者通过编译程序创建的一个可执行文件,将不受此限制。在这种情况 下,会设置文件的执行权限。
也可以使用八进制数值来设置mode。由于在umask中所指定的权限是要从文件中删除的,所以,如果该文件原来的初始化权限是777,那么执行命令umask 022以后,该文件的权限将变为755:如果该文件原来的初始化权限是666,那么该文件的权限将变为644。
可以使用下面的命令检查新创建文件的默认权限:
umask -s
选项-s表示以字符形式显示当前的掩码。如果直接输入umask命令,不带任何参数,那么将以八进制形式显示当前的掩码。系统默认的掩码是0022。
例子:
[root@localhost zeak]# umask
0022
[zeak@localhost ~]$ umask
0002
只用看后三位即可
所以对于root而言,创建目录默认权限755,创建文件默认权限644
而对于普通用户而言,创建目录默认权限775,创建文件默认权限664
$umask 002
#umask 022
[zeak@localhost ~]$ umask 023
[zeak@localhost ~]$ touch file
[zeak@localhost ~]$ mkdir dir
-rw-r--r--. 1 zeak zeak 0 Oct 4 05:46 file
drwxr-xr--. 2 zeak zeak 4096 Oct 4 05:46 dir
目录dir的权限符合正常情况(754),而对于文件file而言,比不符合正常情况643,
而是变成了644,原因,Linux默认不会分配执行权限,若算的权限有执行权限,则权限自动加1
站在用户的角度而言
登陆式shell
1)正常通过某终端登录
2) su命令切换 su -l USERNAME 或者 su - USERNAME
非登录式shell
1) su NAMEME
2)图形终端下打开的命令窗口
3)自动执行的shell脚本
查看当前系统支持的shell
cat/etc/shells
echo $0
env | grep SHELL
cat /etc/passwd | grep USERNAME
1.ash
ash Shell是由Kenneth Almquist编写的,是Linux中占用系统资源最少的一个小Shell,它只包含24个内部命令,因而使用起来很不方便。
2.bash
bash是Linux系统默认使用的Shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。Linux使用它作为默认的Shell是因为它有以下的特色:
(1)可以使用类似DOS下面的doskey的功能,用上下方向键查阅和快速输入并修改命令。
(2)自动通过查找匹配的方式,给出以某字串开头的命令。
(3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。
3.ksh
ksh是Korn Shell的缩写,由Eric Gisin编写,共有42条内部命令。该Shell最大的优点是几乎和商业发行版的ksh完全相容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。
4.csh
csh是Linux比较大的内核,它由以William Joy为代表的共计47位作者编成,共有52个内部命令。该Shell其实是指向/bin/tcsh这样的一个Shell,也就是说,csh其实就是tcsh。
5.zch
zch是Linux最大的Shell之一,由Paul Falstad完成,共有84个内部命令。如果只是一般的用途,是没有必要安装这样的Shell的。
有两类
1、按照作用范围
全局配置
配置文件 /etc/profile,/etc/profile.d/*.sh(所有已.sh结尾的文件),/etc/bashrc
个人配置
配置文件(用户家目录下) ~/.bash_profile,~/.bashrc
2、按照类型
profile类的文件
作用
1)设定环境变量
全局生效 /etc/profile,/etc/profile.d/xxx.sh(创建一个)
个人生效 ~/.bash_profile
如果两者都有配置,但是配置不一样,以个人为准
作用范围越小,越是最终生效
2)运行命令或者脚本
用户一登录就运行
bashrc类的文件
1)设定本地变量
2)定义命令别名
/etc/profile-->/etc/profile.d/*.sh-->~/.bash_profile-->~/.bashrc -->/etc/bashrc
~/.bashrc-->/etc/bashrc-->/etc/profile.d/*.sh
su - USERNAME 与 su -l USERNAME 完全切换
su USERNAME 不完全切换,不读取/etc/profile与~/.bash_profile 不读取用户的环境设定
实线的方向是主线流程,虚线的方向是被文件/etc/profile或者~/.bash_profile调用的配置文件。
在~/.bashrc 下添加命令别名
alias cls=clear
用户每次登录都会生效
在~/.bash_profile添加命令 每次登陆都会问候用户
echo "Hello,zeak,Welcome to your system. It is `date`"
/etc/bashrc 对于用户umask的设定
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi