文件系统管理
/usr/bin 存放用户可以执行的命令
/usr/sbin 存放只有root可以执行的命令
/home 用户缺省宿主目录
/proc 虚拟文件系统,存放当前内存镜像
/dev 存放设备文件
/lib 存放系统程序运行所需的共享库
/lost+found 存放系统出错的检查结果
/tmp 存放临时文件
/etc 系统配置文件
/var 包含经常发生变动的文件,如邮件、日志
/usr 存放所有命令、库、手册 =c:\windows
/usr/local =c:\program files
/mnt 临时文件系统的安装点 =mount
/boot 内核文件及自举程序文件保存位置
查看分区情况 df
df -h human 人性化的
查看文件、目录大小 du
du -sh *
检测修复文件系统 fsck e2fsck 单用户模式
fsck -y file system check
mkfs 格式化
/etc/fstab 定义新增的分区(硬盘)重启自动挂载
dd命令:
dd if=/dev/sda of=/dev/sdb 把sda完全拷贝到sdb
dd if=/dev/zero of=/var/swap/file.swp bs=1024k count=64
创建一个64M固定大小的文件(bs =block size)
mkswap /var/swap/file.swp 将创建的文件当做swap空间用
swapon /var/swap/file.swp 启用这个swap空间
用 free -m 查看 启用后swap的大小会增大64M
linux 两个伪设备(假的设备)
/dev/zero -- 不断往输出写0,不断往固定文件写0
/dev/null -- 黑洞、回收站
磁盘配额,限定用户使用磁盘空间的大小:
1.在/etc/fstab 开启磁盘配额功能 usrquota
mount -o remount /home
2.创建配额数据库(进入单用户模式)
quotacheck -cvuga 会生成aquota.user、aquota.group两个文件
3.启动配额功能 quotaon /home
4.编辑用户配额 edquota 用户名
进程管理
在命令后面加一个&, 则这条命令与shell同步运行,即在后台运行。
例 find / -name init > /test/init.find & 在后台运行不在前台显示,运行结果输入到init.find下。
ps a:显示所有用户的进 all
u:显示用户名和启动时间 user
x:显示没有控制终端的进程
e:显示所有进程,包括没有控制终端的进程
l:长格式显示
w:宽行显示
ps -u or -l 查看隶属于自己进程详细信息
ps -le or -aux 查看所有用户执行的进程的详细信息
ps列出的常见的参数:
PID 进程号 PPID父进程的进程号
TTY 进程启动的终端,查看本地登陆还是远程登陆
STAT 进程当前状态
NI 进程优先级
kill -9 进程号 强行关闭
kill -1 进程号 重启进程 =kill -1 'pgrep 进程名'
xkill 关闭图形程序
killall 结束所有进程
pgrep 服务名称 查找服务进程号(PID)
pkill 服务名称 关闭进程
cat /proc/cpuinfo 获得当前CPU的信息
cat /proc/meminfo 获取内存信息
cat /proc/partitions 获取当前分区信息
优先级命令:
nice 指定程序的运行优先级 nice -n command
renice 改变一个正在运行的进程的优先级
renice n pid
nohup 使进程在用户退出登陆后仍旧继续执行 (可用户备份、find)
格式:nohup program &
例: nohup find / -name init* > /root/find.init &
进程的挂起和恢复:
挂起(暂停) ctrl+Z
终止 ctrl+C
注:有两种进程是在前台看不到效果的
1.被挂起的,(ctrl+Z) 2.放在后台执行的,(命令后+&)
查看被挂起的进程 jobs
被暂停的进程恢复到前台继续运行 fg
被暂停的进程恢复到后台继续运行 bg
top 进程状态显示和进程控制,每5s自动刷新
选项 d刷新时间 r改优先级 h帮助 等……
计划任务
at 一次性计划任务
batch
crontab 周期性计划任务
samba服务器配置
samba是通过服务器消息块协议(SMB)在网络上计算机之间共享文件的软件包
SMB(server message block)
grep -v "^#" /etc/samba/smb.conf |more 提取有效设置行
grep -v "^#" /etc/samba/smb.conf > /etc/samba/smb.conf 提取并生成覆盖
[global]段
workgroup= 指定工作组或域
server string= 描述
security = 指定安全模式
1.share 无权限验证
2.user 缺省的设置,由samba服务器做验证
3.server 第三方主机验证
4.domain 第三方主机验证(第三方必须是windows域控制器)
hosts allow = 限定主机访问
log file = 指定日志位置
max log size = 日志文件大小
[homes]段
comment = 描述
browseable = no 无权限共享目录隐藏
writable = yes 可写
netfilter/iptables #iptables -F
SELinux # setsebol -P
samba_enable_home_dirs on
gesebool -a 查看所有策略
gesebool -a | grep samba 查看samba策略
smbstatus 查看访问的客户端信息
samba服务器测试命令:
testparm 测试语法错误
LINUX引导流程解析
固件加载(CMOS/BIOS)(POST加电自检)
→转到MBR读取BootLoader(GRUB)(GRUB作用载入内
核)
→载入内核kernel(驱动硬件)
→启动进程init (初始化initialization)
→读取执行配置文件/etc/inittab(固件进行硬件自检,读取自举程序bootloader,bootloader负责加载内核,内核在加载以后做两件事情,分别是驱动硬件和启动init进程,init进程会读取配置文件/etc/inittab,完成后续的引导过程)
硬件时钟 hwclock 软件时钟date
init的工作
init启动后读取inittab文件,执行缺省运行级别,从而继续引导过程。init的PID恒为1,但它必须向一个更高级的功能负责:PID为0的内核调度器(kernel scheduler),从而获得CPU时间。
man inittab 查看系统配置文件的帮助信息
/etc/rc.d/rc.sysinit 脚本,每次启动会运行一次,完成系统服务程序启动,如系统环境变量设置、加载字体、检查加载文件系统等。
/etc/rc.d/rc脚本的作用 判断系统缺省的运行级别,然后启动对应运行级别目录下的服务执行/etc/rc.d/rcn.d 完成后续的引导 n为(0-6)
rcn.d里面例如S12syslog S-start K-kill 数字-启动顺序 脚本名称
回顾:
linux系统在引导的过程里面,第一步是进行固件的加电自检 firmware →读取硬盘上面存储数据的第一个位置 即主引导记录 MBR,在MBR里面最重要的是存放了一个自举程序BootLoader,(bootloader在linux系统里面广泛采用的是GRUB)bootloader作用是载入内核kernel,在载入内核以后,内核有两个作用,一是在linux系统的层次上驱动硬件,二是→启动一个进程 init → init进程在启动以后读取系统的配置文件/etc/inittab→ 首先判断系统缺省的运行级别/etc/initdefault
→ 执行脚本 /etc/rc.d/rc.sysinit 这个脚本不管系统在任何运行级别都会缺省被执行,来进行一些系统基本服务的加载,→ 执行脚本 /etc/rc.d/rc 判断initdefault,→启动对应的启动目录下面的服务程序 /etc/rc.d/rcN.d N=0-6 进入用户名密码验证
linux系统启动以后要关闭或开启某服务,进目录/etc/rc.d/init.d ,该目录下包含各个运行级别的服务程序脚本
例:手动启动sshd服务 /etc/rc.d/init.d/sshd start
/etc/rc.d/init.d/sshd status 查看运行状态
/etc/rc.d/init.d/sshd 按回车会有提示信息
设置自启动程序:(ln -s chkconfig ntsysv)
vi /etc/rc.d/init.d/msg.script 自建脚本msg.script
chmod u+x /etc/rc.d/init.d/msg.script 给脚本执行权限
ln -s /etc/rc.d/init.d/msg.script
/etc/rc.d/rc3.d/S100msg.script 设置在运行级别3下自启动
chkconfig --levels 2345 sshd off 在2345运行级别关闭sshd的自启动
ntsysv --level 3 改变运行级别3的自启服务
运行dmesg检查引导期间的错误
是否在启动时识别到网卡 dmesg |grep eth0
是否识别添加的硬盘 dmesg |grep sdb
/var/log/messages 检查系统日志
/var/log/boot.log 记录启动错误
启动一个服务时没有办法正常启动,可以查询messages文件获取这个服务在启动时是否正常
grep syslog /var/log/messages 查询syslog服务在messages里面的信息
ubuntu设置自启动项
1) 将你的启动脚本复制到 /etc/init.d目录下
以下假设你的脚本文件名为 test。
2) 设置脚本文件的权限
$ sudo chmod 755 /etc/init.d/test
3) 执行如下命令将脚本放到启动脚本中去:
$ cd /etc/init.d
$ sudo update-rc.d test defaults 95
卸载启动脚本的方法:
$ cd /etc/init.d
$ sudo update-rc.d -f test remove
软链接 /etc/grub.conf
grub的配置文件以及grub的一些应用程序是存放在/boot目录下的,内核文件vmlinuz也是在/boot目录下,(hd0,0)就是第一块硬盘的第一块分区 即/boot所在分区
Shell编程
shell 结构:
#!指定执行脚本的shell
# 注释行
创建shell程序的步骤:
1.创建一个包含命令和控制结构的文件
2.修改这个文件的权限使它可以执行,使用chmod u+x
3. 执行 ./example (也可使用"sh example")
shell里面对变量的定义
shell有两类变量:临时变量和永久变量
变量定义习惯上用大写字母开头,用echo命令查看变量值。例如:echo $NUM
包含多个字的变量:$NAME='Mike Ron' 或 $NAME="Mike Ron"
单引号之间的内容原封不动地指定给变量:
双引号 ABC="time is $DATE"
echo $ABC 输出:time is 2015-12-20
单引号 ABC='time is $DATE'
echo $ABC 输出:time is $DATE
# set 列出所有的变量
# unset NAME 删除变量
位置变量:Shell解释执行用户命令时,将命令行的第一个部分作为命令名,其它部分作为参数。
例如:ls -l file1 file2 file3
$0 表示ls-l
$1 表示file1
位置变量用途实例:
#!/bin/sh
DATE='/bin/date +%Y%m%d' 提取date的年月日
/bin/tar -cf /backup/$1.$DATE.tar $1 > /dev/null 2>> /backup/$1.bak.log
#用目录名来命名备份文件,提示信息不看,丢到null,错误日志放在backup下面。
……
执行上面脚本时 sh autobak.sh /etc
→脚本里面的$1就是/etc
特殊变量:
$* 这个程序的所有参数
$# 这个程序的参数个数
$$ 这个程序的PID
$! 执行上一个后台命令的PID
$? 执行上一个命令的返回值(0表执行成功)
$0 表示命令本身
Shell命令
read命令:从键盘读入数据,赋给变量
应用实例:编写脚本read.sh
#!/bin/sh
read first second
echo "the first parameter is $first"
echo "the second parameter is $second"
执行上面的脚本 sh read.sh
提示输入 100 200
输出the first parameter is 100
the first parameter is 200
命令sh -x read.sh
脚本执行时会显示执行过程
expr命令(shell变量的算术运算)
例expr 3 + 5
expr $var \* 10 (乘法)
变量测试语句:test
test str1=str2 测试字符串是否相等
test int1 -eq int2 测试整数是否相等
test -d file 测试文件是否为目录
……
变量测试语句可用[]进行简化,如
test -d $1 等价于 [-d $1]
实例:
#!/bin/sh
web='/usr/bin/pgrep httpd'
if [ "$web" = "" ]
then
/etc/rc.d/init.d/httpd start
fi
时间计划任务
crontab -e
# m h dom mon dow command
具体意义表示:分钟 小时 日期 月份 星期 命令,在某月(mon)的某天(dom)或者星期几(dow)的几点(h,24小时制)几分(m)执行某个命令(command),*表示任意时间。例如:
3 * * * * /home/meng/hello.sh
每小时的03时执行/home/meng/下的hello.sh脚本。
*/2 12-14 * * 1-5 test.apache
周一到周五每天12点到14点每隔两分钟 启动apache
#!/bin/sh
# test mysql is running
data=`/usr/bin/pgrep mysql`
if [ "$data" != "" ]
then
echo "the mysql is running"
else
echo "the mysql is not running"
/usr/bin/service mysql start
fi
awk ‘命令’
awk -F 域分隔符‘命令’
默认分隔符为空格
本文介绍了Linux系统从固件自检到启动服务的过程,包括MBR、BootLoader、内核加载、init进程、运行级别的设定。讲解了如何在不同运行级别下启动、关闭服务,以及设置自启动程序的方法,如chkconfig和ntsysv。此外,还提到了Ubuntu的启动脚本管理和Shell编程基础,包括变量定义、位置变量和特殊变量的使用。
210

被折叠的 条评论
为什么被折叠?



