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
文件中的每一行都对应一个账号。每行有七列,我来说下分别对应什么
用户名
用户密码
用户ID
组ID
用户别名
用户家目录
用户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段,分析下
用户名
加密后的屏蔽口令
加密后最后的更改日期。表示从1970-1-1至今的天数
密码至少保留的天数,0为不限制
密码在多少天后必须更改
密码到期前,提前多少天提醒
在密码过期后的多少天,账号被认为失效
账号过期时间。从1970-1-1 至今
保留标志,无意义
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:
有四列
组名
组密码
组ID
组中的用户列表,用户名之间以逗号分开
同理密码存放在/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
创建用户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