see also jlevy/the-art-of-command-line (multi-language)
Organised 2017 March.
Notes from 2012 April.
多年前(2012)写的“鸟哥的Linux 私房菜”学习笔记。- Chapters 18~26 -ing
原网站: 繁体 linux.vbird.org or 简体 cn.linux.vbird.org 。
第十八章、认识系统服务 (daemon, service)
#
什么是 daemon 与服务 (service)
#
分类 & 命名:
#
stand-alone vs. super-daemon
Stand Alone Daemon
响应速度快。
常见的有httpd、FTP的vsftpd等。
Super Daemon
(1)由于 super daemon 负责唤醒各项服务,因此 super daemon 可以具有安全控管的机制.
(2)不会一直占用系统资源。
例如 telnet, xinetd.
signal-control vs. interval-control (工作形态)
signal-control
透过讯号来管理,有客户端的需求进来,就会去处理!
例如打印机的服务 (cupsd)。
interval-control
『每隔一段时间就主动的去运行某项工作』,在指定的时间才会去工作。
例如在第十六章提到的 atd 与 crond (每分钟侦测一次配置文件)
命名守则
{xxx}d
eg: man [3] daemon
服务与端口的对应: /etc/services
#
ssh 22/tcp # SSH Remote Login Protocol
ssh 22/udp # SSH Remote Login Protocol
....(中间省略)....
http 80/tcp www www-http # WorldWideWeb HTTP
http 80/udp www www-http # HyperText Transfer Protocol
....(底下省略)....
daemon的启动与配置, stand alone, service, super daemon
#
/etc/init.d/* :启动脚本
系统上几乎所有的服务启动脚本都放置在这里!事实上这是公认的目录,CentOS在/etc/rc.d/init.d/,连结到/etc/init.d/的!
/etc/sysconfig/* :初始化环境配置 //几乎所有的服务//ubuntu不存在此文件夹
eg: syslog的初始化配置就在/etc/sysconfig/syslog这里呢!网络配置则在/etc/sysconfig/network这个文件中。
/etc/* :各服务的配置文件
第六章就讲过了,大家的配置文件都是放置在 /etc/ 底下的喔!//可能在子文件夹下
/etc/xinetd.conf, /etc/xinetd.d/* :super daemon 配置文件//ubuntu不存在此文件夹
super daemon配置文件(默认值)为/etc/xinetd.conf,不过super daemon只是一个统一管理的机制,所管理的daemons的配置在 /etc/xinetd.d/* 里头喔!
/var/lib/* :服务产生的数据库
MySQL的数据库默认就是写入/var/lib/mysql/这个目录下啦!
/var/run/* :服务的PID记录处
在第十七章谈到可以使用讯号(signal)管理程序,daemon是程序,也可以利用kill或killall来管理啦!
因为担心管理时影响到其他的程序,因此daemon常会将自己的PID记录到/var/run/.
例如syslog的PID就记录在/var/run/syslogd.pid这个文件中。如此一来,/etc/init.d/syslog就能够简单的管理自己的程序啰。
super daemon 所管理的服务的状态//很有意思,不过与ubuntu不同。
...
see also jlevy/the-art-of-command-line (multi-language)
Organised 2017 March.
Notes from 2012 April.
多年前(2012)写的“鸟哥的 Linux 私房菜”学习笔记。- Chapters 14 & 17 -ing
原网站: 繁体 linux.vbird.org or 简体 cn.linux.vbird.org 。
第十四章、Linux 账号管理与 ACL 权限配置
#
Linux 的账号与群组
#
使用者标识符: UID 与 GID
#
UID是0时,代表这个账号是『系统管理员』! 所以当你要让其他的账号名称也具有 root 的权限时,将该账号的 UID 改为 0 即可。
1~499 (系统账号).除了 0 之外,其他的 UID 权限与特性并没有不一样。默认 500 以下的数字让给系统作为保留账号只是一个习惯。
我们希望启动的服务使用较小的权限去运行,所以这些系统账号通常是不可登陆的, 所以才会有 /bin/false ; /usr/sbin/nologin. 比如用来作为pop邮件使用者的shell
1~99:由 distributions 自行创建的系统账号.
100~499:若用户有系统账号需求时,可以使用的账号 UID。
500~65535 (可登陆账号). linux 核心 (2.6.x 版)已经可以支持到 4294967295 (2^32-1).
使用者账号:/etc/passwd 文件结构, /etc/shadow 文件结构
#
/etc/passwd 第5部分,见finger: chfn
/etc/shadow
userName:pass:
lastChange:minAvailable:maxAvailable:
alertBeforeOutOfDate:extentionAfterOutOfDate:
accountExpireDate:reserved
忘记root密码:
*重新启动进入单人维护模式, 自动获得root权限
*LiveCD 中挂载 / , 手动修改 shadow
关于群组: /etc/group 文件结构, 有效与初始群组, groups, newgrp, /etc/gshadow
#
有效群组(effective group)与初始群组(initial group);
通常有效群组的作用是在新建文件.
newgrp: 有效群组的切换. OBS:此命令会进入新的bash
账号管理
#
adduser (suggested, interactive), useradd (ZZZ traditional), passwd, chage, usermod, userdel
#
suggested: adduser
adduser userName (will be ased for fullname, passwords etc.)
[useradd deprecated!]
useradd [-u UID] [-g 初始群组] [-G 次要群组] [-m(普通用户默认)M(root默认)] [-c 说明栏] [-d /home/solo] [-s /bin/bash] 使用者账号名
-d:指定家目录。务必使用绝对路径!
-r:创建一个系统的账号,这个账号的 UID 会有限制 (参考 /etc/login.defs)
-e:Expire date
useradd -D
可以修改 /etc/default/useradd 内容来修改默认shell, 默认home, 默认参考目录等.
SKEL=/etc/skel, 创建用户时候的参考(复制)
userdel [-r(delete the home)] userName
chsh: CHange SHell
chfn: CHange FiNger
id userName
Ex:强制第一次登录修改密码
useradd agetest
echo "agetest" | passwd --stdin agetest #not all distributions support '--stdin'
chage -d 0 agetest
usermod -aG sudo userName # modify a user, add to the group sudo (sudoers)
用户功能:finger, chfn, chsh, id
#
groupadd, groupmod, groupdel, gpasswd
#
账号管理实例
#
主机的细部权限规划:ACL 的使用
#
什么是 ACL
#
Access Control List
如何启动 ACL
#
[root@www ~]# vi /etc/fstab
LABEL=/1 / ext3 defaults,acl 1 1
#need reboot or remount
[root@www ~]# mount
/dev/hda2 on / type ext3 (rw,acl) #测试结果:成功
...
see also jlevy/the-art-of-command-line (multi-language)
Organised 2017 March.
Notes from 2012 April.
多年前(2012)写的“鸟哥的Linux 私房菜”学习笔记。 - chapters 10~13 -ing
基本的命令应该没什么变化吧。
原网站: 繁体 0160startlinux 。
Crtl + Alt + [F1]~[F6]
# 共有六个, tty1 ~ tty6 ,切换的方式为 Crtl + Alt + [F1]~[F6],其中, [F7] [F8] 为图形接口的使用。
man xxx => xxx(number) manual 中的命令级别 number 代表意义:
- 1:一般用户可以使用的命令或可运行文件案;
- 5:一些配置文件的文件内容格式;
- 8:系统管理员能够使用的管理命令。
第十一章、认识与学习BASH
#
认识 BASH 这个 Shell
#
硬件、核心与 Shell
#
// Hardware <=> Kernel <=> Shell,KDE,App
为何要学文字接口的 shell
#
// 通用,效率高
系统的合法 shell 与 /etc/shells 功能
#
/etc/shells #所有 shells
/etc/passwd // 每个用户的默认 shell
Bash shell 的功能
#
// history, tab, alias, job control, scripts, wildcard
// 当前登录的history在内存,注销时才会写入用户history文件。
Bash shell 的内建命令: type
#
type [-tpa] commandName
[ ] :无参,说明式回显 commandName 类型,还和使用者语言有关
-t :单词式回显:
file :外部命令
alias :别名
builtin :bash内建
-p :如果后面接的 commandName 为外部命令,会显示完整文件名;
-a :会由 PATH 变量定义的路径中,将所有含 commandName 字符串的命令都列出来,包含 alias
命令的下达 “"
#
// \ 仅跳脱『紧接着的下一个字符』
Shell 的变量功能
#
什么是变量
#
变量的取用与配置 (echo, 变量配置守则, unset)
#
// 变量的取用: echo
echo $varName
echo ${varName}
// $varName 是 ${varName} 的简化。
// 变量配置守则
// 赋值等号两边不能有空格
// 不能以数字开头
// 命令嵌套 eg :
ls -l `locate crontab`
// 反单引号 `命令` 或 $(命令) 等价 (推荐后者,因为容易识别,但是不要忘了那个$符号)。
unset varName #注意:此处没有'$'
环境变量的功能: env, export, declare
#
// env 与 export 可观察环境变量,其中 export 可以将自定义变量转成环境变量;
env #查看所有env变量
HOME #cd ~
SHELL
HISTSIZE
MAIL
PATH
LANG #语系
RANDOM #/dev/random ; 0~32767 之间
declare -i number=$RANDOM*10/32768 ; echo $number #0~9 之间
set #查看目前 bash 的所有变量 (环境变量+自定义变量);
// set 还可以配置命令环境,见4.4
echo $$
// PID
echo $?
// 前一个命令回传值
cd - 或 cd $OLDPWD
// 前一个工作目录
PS1='[\u@\h#\#]\W\$'
// 字符界面行首提示符
\d :『星期 月 日』,如:"Mon Feb 2"
\H :完整的主机名『www.vbird.tsai』
\h :主机名在第一个小数点之前的,如『www』
\t :24 小时HH:MM:SS
\T :12 小时HH:MM:SS
\A :24 小时HH:MM
\@ :12 小时 am/pm
\u :当前账号,如『root』;
\v :BASH版本,如 3.2.25(1),仅取『3.2』显示
\w :完整pwd (除了~之外);
\W :当前所在文件夹 #利用 basename 函数取得工作目录名称
\# :命令的顺序编号
\$ :root 为 '#' ,否则 '$'
OSTYPE #linux-gnu
HOSTTYP #i686 #硬件 类型
MACHTYPE #i686-pc-linux-gnu #核心 类型
export varName #<=> declare -x varName
// 将 varName 设置为 env变量 类型 (原来可能只是个 自定义变量 )。
// 对于子程序, varName 在 本行之后才启动的子程序 中有效。(因为子程序会自动继承 自己被invoke时候 在父进程中有效的 env变量)。
影响显示结果的语系变量 (locale)
#
变量的有效范围
#
变量键盘读取、数组与宣告: read, array, declare / typeset
#
read -p "promt string" -t timeOutInSecond varName
// 从键盘读取内容并存入varName;
-p :prompt : 接提示字符
-t :timeout: 接等待的『秒数』
// array:
var[1]='this is the first'
declare [-aixr] variable
-a :将 variable 定义为 数组 (array) 类型
-i :将 variable 定义为 整数 (int) 类型
-x :#<=> export, 将 variable 变成环境变量;
-r :配置成为 readonly 类型,且不能 unset
declare -x varName #export varName
// 将 varName 设置为 env变量 类型 (原来可能只是个 自定义变量 )。
// 如果export后没有varName,则 显示 所有 env变量。(-x 表示“转换为环境变量”参数,“-”不是chomd中的“去掉”)。
declare +x varName
// 将 varName 设置为 自定义变量 类型。(注意 +x 的含义,区别于 chmod)。
declare -p varName
// 显示 varName 变量类型(1.是 int(i) 还是 array(a) 还是 string( ); 2.是否 环境env变量(x); 3.是否只读(r))。
与文件系统及程序的限制关系: ulimit
#
ulimit
// ??? 看不懂,学完操作系统再看。http://is.gd/I6ccfR『限制用户的某些系统资源』的,包括可以开启的文件数量, 可以使用的 CPU 时间,可以使用的内存总量等等。
// hostname 更改主机名 how-to:三部曲
hostname newHostname #执行此命令
/etc/sysconfig/network #edit this file:
NETWORKING=yes
HOSTNAME=newHostname
/etc/hosts #edit this file.
For ubuntu 18+:
...
see also jlevy/the-art-of-command-line (multi-language)
Organised 2017 March.
Notes from 2012 April.
多年前(2012)写的“鸟哥的Linux 私房菜”学习笔记。 - Chapters 6~9 -ing
基本的命令应该没什么变化吧。
第6章、Linux文件权限与目录配置
#
user, group
#
Linux文件权限概念
#
Linux文件属性 (ls -al)
#
*首位类型:
d: Dir
-: 正规文件(regular file )
ASCII/plain text; binary; data(eg: last 才能读 /ar/log/wtmp)
l: Link
b: Block dev, 可供储存的接口设备(可随机存取装置)
c: Character dev, 串行端口设备,例如键盘、鼠标(一次性读取装置)
s: Socket, 常见于 /var/run
p: Pipe, FIFO. see: man fifo. 在解决多程序同时存取一个文件所造成的错误。
*时间: 最后修改时间
Note: 中文时间乱码: 用『LANG=en_US』来修改语系. /etc/sysconfig/i18n
...
see also jlevy/the-art-of-command-line (multi-language)
Organised 2017 March.
Notes from 2012 April.
多年前(2012)写的“鸟哥的Linux 私房菜”学习笔记。
基本的命令应该没什么变化吧。
原网站: 繁体 linux.vbird.org or 简体 cn.linux.vbird.org 。
比较简单,我就不总结了,见原网站地址.