Linux用户

Linux是多用户所任务系统。每个用户账号可以属于一个或多个组。在/etc/passwd 中。存放用户账户信息

[root@xingzheson ~]# head /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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

文件中的每一行都对应一个账号。每行有七列,我来说下分别对应什么

  1. 用户名

  2. 用户密码

  3. 用户ID

  4. 组ID

  5. 用户别名

  6. 用户家目录

  7. 用户shell

可以发现一个问题,那就是用户密码显示为“x”,其实,真正加密后的密码存放在/etc/shadow中,可以看一下

[root@xingzheson ~]# head /etc/shadow
root:$6$dwez01IFO0l.HprX$.Qq67VBryYgaETeYuYapuNrJUASIDSKwWjRMO8.cv0/d3q9ynpXiIr0iwewqEn7dbNSE50NZfX0vyf5s4jG26.:16250:0:99999:7:::
bin:*:14790:0:99999:7:::
daemon:*:14790:0:99999:7:::
adm:*:14790:0:99999:7:::
lp:*:14790:0:99999:7:::
sync:*:14790:0:99999:7:::
shutdown:*:14790:0:99999:7:::
halt:*:14790:0:99999:7:::
mail:*:14790:0:99999:7:::
uucp:*:14790:0:99999:7:::

每一行有9段,分析下

  1. 用户名

  2. 加密后的屏蔽口令

  3. 加密后最后的更改日期。表示从1970-1-1至今的天数

  4. 密码至少保留的天数,0为不限制

  5. 密码在多少天后必须更改

  6. 密码到期前,提前多少天提醒

  7. 在密码过期后的多少天,账号被认为失效

  8. 账号过期时间。从1970-1-1 至今

  9. 保留标志,无意义

 

 

Linux组信息,存放在/etc/group文件中。

[root@xingzheson ~]# head /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root
lp:x:7:daemon,lp
mem:x:8:
kmem:x:9:

有四列

  1. 组名

  2. 组密码

  3. 组ID

  4. 组中的用户列表,用户名之间以逗号分开

同理密码存放在/etc/gshadow中

[root@xingzheson ~]# head /etc/gshadow
root:::root
bin:::root,bin,daemon
daemon:::root,bin,daemon
sys:::root,bin,adm
adm:::root,adm,daemon
tty:::
disk:::root
lp:::daemon,lp
mem:::
kmem:::

 

管理Linux组

增加Linux组

groupadd [-g <组ID>  [-o] ]  [-r]  [-f]  组名

参数:

-g <组ID> [-o]   指定组ID,没有使用-o参数时,组ID是唯一的

-r    使用这个参数是,建立的组ID小于499,即建立系统组

-f    当添加一个已经存在的组时,不返回错误信息

在增加组时,groupadd 会读取/etc/login.defs,这个文件中设定了新增组ID的范围,默认情况下是500-60000.一般认为组ID大于500就为用户组,而组ID小于500则是系统组

例:

添加一个名为newgroup的用户组

[root@xingzheson ~]# groupadd newgroup

 

 

修改Linux组

root用户使用groupmod修改Linux组

groupmod [-g  <组ID>  [-o]  [-n <新的组名>] 组名称

参数:

-g    <组ID> [-o]      将组ID修改为指定值,没有使用-o时,组ID是唯一的

-n    <新的组名称>    将目标组的组名称改为新的组名称

 

将newgroup 的名称改为groupnew,组ID为50000

[root@xingzheson ~]# groupmod -g 50000 -n groupnew  newgroup

 

删除Linux组

groupdel 组名

[root@xingzheson ~]# groupdel groupnew

 

管理Linux用户

增加用户

useradd

参数:

-d <家目录>        指定用户家目录

-g<组名>             指定用户所属的组

-G<组名>             指定用户所属的组,可以指定多个组,组织间用逗号分隔

-m                         创建用户家目录

-p<密码>              设定用户密码

-s<shell>               指定用户shell程序

 

创建用户Leon,并且指定用户组为root组,shell为 /bin/bash:

[root@xingzheson ~]# useradd -g root -s /bin/bash leon

设置密码

[root@xingzheson ~]# passwd leon

 

修改Linux用户

usermod  修改用户

参数:

-e<日期>   指定账号到期的日期,格式为YYYY-MM-DD

-f<天数>    在账户到期后的多少天后,账号被禁止

其他参数同上

 

将leon的shell改为/bin/abc, 所属组改为bin

[root@xingzheson ~]# usermod -s /bin/abc -g bin leon

 

 

删除用户

userdel [-r]  用户名

-r的意思是删除家目录下的所有文件

 

 

 

进程管理

ps显示当前进程

ps -a  显示所有进程

ps aux 常用 显示系统所有进程及使用者

[root@xingzheson ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  19244  1424 ?        Ss   11:47   0:02 /sbin/init
root         2  0.0  0.0      0     0 ?        S    11:47   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    11:47   0:00 [migration/0]
root         4  0.0  0.0      0     0 ?        S    11:47   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S    11:47   0:00 [watchdog/0]
root         6  0.0  0.0      0     0 ?        S    11:47   0:00 [events/0]
root         7  0.0  0.0      0     0 ?        S    11:47   0:00 [cpuset]
root         8  0.0  0.0      0     0 ?        S    11:47   0:00 [khelper]
root         9  0.0  0.0      0     0 ?        S    11:47   0:00 [netns]
root        10  0.0  0.0      0     0 ?        S    11:47   0:00 [async/mgr]
root        11  0.0  0.0      0     0 ?        S    11:47   0:00 [pm]
root        12  0.0  0.0      0     0 ?        S    11:47   0:00 [sync_supers]
root        13  0.0  0.0      0     0 ?        S    11:47   0:00 [bdi-default]
root        14  0.0  0.0      0     0 ?        S    11:47   0:00 [kintegrityd/0]
root        15  0.0  0.0      0     0 ?        S    11:47   0:00 [kblockd/0]
root        16  0.0  0.0      0     0 ?        S    11:47   0:00 [kacpid]
root        17  0.0  0.0      0     0 ?        S    11:47   0:00 [kacpi_notify]
root        18  0.0  0.0      0     0 ?        S    11:47   0:00 [kacpi_hotplug]

 

这11列输出内容分别对应:用户名、进程号、CPU占用率、内存占用率、虚拟内存占用、驻留内存、终端、状态、开始时间、运行时间、运行命令

 

运行进程

分为前台进程和后台进程,运行前台进程,登录系统后,在shell提示符下直接输出命令即可

运行后台进程,加一个&符号

[root@xingzheson ~]# find / -name "*.conf" > /tmp/result &
[1] 3230

可以看到,执行完这个命令后,输出[1] 3230,其中1表示后台进程程序序列号,3230则是进程号。使用jobs可以查看后台程序序列号及执行情况:

[root@xingzheson ~]# jobs
[1]+  Done                    find / -name "*.conf" > /tmp/result

表示已经完成

 

上面的方法有个缺点,就是如果关闭终端,则运行在后台的进程也会被关闭

可以使用nohup

[root@xingzheson ~]# nohup find / -name "*.conf" > /tmp/result &
[1] 3241

 

使用at定时执行命令

直接举例子了啊,太累了

2010-08-16的8:45 PM:

[root@xingzheson ~]# at 08:45 PM 081610

 

3天后的下午3点

[root@xingzheson ~]# at 3 PM +3 days

 

20分钟后

[root@xingzheson ~]# at now + 20 minutes

 

2月14日的下午

[root@xingzheson ~]# at noon Feb 14

 

可以用atq查看at任务,删除某个任务atrm + 列表号

 

 

crontab定期执行任务

使用crontab -e 来编辑当前用户的周期执行任务

语法:

<分钟> <小时>  <日> <月>  <星期> 命令

例子:

每个月的每一天的每一分钟,都执行ls 命令:

*       *       *       *       *       ls

如果想每隔20分钟执行一次ls,则

20      *       *       *       *       ls

 

每个月的1-10号,每隔20分钟执行ls

20      *       1-10    *       *       ls

 

用crontab -l 可以查看所有crond任务

可以使用crontab -r 删除当前用户的所有crond任务

root 用户可以通过-u 参数指定用户,然后对该用户的crond任务进行修改等操作,修改leon 用户的crond任务

[root@xingzheson ~]# crontab -e -u leon

 

 

 

调整进程优先级

优先级高的进程,将拥有较多的CPU使用时间,优先级低的相反。优先级用数字表示 从-20到19。-20为最高优先级,19为最低优先级。查看优先级 ps -elf

使用nice [-数字] [命令 [参数] ]

如:

[root@xingzheson ~]# nice --20 sleep 1000

如果不指定优先级数字,那么命令优先级为10

[root@xingzheson ~]# nice sleep 1000

 

在进程运行时调整优先级

使用renice 命令可以在进程运行时调整优先级,语法:

renice 优先级数字 [ [-p] 进程号]  [ [-g]组名 ] [ [-u]用户名 ]

 

 

终止进程

kill [-s 信号 | -p] [-a] [--] 进程号

kill -l 信号

参数:

-s<信号>    制定发送的信号

-p                只显示进程号

-l                  信号列表

[root@xingzheson ~]# kill -l
 1) SIGHUP  2) SIGINT  3) SIGQUIT  4) SIGILL  5) SIGTRAP
 6) SIGABRT  7) SIGBUS  8) SIGFPE  9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX 

 

如果在kill -l 后加上信号名/信号数字,则会输出对应的信号数字/信号名

[root@xingzheson ~]# kill -l KILL
9
[root@xingzheson ~]# kill -l 9
KILL

 

结束进程

结束6223的进程

kil 6334

 

其实默认的发送的事15的信号,有时候15的不行,就要用9强制结束信号,这个很厉害的

kill -9 23342