查看“初识Linux:任务调度”的源代码
←
初识Linux:任务调度
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Linux]] == 启动 == === 启动过程 === Linux启动过程分析: # BIOS自检 # 启动GRUB/LILO # 运行Linux内核并检测硬件 # 运行系统的第一个进程init # init读取系统引导配置文件“/etc/inittab”中的信息进行初始化 # /etc/rc.d/rc.sysinit 系统初始化脚本(读取用户密码等文件) # /etc/rc.d/rcX.d/[KS]* 根据运行级别X(0、1、2?),配置服务 # /etc/rc.d/rc.local 执行本地特殊配置 # 其他特殊服务 === 运行级别 === # 0:关机 # 1:单用户(类似于Windows安全模式?) # 2:多用户状态没有网络服务 # 3:多用户状态有网络服务(常用) # 4:(系统未使用) # 5:图形界面 # 6:系统重启 * shell中“startX”可进入图形界面,前提如果安装了 * 修改默认的运行级别,“/etc/inittab”的“id:3:initdefault”中的级别数字 === 忘记密码 === * 进入单用户模式修改密码即可 *: <syntaxhighlight lang="bash"> # 修改root用户密码 passwd root (设置root的密码) # 设置启动级别 #init 6 </syntaxhighlight> centos6系列: # 在引导界面(redhat的grub引导界面)按e,进入编辑模式 #: [[File:centos6引导界面.png|400px]] # 移动光标到“Kernel ...”一行按e,进入kernel该行的编辑画面中 #: [[File:centos6选择内核.png|400px]] # 在kernel行末尾输入“ single”并回车(注意空格) #: [[File:centos6选择内核_编辑.png|400px]] #: 修改后: #: [[File:centos6选择内核_启动方式single.png|400px]] # 按b重启,进入系统 #: [[File:centos6single进入系统.png|400px]] # 进入系统修改密码 #: [[File:centos6修改密码.png|400px]] centos7系列: # 在引导界面选择内核后,按e进入编辑模式 #: (另一个“rescue”的内核为救援模式,主要是应用于系统无法进入的情况。) #: [[File:centos7选择内核.png|400px]] # 编辑页面,将ro改为rw,在LANG 后添加init=/bin/sh(或/sysroot/bin/sh?) #: “rw”使文件系统被挂载为读写,才能修改密码;否则进入系统后需要使用“mount –o remount,rw /”来挂在文件系统为读写; #: [[File:centos7选择内核_编辑.png|400px]] # 按 Ctrl+x 用修改的参数引导系统 #: [[File:centos7单用户模式.png|400px]] # 进入系统修改密码 #: [[File:centos7修改密码.png|400px]] #: 如果显示小方块,使用LANG=en把当前终端语言设置为英文即可; #: [[File:centos7修改密码_切换终端语言.png|400px]] # 重启系统 #: (如果之前系统启用了selinux)输入“touch /.autorelabel”,使SELinux生效:确保开机时重新设定 SELinux context,必須在根目录下添加隐藏文件“.autorelabel”; #: 用“exec /sbin/init”来正常启动,或“exec /sbin/reboot”重启 #: [[File:centos7更新系统信息并重启.png|400px]] == 文件系统 == === 分区 === [[File:Linux分区.jpg|600px]]<br/> [[File:Linux分区信息.jpg|600px]] === 目录结构 === [[File:Linux目录结构.jpg|800px]] {| class="wikitable" ! 命令 !! 说明 |- ! colspan="2"| 系统必须 |- | /boot | 存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件 |- | /etc | 存放所有的系统需要的配置文件和子目录列表 |- | /lib | 系统最基本的动态连接共享库(类似于Windows的DLL文件)。几乎所有的应用程序都需要用到这些共享库。 |- | /sys | 该目录下安装了Linux2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息: # 针对进程信息的proc文件系统 # 针对设备的devfs文件系统 # 以及针对伪终端的devpts文件系统 该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中。 |- | /selinux | Redhat/CentOS 所特有的目录,存放selinux相关的文件(Selinux 是一个安全机制,类似于 windows 的防火墙) |- ! colspan="2"| 指令集合 |- | /bin | 系统中的常用命令 |- | /sbin | (Superuser Binaries)存放的是系统管理员使用的系统管理程序 |- ! colspan="2"| 账户 |- | /home | 普通用户的相关文件(/home/用户名) |- | /root | Root用户(系统管理员)的用户主目录 |- | /usr | (unix shared resources)共享资源目录,很多的用户应用程序和文件都放在这个目录(类似于windows的program files) # /usr/bin:系统用户使用的应用程序; # /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序; # /usr/src:内核源代码默认的放置目录; |- ! colspan="2"| 外部文件管理 |- | /dev | 系统中的所有外部设备相关文件 |- | /media | 类windows的其他设备(如U盘、光驱等等),识别后linux会把设备放到这个目录下。 |- | /mnt | 临时挂载路径 |- ! colspan="2"| 临时文件 |- | /run | 临时文件系统,存储系统启动以来的信息。 # 当系统重启时,这个目录下的文件应该被删掉或清除; # 如果系统上有 /var/run 目录,应该让它指向 run; |- | /lost+found | 一般情况下为空,系统非法关机后,这里就存放一些文件 |- | /tmp | 临时目录 |- ! colspan="2"| 运行过程使用 |- | /var | (variable)存放系统中经常变化的文件(如:日志、邮件) |- | /proc | 虚拟的目录,是系统内存的映射,用来管理内存空间。 # 可以直接访问这个目录,来获取系统信息; # 该目录的内容不在硬盘上而是在内存里,可以直接修改里面的某些文件来做修改。 |- ! colspan="2"| 扩展使用 |- | /opt | (默认为空)安装额外软件可以放在这个里面 |- | /srv | (不用做服务器则为空)存放服务启动后需要提取的数据 |} * /bin, /usr/bin 是给系统用户使用的指令(除root外的普通用户),而/sbin, /usr/sbin 则是给 root 使用的指令 * 在Linux中访问设备和访问文件的方式是相同的 * swap:无挂载点的分区,交换分区 === 文件属性 === 使用 <nowiki>ll</nowiki> 或者 <nowiki>ls –l</nowiki>命令来显示一个文件的属性以及文件所属的用户和组: : [[File:Linux文件属性.jpg|600px]] : [[File:Linux文件属性说明.png|600px]] : [[File:Linux文件属性笔记.jpg|600px]] === 挂载 === [[File:Linux挂载命令.jpg|400px]] # 挂载命令: #: <syntaxhighlight lang="bash"> mount [-参数] [设备名称] [挂载点] </syntaxhighlight> #: 挂载光驱时,可直接使用“mount /mnt/cdrom” # 卸载命令: #: <syntaxhighlight lang="bash"> unmount [设备名称] </syntaxhighlight> # 查看目录在哪个分区 #: <syntaxhighlight lang="bash"> df [目录全路径] </syntaxhighlight> # 查看磁盘使用情况: #: <syntaxhighlight lang="bash"> df [-参数] </syntaxhighlight> # 查看Linux分区信息: #: <syntaxhighlight lang="bash"> fdisk -l </syntaxhighlight> == 用户管理 == * 尽量少用root,避免操作失误。可以用普通用户登录,在特殊操作时用“su -”(“su - root”)切换为系统管理员。 实现用户账号的管理,要完成的工作主要有如下几个方面: # 用户账号的添加、删除与修改。 # 用户口令的管理。 # 用户组的管理。 {| class="wikitable" ! 命令 !! 说明 |- ! colspan="2"| 账号管理 |- | useradd [选项] 用户名 | 添加用户账号:就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。 * Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。 选项: # -c:(comment)指定一段注释性描述。 # -d:(目录)指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。 # -g:(用户组)指定用户所属的用户组。 # -G:(用户组)指定用户所属的附加组。 # -s:(Shell文件)指定用户的登录Shell。 # -u:(用户号)指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。 |- | userdel [选项] 用户名 | 删除用户账号:就是要将/etc/passwd等系统文件中的该用户记录删除 选项: # -r:把用户的主目录一起删除 |- | usermod [选项] 用户名 | 修改用户账号:就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。 选项:(同useradd) # -c: # -d: # -g: # -G: # -s: # -u: |- ! colspan="2"| 口令管理 |- | passwd [选项] 用户名 | 用户账号刚创建时没有口令,被系统锁定无法使用,必须为其指定口令后才可以使用,即使是指定空口令。 选项: # -l:锁定口令,即禁用账号。 # -u:口令解锁。 # -d:使账号无口令。 # -f:强迫用户下次登录时修改口令。 * “passwd”:修改当前用户的口令 * 普通用户只能修改自己口令,且修改时需要原始口令 |- ! colspan="2"| 用户组管理 |- | groupadd [选项] 用户组 | 增加用户组 选项: # -g:指定新用户组的组标识号(GID),不指定时在当前已有的最大组标识号的基础上加1为GID。 # -o:一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。 |- | groupdel 用户组 | 删除用户组 |- | groupmod [选项] 用户组 | 修改用户组属性 选项: # -g:为用户组指定新的组标识号。 # -o:与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。 # -n:将用户组的名字改为新名字 |} * 如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限: *: <syntaxhighlight lang="bash"> newgrp root </syntaxhighlight> *: 将当前用户切换到root用户组 === 伪用户(pseudo users)=== 系统中有一类用户称为伪用户(pseudo users),这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。<br/> 常见的伪用户如下所示: {| class="wikitable" ! 伪用户 !! 含义 |- | bin || 拥有可执行的用户命令文件 |- | sys || 拥有系统文件 |- | adm || 拥有帐户文件 |- | uucp || UUCP使用 |- | lp || lp或lpd子系统使用 |- | nobody || NFS使用 |} === 与用户账号有关的系统文件 === 完成用户管理的工作有许多种方法,但是每一种方法实际上都是对有关的系统文件进行修改。<br/> 与用户和用户组相关的信息都存放在一些系统文件中,包括:'''/etc/passwd''', '''/etc/shadow''', '''/etc/group'''等。 ==== /etc/passwd 文件 ==== Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。<br/> 这个文件对所有用户都是可读的。它的内容类似下面的例子: <syntaxhighlight lang="properties"> # cat /etc/passwd root:x:0:0:Superuser:/: daemon:x:1:1:System daemons:/etc: bin:x:2:2:Owner of system commands:/bin: sys:x:3:3:Owner of system files:/usr/sys: adm:x:4:4:System accounting:/usr/adm: uucp:x:5:5:UUCP administrator:/usr/lib/uucp: auth:x:7:21:Authentication administrator:/tcb/files/auth: cron:x:9:16:Cron daemon:/usr/spool/cron: listen:x:37:4:Network daemon:/usr/net/nls: lp:x:71:18:Printer administrator:/usr/spool/lp: sam:x:200:50:Sam san:/home/sam:/bin/sh </syntaxhighlight> 每一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下: <syntaxhighlight lang="properties"> 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell </syntaxhighlight> {| class="wikitable" ! 字段 !! 说明 |- | 用户名 | 是代表用户账号的字符串 # 通常长度不超过8个字符,由大小写字母和/或数字组成 # 登录名中不能有冒号(:),因为冒号在这里是分隔符 # 为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。 |- | 口令 | 存放着加密后的用户口令字,或特殊的占位字符(“x”、“*”等)。 由于/etc/passwd文件对所有用户都可读带来的隐患。许多Linux系统都使用了shadow技术:<br/> 把真正的加密后的用户口令字存放到'''/etc/shadow'''文件中,<br/> 而在/etc/passwd文件的口令字段中只存放一个特殊的字符。 |- | 用户标识号 | 是一个整数,系统内部用它来标识用户。 一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,<br/> 但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等 # 通常用户标识号的取值范围是0~65535 # 0是超级用户root的标识号 # 1~99由系统保留,作为管理账号 # 普通用户的标识号从100开始 * 在Linux系统中,这个界限是500 |- | 组标识号 | 记录的是用户所属的用户组 * 对应着'''/etc/group'''文件中的一条记录 |- | 注释性描述 | 记录着用户的一些个人情况 例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。 |- | 主目录 | 用户的起始工作目录,它是用户在登录到系统之后所处的目录。 |- | 登录Shell | <pre> 用户登录后,要启动一个进程,负责将用户的操作传给内核, 这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。 </pre> Shell是用户与Linux系统之间的接口。<br/> 常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。<br/> * 如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为“/bin/sh”。 |} ==== /etc/shadow 文件 ==== /etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生,超级用户才拥有该文件读权限,这就保证了用户密码的安全性。<br/> 内容如下: <syntaxhighlight lang="properties"> # cat /etc/shadow root:Dnakfw28zf38w:8764:0:168:7::: daemon:*::0:0:::: bin:*::0:0:::: sys:*::0:0:::: adm:*::0:0:::: uucp:*::0:0:::: nuucp:*::0:0:::: auth:*::0:0:::: cron:*::0:0:::: listen:*::0:0:::: lp:*::0:0:::: sam:EkdiSECLWPdSa:9740:0:0:::: </syntaxhighlight> 文件格式与/etc/passwd类似,由若干个字段组成,字段之间用":"隔开: <syntaxhighlight lang="properties"> 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志 </syntaxhighlight> {| class="wikitable" ! 字段 !! 说明 |- | 登录名 | (同上) |- | 口令 | 加密后的用户口令字,长度为13个字符。 * 如果为空,则对应用户没有口令,登录时不需要口令; * 如果含有不属于集合 { ./0-9A-Za-z }中的字符,则对应的用户不能登录。 |- | 最后一次修改时间 | 表示的是从某个时刻起,到用户最后一次修改口令时的天数 |- | 最小时间间隔 | 指的是两次修改口令之间所需的最小天数 |- | 最大时间间隔 | 指的是口令保持有效的最大天数 |- | 警告时间 | 从系统开始警告用户到用户密码正式失效之间的天数 |- | 不活动时间 | 用户没有登录活动但账号仍能保持有效的最大天数 |- | 失效时间 | 给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。 期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。 |} ==== /etc/group 文件 ==== 用户组是Linux 系统中对用户进行管理及控制访问权限的一种手段。<br/> 用户与组之间是多对多的关系: * 在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。 * 用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。 内容如下: <syntaxhighlight lang="properties"> root::0:root bin::2:root,bin sys::3:root,uucp adm::4:root,adm daemon::5:root,daemon lp::7:root,lp users::20:root,sam </syntaxhighlight> 格式也类似于/etc/passwd文件,由冒号(:)隔开若干个字段: <syntaxhighlight lang="properties"> 组名:口令:组标识号:组内用户列表 </syntaxhighlight> {| class="wikitable" ! 字段 !! 说明 |- | 组名 | 用户组的名称。 与/etc/passwd中的登录名一样,组名不应重复 |- | 口令 | 用户组加密后的口令字。 一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是* |- | 组标识号 | 系统内部用来标识组。 |- | 组内用户列表 | 属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。 |} === 添加批量用户 === Linux系统提供了批量创建用户的工具,使用步骤如下: # 创建用户信息文本user.txt: #: 每一列按照/etc/passwd密码文件的格式书写 #: 每个用户的用户名、UID、宿主目录都不可以相同 #: 密码栏可以留做空白或输入x号 #: <syntaxhighlight lang="properties"> user001::600:100:user:/home/user001:/bin/bash user002::601:100:user:/home/user002:/bin/bash user003::602:100:user:/home/user003:/bin/bash user004::603:100:user:/home/user004:/bin/bash user005::604:100:user:/home/user005:/bin/bash user006::605:100:user:/home/user006:/bin/bash </syntaxhighlight> # 以root身份执行命令'''/usr/sbin/newusers''',并从user.txt中导入数据,创建用户: #: <syntaxhighlight lang="bash"> # newusers < user.txt </syntaxhighlight> #: 然后执行命令 vipw 或 vi /etc/passwd 检查是否已经出现这些用户的数据,且对应宿主目录是否已经创建 # 执行命令'''/usr/sbin/pwunconv''':将 /etc/shadow 产生的 shadow 密码解码,然后回写到 /etc/passwd 中,并将/etc/shadow的shadow密码栏删掉 #: 即为了方便下一步的密码转换工作,先取消 shadow password 功能。 #: <syntaxhighlight lang="bash"> # pwunconv </syntaxhighlight> # 编辑每个用户的密码对照文件: #: 格式为: #: <syntaxhighlight lang="properties"> 用户名:密码 </syntaxhighlight> #: 如“passwd.txt ”: #: <syntaxhighlight lang="properties"> user001:123456 user002:123456 user003:123456 user004:123456 user005:123456 user006:123456 </syntaxhighlight> # 以 root 身份执行命令'''/usr/sbin/chpasswd''': #: chpasswd 会将经过 /usr/bin/passwd 命令编码过的密码写入 /etc/passwd 的密码栏 #: <syntaxhighlight lang="bash"> # chpasswd < passwd.txt </syntaxhighlight> # (确定密码经编码写入/etc/passwd的密码栏后)执行命令'''/usr/sbin/pwconv'''将密码编码为 shadow password,并将结果写入/etc/shadow #: <syntaxhighlight lang="bash"> # pwconv </syntaxhighlight> === 权限 === chmod 用于改变目录或文件的权限。如,修改文件abc的权限: # chmod 775 abc:赋予用户读写执行、用户组读执行、其他组读执行权限 # chmod u=rwx,g=rx,o=rx abd:(同上) # chmod u-x,g+w abc:去除用户的执行权限、增加用户组的写权限 # chmod a+r abc:为用户、用户组、其他组,都增加读权限 chown 用于改变目录或文件的所有者: # chown www abc: # chown www ./abc: # chown -R root ./abc:改变目录及其子目录的所属用户为root chgrp 用于改变用户的所属组: # chgrp root abc: == 网络 == == 服务 == === 防火墙 === == 进程 == == 任务调度 == 任务调度:系统在某个特定时间,执行特定的命令或程序。 === 添加任务 === # “crontab -e”:添加任务 # “0 2 * * * date >> /home/mydate”:在crontab中添加该命令,每天临晨两点把时间写到/home/mydate中 #* “0 2 * * *”为时间规则 === 调度多个任务 === 方法一:直接使用 crontab -e 添加任务<br/> 方法二: # 把所有的任务写入一个可执行文件中(.sh文件,shell代码),并为文件设置可执行权限 # 再将可执行文件路径使用 corntab -e 添加到任务调度,如“* * * * * /root/mytask.sh” === 终止任务 === # crontab -l:列出当前所有调度任务 # crontab -r:终止调度任务 === 时间规则 === 时间规则“* * * * *”,分别表示: {| class="wikitable" ! colspan="3"| “* * * * *” |- ! 值 !! 说明 !! 范围 |- | 分钟 || 每小时的第几分钟 || 0-59 |- | 小时 || 每天的第几小时 || 0-23 |- | 日期 || 每月的第几天 || 1-31 |- | 月份 || 每年的第几月 || 1-12 |- | 星期 || 每周的星期几 || 0-6 |} * 范围不正确时,任务不执行 == vi编辑器 == 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。<br/> Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。<br/> 二者分别定位于文本编辑器和程序开发工具。 # “vi Hello”:使用vi打开Hello文件 # 按下“i”:进入插入模式 # 按下“esc”:进入命令模式 # 输入“''':wq'''”:保存并退出 #: “''':q!'''”:推出不保存 === 工作模式 === [[File:Linux编辑器vi-vim工作模式.png|600px]] === 键盘图 === [[File:Linux编辑器vi-vim键盘图.gif|1200px]] == 命令 == * “tab”键:双击命令提示,单机补全(当前目录下有的)文件名称。 {| class="wikitable" ! 命令 !! 说明 |- | start X | 进入图形界面 |- | shutdown -h now | 立即关机 # poweroff 关机(poweroff -f 强制关机) |- | shutdown -r now | 立即重启 |- | logout | 注销 |- | man 命令 | 显示命令的用法 |- | history | 显示命令历史记录 # history 5:显示最近使用的5个历史命令 执行历史命令: # !5:执行历史编号为5的命令 # !ls:执行最后一次以ls开头的命令 |- | env | 显示当前系统的环境变量 |- | | |- | | |- | | |- | | |- | | |- | | |- | | |}
返回至“
初识Linux:任务调度
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息