查看当前登录用户所在的组 groups ; 查看所有组 cat/etc/group
查看当前登录用户 w 或者who 查看自己的用户名whoami
查看所有用户cut -d : -f 1 /etc/passwd
切换用户 su - 用户名
命名 . 隐藏文件 大小写敏感
目录 . 当前目录 ..当前目录的父目录
ls (list) -a 显示所有文件(包括隐藏文件)
-l 详细信息显示
-d 查看目录属性
-i (inode)显示文件标识符(内核识别用)
drwxr-xr-x 2 root root 4096
文件类型 d 目录directory 所有者 所属组 其他人
- 二进制文件 owner group other
l 链接文件link
read write execute执行
cd cd .. pwd
touch 文件名 创建空文件
mkdir 目录名 创建目录
cp 可以把多个文件复制到一个地方
cp -R dir1 dir2 复制目录
-p 保持备份目录及文件属性(文件修改的时间等)
-u 增量备份 cp -Rpu
远程备份可用 scp
mv dir1源 dir2目的 1、剪切
mv a b 2、改名
rm 【-r】 删除文件【目录】
rm -f 强制删除
cat 文件名 显示文件内容
more 文件名 显示文件内容 空格/f 显示下一页
enter 显示下一行
q 退出
head -num 文件名 查看文件前num行
tail -num 文件名 查看文件后num行
-f 文件名 动态显示文件内容
ln -s 源文件 目标文件 软链接
ln 源文件目标文件 硬链接
1、软链接 lrwxrwxrwx --> 10 时间值(创建的时间) 类似快捷方式;源文件删除,则无意义;可以在不同的分区
2、硬链接 源文件不在他还可以在;相当于cp,但同步更新,因为其和源文件有相同的文件标识符(inode,i节点);
不能跨分区,只能和源文件在一个分区下
chmod u + r 文件名 u-所有者 chmod u+wx
g - w g-所属组 chomd g=rwx
o = x o-其他人 chmod o-rx
chmod 641 文件名 rwx可读可写可执行 r-4 w-2 x-1
文件目录rwx属性意义
文件 目录
r 可以查看文件的内容cat,more,head,tail ls 可列出目录内容
w 可以修改文件的内容echo,vi touch,mkdir,rm可在目录中创建、删除文件
x 可以执行文件,命令、脚本 cd可以进入目录
chown 用户名 文件/目录名 改变文件/目录名的所有者(chownwangt test;将test文件是所有者改为wangt)
chgrp 用户名 文件/目录名 改变文件/目录名的所属组
umask -S 显示、设置文件/目录的缺省(默认)权限
umask (可能得到0022 0-特殊权限位; 022-用户权限位权限掩码值)
linux中缺省创建的文件不能授予可执行的x权限(目录可以),所以777-022-111即为默认创建文件的权限
umask 027 (即777-027=750默认目录为rwxr-x---而文件-111=640)
文件搜索命令
which 命令; 显示系统命令所在的目录,还有命令的别名信息
whereis 命令; 显示系统命令所在的目录,还有帮助信息,及帮助信息所在的路径
find 【搜索路径】【 搜索关键字】: 查找文件或目录
-name 文件名; eg:find /etc -name init
( * 匹配任意字符 init* ;? 匹配单个字符init???
-size 文件大小; block数据块 512字节=0.5KB,100MB=204800block
大于 + find / -size +204800
小于 -
等于 = find / -size 204800
-user 查找属于某一用户的文件 find /home -user wangt
-时间 1、天 ctimeatime mtime
2、分钟 cmin aminmmin
c-change改变,文件的属性被修改过,所有者、所有组、权限
a-access 访问,文件被浏览过
m-modify 修改,表示文件内容被修改过
3、+超过多少时间
-之内 find /etc -mmin -120 ;etc下120分钟之内被修改过的文件
-type 文件类型; f 二进制文件 l软链接 d目录
-连接符 1、 -a and 逻辑与; -o or逻辑或; find /etc -name init* -a -type l
2、 find_ _ _ _ -exec 命令 { } \ ; 有分号
-ok 会询问确认
{ }find查询的结果; \转义符 符号命令使用本身的含义
find /etc -name init* -a -type f -exec ls -l {} \;
-inum i节点 find . -inum 16 -exec rm {} \;
locate 关键字 查找文件或目录,只有linux系统有,在下面的数据库中查找,有时不更新数据库找不到,但速度比find快
updatedb 建立整个系统目录文件的数据库
grep 指定字串 源文件 在文件中搜索字串匹配的行并输出 grep ftp /etc/services
grep-v "^#" /etc/inittab | more 排除行首有#行
man manual命令或配置文件帮助 man 1 ls 命令(1可省略) man 5 passwd 配置文件
info 获得帮助
whatis -命令 基本用法,简短信息
命令 --help 命令的主要选项
apropos
makewhatis更新数据库
help 查看shell内置命令的帮助,cd,echo等,用man不行,安装shell时自带的命令
压缩解压命令(linux的压缩格式window都支持,但window的linux的不一定支持)
gzip file .gz 文件 1、只能压缩文件,不能压缩目录
2、不保留原文件
gunzip 或gip -d 解压缩
tar 选项 目录 打包目录 在压缩后格式 .tar.gz
-c 产生打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
tar -zcf newdir.tar.gz newdir 把newdir打包
-x 解包.tar文件
-v 显示详细信息
-f 指定解压文件
-z 解压缩
tar -zxvf dirl.tar.gz
file 文件 查看文件的类型
zip 可压缩文件和目录 .zip 默认window和linux通用格式 ,会保留原文件
-r 压缩目录 zip -r new.zip /etc/new
unzip 解压缩
bzip2 选项 文件 .bz2 eg: bzip2 -k new
-k 保留原文件
bunzip2 【-k保留压缩包】 解压
网络通信指令:
write 用户名 向另外一个用户发信息,以ctrl+D作为结束 eg:write wangt
wall [message] [文件名] 向所有用户广播信息(write all)
ping 选项 IP地址 测试网络连通性,网络时延time,丢包率packetloss
ping 127.0.0.1回环地址
-c num 定义发送请求包的数量
-s 数据包大小 定义发送请求包的大小
ifconfig 显示网卡信息 etho实际的物理网卡,lo回环地址的网卡
ifconfig etho ip 改ip
shutdown 关机
-h now 立即关机
reboot 重启
shell应用技巧bash
1、用Tab键进行命令补全
2、clear/ctrl +l
3、ctrl +u 删除一行
4、history 写过的命令列表
5、命令别名
alias 查询别名
alias copy=cp alias xrm="rm -i" 命令的组合要用引号
unalias 删除别名
输出重定向 0 对于每一个进程预先定义三个文件描述字0、1、2
ls -l /tmp > /temp.msg 把命令执行的信息重定向到文件中
date /tmp >> /temp.msg 把命令执行的信息追加到一个文件中
输入重定向 1
wall < /etc/issue
错误输出重定向 2
cp -R /usr /backup/usr.bak 2> /bak.error
ls /tmp 2> ls.err
管道:将一个命令的输出传送给另一个命令,作为另一个命令的输入
管道可以连接无数个命令 命令1|命令2|命令3...|命令n
ls -l /etc | more
ls -l /etc | grep init | wc -l 有几行
命令连接符
1、;间隔的命令顺序依次执行
2、&& 只有&&前面的命令执行成功后,他后面的命令才执行
command1 && command2
成功 执行
失败 不执行
ls && pwd
3、|| command1 || command2
成功 不执行
失败 执行
命令替换符:将一个命令的输出作为另一个命令的参数
ls-l `which touch`相当于 ls -l /bin/touch
Vim/Vi 文本编辑器:建立、编辑、显示文本文件
1、命令模式
定位:
h j k l 上下左右
$ 移到行尾
0 移到行首
H M L 移到屏幕的上、中、下
gg 到第一行
G 到最后一行
nG 或 :n 到第n行
:set nu 设置行号
:set nonu 取消行号
删除命令
x 删除光标所在处字符
nx 删除光标所在处后n个字符
ndd 删除n行
dG 删除光标所在行到文件末尾的内容
D 删除从光标所在处到行尾
:m,nd 删除指定范围的行
复制和剪切:
yy、Y 复制当前行
nyy 、nY 复制当前行以下n行
dd 剪切当前行
ndd 剪切当前行以下n行
p、P 粘贴在当前光标所在行下或行上
替换和取消
r 取代光标所在处字符
R 从光标所在处开始替换字符,按Esc结束
u 取消上一步操作
搜索和替换命令:
/string 向前搜索指定字符串,区分大小写。(搜索时忽略大小写:setic 区分set noic)
n ,N 搜索指定字符串的下/上一个出现位置
:%s/old/new/g 全文替换old成指定字符串new
:n1,n2s/old/new/g 在一定范围内替换指定字符串 g替换时不询问,c询问
2、插入模式
a 在光标后插入
i 在光标前插入
o 在光标下一行插入
A 在本行行末附加文本
I 在本行开始插入文本
O 在光标上插入新行
3、编辑模式
保存和退出命令
:w 保存修改
:w new_filename 另存为指定文件
:wq 保存修改并退出
ZZ 快捷键,保存修改并退出
:q! 不保存修改退出
:wq! 保存修改并退出(文件所有者可忽略文件的只读属性)
4、应用实例
:r 文件名 #导入文件 eg: :r /etc/test
:! #在Vi中执行命令 :! date :r ! date
:map 快捷键促发命令 :map ^PI#<ESC> ctrl+v ctrl+p
:map ^B 0x 按ctrl+b删除光标所在行首的一个字母
连续行注释 :n1,n2s/^/#/g (^表示行首,行首加#) :4,8/^#//g去掉4到8行行首#
:1,5s/^/\/\//g 在行首插入//,\为转义字符
:ab 替换 eg: :ab mymail zzwangtao911@126.com
:unab mymail
5、每一个用户都有一个宿主目录~ 缺省时
管理员 root /root
普通用户 wangt /home/wangt
~/.vimrc 是vi的配置文件 vi /root/.vimrc 或直接 vi ~/.vimrc
作用:在其中存放一堆命令,用Vi编辑文件时,命令直接生效,如快捷键等
系统引导流程
1、固件firmware(CMOS/BIOS) POST加电自检
硬件时钟hwclock 软件时钟(系统的时间,如date) hwclock--help 学习改变软/硬时间同步
2、自举程序BootLoader(GRUB) 载入内核
读取硬盘MBR,即主引导记录,其中保存了BootLoader、Partitiontable磁盘分区表、Magic Number结束标志字。载入GRUB。 vi /etc/grub.conf,grub的配置信息
3、载入内核 Kernel 驱动硬件
4、启动进程 init
init进程的pid=1, pid=0的进程为内核调度器,是init的父进程ppid。父进程停止,子进程必须停止;如果子进程不停止,即为孤儿进程,系统发现以后,自动把它的父进程指向
;子进程死亡,父进程还和其联系,则成为僵尸进程。
5、读取执行配置文件/etc/inittab .conf tab
6、Default runlevels
0 halt 关机
1 single user mode 单用户模式,没有图形界面,只有root一个用户,相当于window的安全模式
2 Multiuser,withoutNFS 多用户模式,和3一样,没有NFS,实现unix系列系统间的文件共享
3 Full multiuser mode
4 unused 自定义
5 Xll 一般图形界面模式
6 reboot 重启模式
运行级别的切换
runlevel 查看运行级别,没有切换过N,切换过S
init num 直接切换 init[0123456Ss]
more /etc/inittab
man inittab
inittab中每一句组成形式id:runlevels:action:process
id 标识符,标记条目的唯一性
runlevels 指定运行级别0到6,可以多个
action 运行状态
process 指定要运行的脚本/命令
id:3:initdefault:
si::sys:/etc/rc.d/rc.sysinit(系统时钟设置等) 不管哪一个运行级别启动时都要执行此process脚本
/etc/rc.d/rc文件,判断系统缺省运行级别,完成后续引导,如运行级别是3,则运行/etc/rc.d/rc3.d (存在rc0.d到rc6.d),/etc/rc.d/rc3.d下,有S,K开头的文件,S start启动; K kill关闭。
启动过程总结:firmware bootLoader Kernel init /etc/inittab initdefault /etc/rc.d/rc.sysinit /etc/rc.d/rc /etc/rc.d/rcN.d( N=0-6) username password
action常用取值:
initdefault:缺省启动级别
sysinit:系统启动执行process中指定的命令
wait:执行process中指定的命令,并等其结束载运行其他命令
once:执行process中指定的命令,不等结束
ctrlaltdel:按下Ctrl + Alt + Del时执行process中指定的命令
powerfail: 电源错误时,执行process中指定的命令,不等结束
powerokwait: 电源恢复时,执行process中指定的命令
respawn: 一旦process中指定的命令终止,便重新运行该命令
/etc/rc.d/init.d服务
/etc/init.d
改变系统的启动设置三种方法
ln 软链接,自己写脚本my.script,设置软链接
eg: vi/etc/rc.d/init.d/my.script; chmod u+x/etc/rc.d/init.d/my.script;
ln -s /etc/rc.d/init.d/my.script /etc/rc.d/rc3.d/S100my.script
chkconfig --list 系统中所有已经安装的服务其缺省的启动状态
--levels 级别 name on/off/reset.. eg:chkconfig --levels 234 sshd off
ntsysv 更改当前运行级别的启动设置
ntsysv --level 3 级别3的启动设置,空格启动*
dmesg 查看系统启动时的信息
dmesg | grep sda
dmesg | grep eth0
/var/log系统日志 eg: grep syslog/var/log/messages
/var/log/messages服务
GRUB
GRUB的配置文件
/boot/grub/grub.conf 其软链接/etc/grub.conf
GRUB配置文件中内容
default 定义缺省启动系统
timeout 定义缺省等待时间
splashimage 定义GRUB界面的图片
(hd0,0) hd0,在grub中用hd0表示第一块硬盘,逗号分隔的是这块硬盘的第0个分区
hiddenmenu 隐藏菜单
title 定义菜单项名称
root 设置GRUB的根设备即内核所在的分区
kernel 定义内核存放的位置
mitrd 命令载入镜像文件
GRUB命令
e 编辑当前的启动菜单项
c 进入GRUB的命令行方式
b 启动当前的菜单项
d 删除当前行
Esc 返回GRUB启动菜单界面,取消对当前单项所做的任何修改
单用户模式应用
1、root密码忘记,开机进入GRUB,按e编辑,设置启动级别为1,即单用户模式
2、为GRUB设置密码,加在全局变量hiddenmenu后面(/boot/grub/grub.conf中)
grub-md5-crypt
或 grub
grub>md5crypt
3、GRUB修复
按c进入命令行方式
1、把安装盘放到光驱,重启,F2在BOIS中把系统用光驱来引导
2、等安装界面出来以后,按F5,也就是linux rescue模式。然后在boot下输入linux rescue,回车。
Linux软件包管理(redhat系列,不同系列不同)
二进制包安装
一、RPM包管理
sudo-1.7.2pl-5.el5.i386.rpm
软件名 版本号 发行号(5.el5) 硬件平台(i386)
1、卸载
rpm-e 软件名
-e --nodeps 软件名 强行卸载,不考虑依赖关系(不建议)
2、安装
rpm-ivh 软件全名 i安装 v安装时详细信息 h进度
-ivh --excludedocs 不安装软件包的文档,如帮助信息
--prefix PATH 将软件包安装到指定路径下(大多数包不许改路径)
--test 只对安装进行测试,并不实际安装
--relacepkgs 软件已经被安装,覆盖安装
--replacefiles 文件冲突conflict,覆盖安装
--nodeps 在安装了特定软件包之后才能安装该软件包,强制安装(不推荐)
3、查询
rpm-q 软件名
-qa 查询所有已安装软件包 eg: rpm -qa | grep samba
4、升级
rpm-Uvh 软件名
RPM包管理
1、查询q
-a 查询所有已安装软件包
-f 查询文件所属软件包
rpm -qf /etc/services
-p 查询软件包(包未装)
rpm -qip 包全名
rpm -qlp 包全名
-i 显示软件包信息
rpm -qi samba
-l 显示软件包中的文件列表(已装)
rpm -ql 包名
-d 显示被标注为文档的文件列表
rpm -qd 包名
-c 显示被标注为配置文件的文件列表
rpm -qc 包名
2、校验
rpm-V 包名 查看已安装软件包中文件是否改变
s 文件大小改变
5 文件的md5校验值 内容改变
T 文件的创建时间
L 链接文件
D 设备文件
U 文件的用户
G 文件的用户组
M 文件的权限
3、软件包文件提取
rpm2cpio 目录中软件包 | cpio -idv ./etc/inittab
解压指定文件/etc/inittab到当前目录 ./etc/inittab
二、YUM包管理
自动解决软件包依赖关系
方便的软件包升级
安装: yuminstall 软件名
检测升级: yumcheck-update 软件名
升级: yumupdate 软件包名
软件包查询: yumlist (yum源上的所有软件包) eg:yum list | grep 软件名
软件包信息: yuminfo 包名
卸载: yumremove 包名
帮助: yum -help、man yum
案例:.vimrc的注释
manvim
rpm-qa | grep vim
rpm-ql vim-common | grep example (vim-common为上一步查出包中文件之一)
二、源代码包安装
解压
进入解压后包找到configure
./configure --prefix=/usr/local/proftpd(安装路径) 配置
make 编译
make install 安装,将文件拷贝到指定位置
三、脚本安装
解压
vi README
./setup.sh
四、APT包管理
搜索软件包 apt-cache search
软件包信息 apt-cache show
安装 apt-get install(reinstall覆盖安装、-f修复安装)
删除 apt-get remove(autoremove卸载依赖关系包、--purge卸载配置文件)
更新软件源 apt-get update
更新已安装包 apt-get upgrade
配置文件
1、用户信息文件:/etc/passwd 用man 5 /etc/passwd查看
eg:root:x:0:0:root:/root:/bin/bash
用户名:密码位:UID:GID:描述信息:宿主目录$HOME :命令解释器shell
用户类型
Linux用户分三种:
超级用户 root,UID=0
普通用户 UID500-60000 缺省从500开始
伪用户 UID 1-499
1、与系统和程序服务相关
bin daemon shutdown halt等,任何Linux系统默认都有这些伪用户
mail news games apache ftp mysql sshd等,与系统进程相关
2、伪用户通常不需要或无法登录系统
3、可以没有宿主目录
用户组
每个用户都至少属于一个用户组
每一个用户组可以包括多个用户
同一用户组的用户享有该组共有的权限
2、密码文件: /etc/shadow
(man 5 shadow)
用户名:加密密码:最后一次修改时间:两次修改密码最小时间间隔:密码有效的最多天数:从系统开始警告到密码失效的天数:账号闲置时间:密码失效天数:标志,一般不用
如果/etc/shadow中一个用户的密码被删除,则不需要密码即可登录
3、新用户信息文件: /etc/skel
4、用户配置文件:
/etc/login.defs
/etc/default/useradd
5、登录信息:/etc/motd登录后 /etc/issue登录前
用户组权限示例
授权用户jack和mary对目录/software有写权限
#groupadd softadm 添加用户组
#usermod -G softadm jack
#gpasswd -a mary softadm
#chgrp softadm /software
#chmod g+w /software
#grep softadm /etc/group
删除用户组 groupdel 组名
修改用户组信息 groupmod
groupmod -n apache webadmin 修改webadmin组名为apache
用户管理命令
pwck 检测/etc/passwd文件
vipw 编辑/etc/passwd文件,锁定文件
id 查看用户id和组信息
finger 查看用户详细信息
su 切换用户(su -环境变量切换)
passwd -S 查看用户密码状态
who、w 查看当前用户信息
禁用和恢复用户
禁用
usermod -L username
passwd -l username
恢复
usermod -U username
passwd -u username
用户组管理命令
groups 查看用户隶属于哪些用户组
newgrp 切换用户组
newgrp wangt :用不属于wangt组的用户wo登录,再用此命令,可以切换到此组,但要知道组密码
grpck 用户组配置文件检测;删除了用户,却未删除其组信息
chgrp 修改文件所属组
vigr 编辑/etc/group文件(锁定文件)
删除用户
userdel -r 用户名
-r 删除用户目录
手工删除:
find -user eg: find /home -user jack 在home下隶属jack的文件
-uid
-group
-gid
对要保留文件备份,不要的删除,清除用户文件中的相关表项,消除宿主目录
设定密码 chage
-l 查看密码设置
-m/M 密码修改最小/大天数
-d 最后修改日期
-I 密码过期后,锁定账户天数
-E 密码过期时间:0,立即过期;-1,永不过期
-W 密码过期前开始警告的天数
启动或停用shadow功能
pwconv/pwunconv
grpconv/grpunconv
authconfig /etc/sysconfig/authconfig
system-config-users 图形化的管理工具
SetUID的定义:
当一个可执行程序具有SetUID权限,用户执行这个程序时,将以这个程序所有者的身份执行。
(因为程序的所有者一般是root,所以执行程序时,相当于用root用户执行)
必须是可执行程序才能授予此权限,不可执行的若授予将S
-rwsr-xr-x eg:chmod u+s/bin/touch
ls -l /bin/touch
touch file01 (用普通用户的权限创建文件)
ls -l file01 其所有者变为root
SetUID=4
chmod u+s u-s
或 4755 755
umask (0022,第一位)
SetGID=2 所属组
程序(大部分情况是命令)被授予该权限时,会以命令所属组的身份来执行
chmod g+s
2755
find / -perm -4000 -o -perm -2000 (-perm 按权限查找)
查找具有SetUID和SetGID权限的文件有哪些
粘着位=1 其他人 t
如果一个权限位为777目录具有粘着位,每一个用户都可以在此目录下创建文件,但只能删除自己是所有者的文件。
chmod o+t
1777
linux下/tmp具有粘着位
/etc/group
组名:组密码位:GID:组成员
groupadd 组名
添加用户 设置选项 用户名
-u UID
-g 缺省所属用户组GID
-G 指定用户所属多个目录
-d 宿主目录
-s 命令解释器Shell
-c 描述信息
-e 指定用户失效时间
useradd -u 1888 -g wangt -G sys,root -d /backup -s /bin/bash -c"Market wangwu" -e 2012-09-22 panjw
passwd panjw
修改用户信息usermod
usermod -l wo panjw 改用户名,将panjw改为wo
-G sys wo 将用户wo加入组sys
组管理: gpasswd
设置组密码及管理组内成员 (grep root /etc/group)
-a 添加用户到用户组 gpasswd -a wo root
-d 从用户组中删除用户 gpasswd -d wo root
-A 设置用户组管理员 gpasswd -A wo wangt 使得用户wo在此组中具有添加删除用户权限
-r 删除用户组密码
-R 禁止用户切换该组
gpasswd wangt 设置密码
more /etc/gshadow 组密码配置文件
grpconv 将gshadow中密码映射会/etc/group
grpunconv 启用gshadow
批量添加用户
方法一
eg:cd /test
viuser.info (编辑用户信息,格式参照/etc/passwd文件)
wang1::1001:3::/home/wang1:/bin/bash
wang2::1002:3::/home/wang2:/bin/bash
wang3::1003:3::/home/wang3:/bin/bash
wang4::1004:3::/home/wang4:/bin/bash
wang5::1005:3::/home/wang5:/bin/bash
newusers < user.info
tail -5 /etc/passwd
ls/home
pwunconv
vipass.info (格式 用户名:密码)
wang1:123456
wang2:123456
wang3:123456
wang4:123456
wang5:123456
chpasswd < pass.info
tail -5 /etc/passwd
tail -5 /etc/shadow
newusers 导入用户信息文件; 可自动生成宿主目录;在passwd自动中添加用户信息
pwunconv 取消shadow password功能; 在设置密码之前,需要取消shadow功能
chpasswd 导入密码文件
(其格式 用户名:密码)
pwconv 将密码写入shadow文件
方法2 用shell脚本来写。
*限制用户su为root:
groupadd sugroup
chmod 4550 /bin/su
chgrp sugroup /bin/su
ls-l /bin/su
设定后,只有sugroup组中的用户可以使用su切换为root
useradd helen
passwd helen
usermod -G sugrouphelen
用sudo代替su
在执行sudo命令时,临时成为root,以root的身份执行命令
不会泄露root口令
仅向用户提供有限的命令使用权限
配置文件:/etc/sudoers,编辑配置文件命令visudo,普通用户使用命令sudo
格式:用户名(组名) 主机地址(或主机名)=命令(绝对路径)
eg:授权普通用户具有添加用户权限
visudo
wang1 helen=/user/sbin/useradd,/user/sbin/userdel
wang2 helen=/sbin/shutdown -h now 命令可以精确化
su - wang1
sudo /user/sbin/useradd panjw 添加用户
sudo -l 查看授权此用户可以使用哪些命令
第八讲进程管理
进程和程序的区别:动态、静态;无一一对应关系
父子进程: pid子 ppid父;fork 复制父数据,堆栈段,父进程环境;父停子停 2情况
前后台进程:后台执行命令后加&,必须是非交互的,异步 find / -name init >/test/init.find&
进程状态:
就绪:
等待:
运行:
查看用户信息w
FROM :0 从X window登录
地址 远程登录
JCPU 以终端区分,该终端所有相关进程执行时,消耗CPU时间
PCPU CPU执行程序消耗时间
WHAT 用户正在执行的操作
load average:在过去1、5、15分钟内平均负载程度
IDLE 用户闲置时间
ps 进程状态查看
a 显示所有用户进程
u 显示用户名和启动时间
x 显示没有控制终端的进程
e 显示所有进程
l 显示详细信息
w 宽行显示
ps-u or -l 查看隶属于自己进程详细信息
PID
PPID父号
TTY 进程启动终端
STAT进程当前状态 S休眠,D不可中断休眠,R运行状态,Z僵死,T停止
NI 进程优先级
TIME进程自从启动以来启用CPU的总时间
COMMAND/CMD 进程的命令名
USER/UID 用户名,进程由哪些用户启动
%CPU占用CPU时间和总时间百分比
%MEM占用内存与系统内存总量的百分比
ps-le or -aux 显示系统所有进程详细信息
ps-aux --sort pid 可按进程执行的时间、PID、UID等对进程进行排序
ps-uU 用户名 指定用户执行的进程
ps-le | grep init 查看指定进程信息
pstree 进程树
kill 杀死进程
kill 进程号 (可以跟父进程号,则彻底关闭进程)
-l 列出kill的所有信号
kill -9 进程号 强行关闭
kill -1 进程号 重启进程
xkill 关闭图形程序
killall 进程名 关闭所有进程
pgrep 服务名称 查找服务进程号
pkill 进程名 关闭进程
/proc目录
是虚拟/伪文件系统,存放在内存镜像中;存放进程信息,当前系统中正在运行的进程PID命名的目录名,动态调整目录
cat/proc/cpuinfo
cat/proc/meminfo 内存信息
cat/proc/partitions 分区信息
优先级
nice 指定程序的运行优先级(程序还未启动)
nice -n command eg:nice -5myprogram
renice 改变一个正在运行的进程的优先级
renice n pid eg: renice -5777
优先级取值范围为(-20,19),越小优先级越高
nohup
使进程在用户退出登录后仍旧执行,nohup将执行后的数据默认存储到文件nohup.out中(一般自己指定存储的位置)
格式:nohupprogram & eg: nohup find/ -name init* > /etc/find.int &即可退出系统
进程的中止(挂起)和终止
挂起 ctrl+ z
终止 ctrl+ c
进程的恢复
恢复到前台继续运行(fg) fg 1
恢复到后台继续运行(bg) bg 1
查看被挂起或后台运行的进程(jobs)
top 进程状态显示和进程控制,每5秒钟自动刷新一次(动态显示)
d 指定刷新的时间间隔
c 显示整个命令行而不仅仅显示命令名
u 查看指定用户的进程
k 终止执行中的进程
hor ? 获得帮助
r 重新设置进程优先级
s 改变刷新的时间间隔
W 将当前设置写入~/.toprc文件中
计划任务(周期性/一次性计划任务)
计划任务的命令
1、at 安排作业在某一时刻执行一次
[-f 文件名] 时间
-d or atrm 删除队列中的任务
-l or atq 查看队列中的计划任务
at 命令指定时间的方式
1、绝对计时法
hh:mm MM/DD/YY
2、相对计时法
now + n minutes
now + n hours
now + n days
manat
at配置文件
限制哪些用户可以使用at命令
/etc/at.allow 若存在,则此文件中用户可用at命令
/etc/at.deny 若存在,则此文件中用户不能使用at
两个文件都不存在,则只有超级用户可用at;都在,但均为空,则所有用户可用at命令
2、batch 安排作业在系统负载不重时执行一次
一般指平均负载降到0.8以下;用法同at #w load average
3、crontab 安排周期性运行的作业
用于生成cron进程所需要的crontab文件
crontab -l 显示当前的crontab
-r 删除当前的crontab
-e 使用编辑器编辑当前的crontab文件
crontab -e 把知道的具体的时间添上,不知道的都添上*
分钟 小时 天 月 星期 命令/脚本
0 4 * * * 每天凌晨四点
0 18 * * 2,5 每周二周五的傍晚6点
0 18 * 1-3 2,5 一到三月每周二周五的傍晚6点
/usr/bin/wall < /etc/issue
/sbin/shutdown-h now
*/2 每隔两分钟
周日用0表示
五项时间都不能空,命令应该给出绝对路径,用户须有运行所对应的命令或程序的权限
ps -le | grep crond
/etc/crontab 配置文件
限制哪些用户可以使用crontab命令
/etc/cron.allow
/etc/cron.deny
进程处理方式
standalone 独立运行 进程启动后一直驻留,占用系统资源,但响应快
xinetd 进程托管,服务使用较少
/etc/xinetd
atd、crond 计划任务
每一分钟从休眠中醒来一次,看看要不要执行计划任务,所以计划任务不能精确到秒
文件系统构成
/usr/bin、 /bin: 存放所有用户可以执行的命令
/usr/sbin、/sbin:存放只有root可以执行的命令
/home:用户缺省宿主目录
/proc:虚拟文件系统,存放当前内存镜像
/dev:存放设备文件
/lib:存放系统程序运行所需要的共享库
/lost+found:存放一些系统出错的检查结果
/tmp 存放临时文件
/etc 系统配置文件
/var 包含经常发生变动的文件,如邮件、日志文件、计划任务等
/usr 存放所有命令、库、手册页等
/mnt 临时文件系统的安装点
/boot 内核文件及自举程序文件保存位置
查看分区情况: df
-h 显示大概详细信息 (Mounted on挂载点)
-m 以兆字节显示
查看文件大小、目录大小:du
-h 文件
-sh 目录
检测修复文件系统:fsck、e2fsck
(单用户模式执行)
e2fsck -p
-y 自动修复
判断文件类型:file
file 文件名
设备:块设备 b(大量存储) 字符设备 c(字符输出,终端,打印机等)
使用光驱
1、挂载光驱
mount /dev/cdrom /mnt/cdrom
df 也可查看挂载信息
2、卸载光驱
umount /mnt/cdrom
eject (umount后可以使光盘弹出)
添加磁盘或分区
1、划分分区 fdisk
-l 查看硬盘信息 fdisk -l /etc/sda
fdisk /etc/sdb
m 帮助
p 显示分区表
n 添加新分区
t 改变分区文件类型 L 查看有哪些文件类型及代号
d 删除分区
w 保存退出
q 不保存退出
2、创建文件系统 mkfs 格式化
(mk 查看有哪些格式化的命令)
mkfs.ext3 mkfs.ext3 /dev/sdb1
-b 指定数据块大小
3、尝试挂载 mount
eg: mount /dev/sdb1 /web
重启后挂载失效
4、写入配置文件 /etc/fstab
使新添加的分区,在系统引导的时候自动挂载
/etc/fstab 定义系统启动时每一个分区需要启动的设置
物理分区名/卷标 挂载点 文件系统 缺省设置 是否检测 检测顺序
LABEL=/ / ext3 defaults 1/0 0/1/2
即/dev/sda1 1测 0不检1优先检测
启动时硬盘是否检测,一般虚拟硬盘不检测为0
/dev/sdb1 /web ext3 defaults 1 2
(相当于 LABEL=apache)
e2label /dev/sdb1 apache 设置硬盘卷标为apache
怎样增加swap分区
dd if=/dev/sda of=/dev/sdb 将/dev/sda硬盘上的数据都拷到/dev/sdb上
if: inputfile of:output file
1、用dd可以创建一个指定大小文件
ddif=/dev/zero of=/var/swap/file.swp bs=1024k count=64 创建64M文件
bs: block size 指定dd输出时数据块大小
/dev/null是伪设备,写入其中的东西都消失了
/dev/zero也是伪设备,向输出写0
2、mkswap/var/swap/file.swp 将创建文件当swap分区用
3、free -m 查看系统内存信息,-m以兆来显示
4、swapon/var/swap/file.swp 启用该swap分区
swapoff /var/swap/file.swp 关闭该swap分区
5、要想系统启动时自动调用该分区,则将其写入/etc/fstab文件
/var/swap/file.swp swap swap default 0 0
设置磁盘配额(只能在分区上设置)
1、开启分区配额功能
编辑 /etc/fstab文件,在挂载属性缺省设置上加上标志 usrquota(用户配额)或grpquota(用户组配额,限制一组用户)
/dev/sda3 /home ext3 default,usrquota 1 2
启动:mount -o remount 分区名
如果只是临时设置:mount -o remount,usrquota /home
2、建立配额数据库(进入单用户模式)
quotacheck -cvuga
c创建;v详细信息;u建立用户配额;g组配额;a检测所有系统分区
会生成aquota.user、aquota.group(如果quotacheck有 -g)两个文件
3、启动配额功能
quotaon 分区名称 开启配额 quotaon /test
quotaoff 关闭配额
4、编辑用户配额
edquota 用户名
-g 用户组名
-t 设置宽限期
-p 模板用户复制用户1 复制用户2 复制用户配额
edquota -p wangt helen 设置和用户wangt一样的配额
使用edquota wangt 命令后显示
blocks(KB) soft hard 限定用户使用空间大小,以K为单位
inodes(i节点) soft hard 限定创建文件的多少
soft:软限制(soft limit)定义用户可用磁盘空间数,超过限制只警告,还可用
hard:硬限制,超过定义限制限制不能再用
宽限期(Grace period):定义用户在软限制下可以使用其文件系统的期限
quota命令查看用户的配额使用情况
repquota -a 管理员查看配额信息
repquota 分区名 查看该分区下所有用户的配额信息
系统的潜在威胁,备份
1、cp -Rpu
2、tar 命令使用举例
tar -zcf /backup/etc-20110303.tar.gz/etc 备份/etc目录
tar -zcf backup-user-20110303.tar.gz/etc/passwd /etc/shadow /etc/group /etc/gshadow
打包多个目录
tar -ztf backup-user-20110303.tar.gz
查看备份包中文件(不解包)
tar -zxf /backup/etc-20110303.tar.gz
还原/etc目录,默认还原到打包文件源目录,-C可以指定还原目录
tar -zxf backup-user-20110303.tar.gz etc/group(etc前没有/,写tar -ztf查看得到的形式)
只恢复备份中的指定文件,后面跟上查看得到文件名就行了。
tar解包保存原文件的属性,不像cp,要加cp -p
tar -rf backup-user-20110303.tar/etc/default/useradd /etc/login.defs
将两个文件的内容追加到压缩包中
tar -uf backup-user-20110303.tar/etc/passwd
将/etc/passwd目录中修改过的内容追加到备份文件
(-r和-u选项只能针对tar包使用)
为备份文件名添加时间(年月日)
tar -zcf /backup/etc_$(date +%F).tar.gz/etc
添加年月日小时分钟
tar -zcf /backup/etc_$(date+%Y.%m.%d-%H%M).tar.gz /etc
Shell编程
shell结构:
1、#!指定执行脚本的shell
2、#注释行
3、命令和控制结构
创建shell程序的步骤
1、创建一个包含命令和控制结构的文件
2、修改这个文件的权限使他可以执行
3、执行./example
或用 sh example执行
Shell变量
变量:临时变量、永久变量(环境变量)
字母、下划线、数字(不能开头写)组成,区分大小写,建议用大写
使用变量时,要在变量名前加上前缀 $
定义:NUM=100
TIME='date' TIME=(date+F%) echo $TIME
DATE=$TIME echo $DATE
单双引号:ABC='time is $DATE' echo$ABC 结果为: time is $DATE
ABC=“time is $DATE” echo $ABC 结果为: time is2012-09-25
删除变量:
unset NAME
set 列出所有的变量
位置变量和特殊变量
Shell解释执行用户命令时,将命令行的第一个部分作为命令名,其它部分作为参数。由出现在命令行上的位置确定的参数称为位置参数。
ls -l file1 file2 file3
$0 这个程序的文件名 ls -l
$n 这个程序的第n个参数值,n=1-9
特殊变量:
$* 这个程序的所有参数 ls /etc/group /etc/passwd 则显示/etc/group/etc/passwd 两参数
$# 这个程序的参数个数 ls /etc/group /etc/passwd 则显示 2个
$$ 这个程序的PID
$! 执行上一个后台命令的PID
$? 执行上一个命令的返回值 (一个命令成功,则返回0,否则返回非0值)
Shell命令
read 命令:从键盘读入数据,赋给变量 (直接赋值,交互)
read 变量名
sh -x 脚本 显示执行过程
算术运算
expr : 对整数型变量进行算术运算
expr 3 + 5
expr $var1 - 5
expr $var1 / $var2
expr 3 \* 10 转义
expr `expr 5 + 7`/ $var4 命令替换符
var4=`expr $var1 / $var2` 将结果赋值
变量测试语句
用于测试变量是否相等、是否为空、文件类型等
格式: test 测试条件
测试范围:整数、字符串、文件
1、字符串测试:
test str1=str2 测量字符串是否相等
str1!=str2 字符串是否不相等
str1 是否不为空
-n str1 是否不为空
-z str1 是否为空
2、整数测试
test int1 -eq int2 测试整数是否相等
int1 -ge int2 测试int1是否>=int2
int1 -gt int2 是否>
int1 -le int2 是否<=
int1 -lt int2 是否<
int1 -ne int2 测试整数是否不相等
3、文件测试
test -d file 指定文件是否目录
-f 指定文件是否常规文件
-x 是否可执行
-r 是否可读
-w 是否可写
-a 是否存在
-s 指定文件的大小是否非0
流控制语句
if []...then...fi 在一行;不在一行不用;
if []...then...else...fi
if []..then...elif[]..then...else...fi
多个条件的联合:
-a 逻辑与,两个条件成立时,真
-o 逻辑或,只要有一个成立,真
exit语句:退出程序执行,并返回一个返回码,返回码为0表示正常退出,非0表示非正常退出。
eg: exit 0
for 变量 in 名字表
do
命令列表
done
awk命令 提取
awk -F 域分隔符‘命令’ 不指定分隔符则默认用空格
awk -F: '$3==0 {print $1}' /etc/passwd
用awk指定用“:”作为文件中的域分隔符。匹配“:”分隔的第三部分为0的语句,打印其第一部分
awk -F: 'length($2)==0 {print $1}' /etc/shadow 找出没设密码的用户名
select 变量 in 关键字
do
command 1
command n
done
select把关键字中的每一项做成类似表单,以交互的方式执行do和done之间的命令。
case...esac语句,格式:
case 变量 in
字符串1)命令列表1
....
....
;;
....
字符串n)命令列表n
....
esac
其中”*)命令“来表示其他输入超出预料字符
while语句,格式:
while [条件]
do
命令
done
echo 123456 | passwd --stdin wangt 修改密码
until [条件]
do
命令
done
until类似while循环,不同的是until是条件返回值为假时才继续执行。
break 跳出整个循环
continue: 跳出本次循环,进行下次循环