您的位置:首页 > 运维架构 > Shell

shell总结:进程、环境变量、文件权限

2017-09-30 18:42 232 查看
进程列表:

进程列表是一种命令分组(command grouping)。另一种命令分组是将命令放入花括号中,并在命令列表尾部加上分号(;)。语法为 { command; } 。使用花括号进行命令分组并不会像进程列表那样创建出子shell。

(pwd;.....;echo $BASH_SUBSHELL)
使用进程列表创建子shell执行相应命令,支持嵌套,创建多个子shell。


后台模式:

sleep num &    &将命令置入后台,暂停num秒钟。[1]表示后台job号,后接后台PID。
jobs -l        -l详细列出后台作业信息。
xxx@ubuntu:~/test$ sleep 60 &
[1] 118766
xxx@ubuntu:~/test$ ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
1009      73059  73058  0 Sep28 pts/0    00:00:01 -bash
1009     118766  73059  0 10:38 pts/0    00:00:00 sleep 60
1009     118931  73059  0 10:38 pts/0    00:00:00 ps -f


协程:

协程coproc直接创建子shell进入后台模式,等于进程列表+&
@ubuntu:~/test$ coproc sleep 15
[1] 12250
@ubuntu:~/test$ ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
1009      12250  73059  0 11:10 pts/0    00:00:00 sleep 15
1009      12251  73059  0 11:10 pts/0    00:00:00 ps -f
1009      73059  73058  0 Sep28 pts/0    00:00:01 -bash


内建命令:

1.外部命令:

文件系统命令,存在shell命令之外的程序。

一般在/bin /usr/bin /sbin /usr/sbin。可以使用which和type命令查找到它。

@ubuntu:~/test$ which ps
/bin/ps
@ubuntu:~/test$ type ps
ps is hashed (/bin/ps)


外部命令会forking(衍生)出一个子进程。

2.内建命令:

内建命令不会forking子进程。

但有可能同个命令既包含外部命令又包含内建命令,可通过type -a查询。

@ubuntu:~/test$ type -a echo
echo is a shell builtin
echo is /bin/echo


3.history

history  查询输入过的命令。
!!      执行上一条命令。
!num     执行第num条命令。


4.命令别名

alias -p  查看支持的别名
alias li='ls -li' 创建命令别名


环境变量:

1.全局环境变量

对shell和所有生成的子shell都是可见的。系统环境变量一般用全大写表示。

查看环境变量方法:
env或者printenv
printenv 变量名


2.局部变量

变量是局部的,只有在定义它们的进程中可见。linux没有直接查看局部变量的命令。

set  排序并打印进程的所有环境变量,包含全局变量、局部变量以及用户自定义变量。


3.设置用户自定义变量

用户自定义变量一般使用小写字符串定义,区别全局变量,且使用=号赋值,如果中间有空格要加引号。

my_variable=Hello
my_variable="Hello World"


手动设置全局环境变量,先设置局部环境变量,然后用export导出局部环境变量即可。

my_variable=Hello
export my_variable


4.删除环境变量

使用unset命令删除环境变量

unset my_variable

注意:
如果要用到变量,使用$;如果要操作变量,不使用$。这条规则的一个例外就是使用printenv 显示某个变量的值。
如果你是在子进程中删除了一个全局环境变量,这只对子进程有效。该全局环境变量在父进程中依然可用。


5.设置PATH环境变量

手动添加执行程序PATH变量。可以把新的搜索目录添加到现有的 PATH 环境变量中,无需从头定义。 PATH 中各个目录之间是用冒号分隔的。只需引用原来的 PATH 值,然后再给这个字符串添加新目录就行了。

PATH=$PATH:/home/christine/Scripts


如果希望子shell也能找到你的程序的位置,一定要记得把修改后的 PATH 环境变量导出。

登录shell:

1./etc/profile文件是系统上默认的bash shell的主启动文件。系统上的每个用户登录时都会执行这个启动文件。

数组变量:

环境变量可以作为数组使用。但要配合数组索引值。使用通配符可显示全部变量。也可以使用unset删除某个环境变量。

mytest=(one two three four five)
echo $mytest
one
echo ${mytest[2]}
three
echo ${mytest[*]}
one two three four five
unset mytest[2]


文件权限:

系统用专门的一个文件匹配用户UID,root用户UID固定分配为0.

@ubuntu:/etc/profile.d$ cat /etc/passwd | egrep xxx
xxx:x:1009:1009:,,,:/home/xxx:/bin/bash
root:x:0:0:root:/r
4000
oot:/bin/bash


用户名和密码被保存在/etc/shadow文件,只有特定用户可以访问。

xxx@ubuntu:/$ cat /etc/shadow
cat: /etc/shadow: Permission denied
可以访问的如:
rich:$1$.FfcK0ns$f1UgiyHQ25wrB/hykCn020:11627:0:99999:7:::


修改用户:

usermod

添加新用户:

使用useradd命令添加新用户,useradd使用系统默认值以及命令参数创建新用户,并把系统默认值保存在/etc/default/useradd目录下,

/usr/sbin/useradd -D  查看系统默认值
useradd -D -s /bin/tesch 可更改系统默认shell
-b default_home  更改默认HOME路径
-g group         更改默认用户组
。。。。。


删除用户:

删除用户只是删除在/etc/passwd中的相关信息,不会把所有用户程序资料都删除。

/usr/sbin/userdel -r username
ls -l /home/username
ls: cannot access /home/username: No such file or directory


修改密码:

passwd username         修改用户自己密码
passwd -e username      强制用户下次登录修改密码
chpasswd < users.text   批量修改用户密码


修改用户信息:

可以用finger查看用户信息,但很多linux默认没有安装finger

finger username
chsh -s /bin/csh username   修改用户默认shell
chfn username               询问哪些内容适合加入备注字段,可以从/etc/passwd查看。
chage                       管理账户的有效期


组group管理:

系统组信息都保存在/etc/group

格式为:组名:组密码:GID:属于改组的用户列表

root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:android
------------------
username1:x:1001:
username2:x:1002:


注:在列表中,有些组并没有列出用户。这并不是说这些组没有成员。当一个用户在/etc/passwd文件中指定某个组作为默认组时,用户账户不会作为该组成员再出现在/etc/group文件中。

创建新组:

/usr/sbin/groupadd newgroup
tail /etc/group


添加用户到新组:

/usr/sbin/usermod -G newgroup username
tail /etc/group


修改组:

/usr/sbin/groupmod -g newgid -n  newgroup oldgroup
修改oldgroup组名为newgroup,gid为newgid。
所有安全权限是基于GID,组名可以随意修改,不影响安全性。


默认文件权限:

文件权限通过umask设置

umask    查看用户默认umask值
0022     第一个0表示粘着位,后三位表示权限,但它是八进制的掩码值。


文件全权限为666,目录全权限为777.

新建文件权限=全权限-umask

在Ubuntu系统,umask默认值设置在cat /etc/login.defs文件,UMASK 022

改变安全性设置:

改变权限

chmod
a 全部 u 所有者  g 所属组  o 其它人
r 读  w  写     x 执行
chmod 777  等价于  chmod a=rwx
chmod 771 等价于   chmod ug=rwx o=x


改变所属关系

chown owner file 改变文件的所有者
chgrp group file 改变文件的所属组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: