在学习了一段时间的linux之后,如果不检验一下自己学的基础如何了,那就不好定自己的下一阶段linux的学习目标,所以我整理了一些《鸟哥的私房菜》里的比较基础又非常好的一些linux问题,忍不住整理到博客里给初学者共享,当然这些也是linux工作方向求职的基本要求,可以参考。
Multics 系统:由Bell(贝尔实验室)、MIT(麻省理工学院)与GE(美国通用电器)合作开发的一个系统;
1969:K. Thompson 替 DEC 公司写了一个简单的 file system 系统,此为 Unix 的前身,但是 Unix 一词尚未出现
1973:由 Bell 的 D. Richie 以 C 语言改写了 Thompson 的小系统,全部以 ASCII 档案进行改写,方便于应用!此时为第一次出现 Unix 这个操作系统的名词,不过,由于 Unix 乃针对不同的硬件而设定,因此仅出现在大型的 Server 上面看到!经过数年后,有底下几种版本:
基本上 Linux 是在 1991 年由芬兰大学生 Linus Torvalds 写的一个核心操作系统,最早仅只是核心而已,后来由于此一核心不但可以适合于主流 PC 的 x86 架构,并且稳定,因此有相当多的团队加入研究开发,后来某些公司将一些套件加入此一核心中,变成为完整的『安装光盘』,亦即是 Linux Distribution 了!所以才会有这么多的 Linux 版本,各版本之间没有所谓的谁优谁劣,而是个有其优缺点!看你适合哪一款,就用那一款吧!
开发商针对 Linux Kernel 进行开发,并加入适合该 Kernel 的套件(如 ftp, apache, mail 等等),及配合开发商本身的支持软件,而制作出来的可安装光盘即可称为 distribution。
唯一相同的地方在于 Linux 的『Kernel』,目前 ( 2002/06/29 ) Kernel 发展至 2.4.xx 版本,至于不同点则是 Linux 开发商自行加入或者是研发的软件。
Linu Kernel 的功能:
System call interface
Process control
Memory management
File System management
Device drivers
简单的说,任何跟系统硬件资源有关的都是 Linux Kernel 管辖的范围,所以编辑核心的时候,将核心编的越小越好!
硬件<=>Kernel (Modules Loader)<=>Shell ( Terminal or GUI )<=>Users
试说明什么是 GUI
GUI 为 Graphical User Interface 的简写,即为使用者图形界面,目前我们在 Linux 上面的 GUI 一般称为 X-Window ,而其核心为 Xfree86 这个 X-Server !请注意,这个 Xfree86 最大的功能即是在控制『显示卡、硬件周边』等跟 Window 有关的界面,所以 X-Window 无法启动时,通常是 Xfree86 这个 X-Window 的核心驱动程序设定不完全有关!
Linux 的优点:
最大的优点来自于其良好的资源分配!所以具有:
良好的多人多任务环境,资源分配平均;
除了免费之外,在线更新速度快,除错与安全性均较佳;
为 Open source 的授权,故而具有 open source 的所有优缺点;
网络功能强大。
Linux 是多人多任务的环境,请问何谓多任务(Multitask)与多人(Multiuser):
Multitask 指的是多任务环境,在 Linux 系统下, CPU 与其它例如网络资源可以同时进行多项工作, Linux 最大的特色之一即在于其多任务时,资源分配较为平均!
Multiuser 指的是 Linux 允许多人同时连上主机之外,每个使用者皆有其各人的使用环境,并且可以同时使用系统的资源!
CPU 需要在 PII, PIII, P4 或 K7, K8 以上等级;
RAM 至少需要 64 MB,
硬盘至少 550 MB,全部安装则需要 1.7GB
IDE 为用来传输硬盘数据的一个汇流界面;
共有 IDE1, IDE2 ,分别有 master 与 slave 所以共四个 IDE 装置支持!
/dev/hdc5
Primary + Extended 共四个,其中 Extended 通常只有一个! ( 更详细的硬盘与 MBR 可以参考 这里 这篇讨论 )
/dev/hdb1(primary)
/dev/hdb2(primary)
/dev/hdb3(extended)
/dev/hda5(logical 底下皆为 logical)
/dev/hda6
/dev/hda7
/dev/hda8
请注意,5-8 这四个 logical 相加的总和为 3!
根目录 / (root)
虚拟内存 Swap
一般而言,在 RAM 为 64MB 或 128 MB 的系统中, swap 要开多大?
约两倍的 RAM ,亦即为 128 MB 或 256 MB ,可获得较佳效能!
/dev/cdrom
/dev/fd0
/dev/eth0
Ext2
Ext3, Reseifs
BIOS(决定由 cdrom 或 floppy 开机,并加载PC硬件信息)
载入 install kernel loader :
收集硬件信息
Hard Disk 之 Partition
Formation
Softpackage 的选择
开始安装!
GMT 时间指的是格林威治时间,为标准的时间,而台北时间较 GMT 快了 8 小时!
Tap : /dev/ht0 (IDE), /dev/st0 (SCSI);
SCSI H.D.: /dev/sd[a-p],
RAID : /dev/md[0-15];
printer : /dev/lp[0-2]
可以按下 [Ctrl] + [Alt] + [F1] ~ [F6] 进入 Virtual console ( 共六个 );
而按下 [Ctrl] + [Alt] + [F8] 可回到 X-Window 的 desktop 中!
修改 /etc/inittab 里头的设定即可;
0:重新开机(如 init 0 );
1:单人维护模式,没有网络功能;
3:纯文字接口登入,多人多任务环境;
5:X-Window 登入模式,多人多任务模式。
基本角色是控制显示相关硬件的核心角色,也可以说程序 X-Window 的 Server ,此外, KDE 这个 Window management 则是 X-Window 的 Client 呦!因此, XFree86 若死掉了,那么 KDE 就无法被启动!
就是在 /etc/X11/XF86Config-4 这个档案!
预设是提供四个,就是在进入 KDE 之后,最下方的 bar 上面有 1,2,3,4 那个字样的那个咚咚!
/usr/share/doc
man command
info command
man 5 passwd 或是例如 syslog.conf 则: man 5 syslog.conf 那个 5 即是大部分的 config 档案的查询。
man –k command 例如 man –k passwd
/etc/man.conf
在一般模式底下输入: i, I, a, A 为在本行当中输入新字符;(出现 –Insert- )
在一般模式当中输入: o, O 为在一个新的一行输入新字符;
在一般模式当中输入: r, R 为取代字符!(左下角出现 –Replace-)
[Esc]
h, j, k, l
[Ctrl] + [f]
[Ctrl] + [b]
G, 1G, 0, $
dd, ndd, x 或 X (dG 及 d1G 分别表示删除到页首及页尾)
yy, nyy, p 或 P
?string (往前搜寻)
/string (往后搜寻)
:1, s / w o r d 1 / w o r d 2 / g 或 : 1 , s/word1/word2/g 或 :1, s/word1/word2/g或:1,s/word1/word2/gc (需要使用者确认)
:r filename
:w newfilename
:w; :q: :wq; :wq!
:set nu
:set nonu
/etc/:几乎系统的所有设定档案均在此,尤其 passwd, shadow
/etc/rc.d/init.d:系统开机的时候加载服务的 scripts 的摆放地点
/boot:开机设定档,也是预设摆放核心 vmlinuz 的地方
/usr/bin, /bin:一般执行档摆放的地方
/usr/sbin, /sbin:系统管理员常用指令集
/dev:摆放所有系统装置档案的目录
/var/log:摆放系统登录档案的地方
14, 255
什么是绝对路径与相对路径,要由 /usr/share/doc 进入到 /usr/share/man 由
绝对路径绝对由 / 开始写起,相对路径则非由 / 写起;
cd /usr/share/man ; cd …/man
. :代表本目录
… :代表上层目录
ls, pwd 为显示; 变换目录用 cd
新增: mkdir 目录,
移除: rmdir 目录(但是该目录内必须要已经清空了), rm –rf 目录,
移动: mv directory1 directory2
拷贝: cp –r directory1 directory2
如何查看一个档案的『内容』(不要使用 vi 的情况下)
cat, tac, more, less, head, tail, nl, od(查看二进制制)
Hard Links:在做成 hard link 档案时,系统会占用掉一个 inode ,由连结档案可发现其 link 字段多使用了一个 inode ,当源文件被删除的时候,该源文件的内容将继续保留在其它的 Hard Links 档案中;但所有 Link 占用的硬盘总量仅占一个档案的容量大小!(但 Hard link 不能连结不同 filesystem 的档案)
Soft Links:类似快捷方式,当原始档被删除,soft link 档案将找不到原始档了!
ln –s /bin /root/bin
答案为 (2)
任何人皆可读取、可写入,但是不可删除该档案(或目录),除了 root 与档案或目录拥有者有权可以删除。
chmod 754 filename, chmod u=rwx,g=rx,o=r filename
在 /usr/bin/passwd 这个档案的属性为 –r-s–x--x 请问代表什么意思(s)
那个 s 代表为 SUID ,当使用者使用这个档案进行工作的时候,将会具有该档案拥有者的权限!
chmod 2755 filename, chmod 1755 filename
file filename
目录:744 ? -rwx-r–r--
档案:633 ? -rw–wx-wx
chown, chgrp
touch filename
which (仅用于指令搜寻), whereis, locate, fine
Ext2, Journalling 有 ext3 及 Reiserfs 等
less 可以翻页,但是 more 不行!
diff 为一行一行比较, cmp 为一个字符(character)一个字符比较
df –k, df –i,
du -k, du –i, du -s
umount /dev/hda3
fsck /dev/hda3
lost+found
fdisk /dev/hdb 按 n 新增,按 e 新增 extended ,再按 n 新增 logical
mke2fs –b 2048 /dev/hdb5
mkdir /disk2
mount –t ext2 /dev/hdb5 /disk2
dd if=/dev/zero of=/tmp/swap bs=4k count=16384
mkswap /tmp/swap
swapon /tmp/swap
先 /etc/fstab
再 mount –a
编辑 /etc/fstab, 加入 usrquota and/or grpquota
reboot
quotacheck –avug (会产生 aquota.user(group))
quotaon –aug
edquota –u username
edquota –g groupname
repquota –vu /dev/hd[a-d][1-16]
简单说明 bash shell 的功能特征:
命令记忆功能 ~/.bash_history
命令别名功能 alias
shell scripts 功能
命令与文件名称补全功能
工作控制功能 jobs
变量与变量内容以等号来连结;
等号两边不能直接接空格符;
变量名称只能是英文字母与数字,但是数字不能是开头字符;
若有空格符可以使用双引号『 " 』或单引号『 ’ 』来将变量内容结合起来,但须要特别留意,双引号内可以保有变量,但是单引号则仅为一般字符;
必要时需要以跳脱字符『 \ 』来将特殊符号(如 Enter, $, , 空格符, ’ 等)变成一般符号;
若该变量为扩增变量内容时,则需以双引号及 变 量 名 称 如 : 『 " 变量名称如:『 " 变量名称如:『"PATH":/home』继续累加内容;
若该变量需要在其它子程序执行,则需要以 export 来使变量可以动作,如『export PATH』;
通常大写字符为系统预设变量,自行设定变量可以使用小写字符,方便判断(纯粹依照使用者兴趣与嗜好);
取消变量的方法为:『unset 变量名称』
env, set,
在环境变量当中,『使用者家目录、主机名称』的变量名称为:
HOME, HOSTNAME
export variable
双引号里面可以包含变量,单引号谨代表一般字符!
command2
这个指令代表什么意思?在这一行当中, command2 会先执行,而输出的结果会给 command1 当作参数。
cd /lib/modules/uname -r
/kernel 是最常使用的一例
> 会将导向的 file 覆盖,
>> 则是增加!
command 2> /dev/null
last | grep root | cut –d “ “ –f 1 | wc -l
name=VBird\’s\ testing\ variable.
name=”VBird’s testing variables.”
echo $name
Open Linux:
/etc/profile, /etc/config.d/shells/bashrc, ~/.profile, ~/.bashrc,
Red Hat :
/etc/profile, ~/.bash_profile, ~/.bashrc,
history
!26
!!
如何设定命令别名?使 lm 与 ls –al|more 功能相同
alias lm=’ls –al|more’
ls –al /bin 1> /home/testing.dat
ls –al /bin | tee /home/testing.dat
find / -name test 1> right 2>error
cat /root/.bashrc >> /home/col/.bashrc
command > /dev/null 2>$1
last | cut –d” “ –f1 | sort | uniq
简单的说, scripts 就是一个内部含有多个或复杂的 command 的纯文本文件;
scripts 可以进行 program 的功能,但速度上较 C 慢了点!
read variable
分别代表『和(同时成立)』及『或(仅其一成立就成立)』的意思!
for, while, until
使用 sh script 或
以 chmod 增加 scripts 的属性为可执行, chmod 777 script 并执行 scripts。
declare -i variable
宣告 shell 方能让 script 了解该内容需要以何种 shell 来执行!目前 Linux 通常宣告 /bin/bash 这个 shell ,然而若在非 shell 环境中,又没有宣告 shell 类型时,可能会造成 script 无法执行的情况。
if [ -e filename ] 若存在则回传值为真!
$0 代表 scripts 的檔名;
$1 代表第一个 parameter,例如 /etc/rc.d/init.d/xinetd start 那个 start 的变数即为 $1
可以使用 case …. Esac 的语法较为简单。
cut -d ‘:’ -f 1 /etc/passwd | sort > /tmp/account
sh -n scripts
useradd -M username
/etc/passwd
/etc/shadow
/etc/group
/etc/skel
/etc/default/useradd,
/etc/login.defs,
/etc/skel/
/etc/passwd,
/etc/shadow
皆为 0
将 /etc/passwd 最后一栏代表 shell 的名称改为 /bin/false
登入:使用 /bin/login 程序,并输入 ID 与 passwd ;
确认密码:搜寻 /etc/passwd, /etc/shadow 确认密码!并取得使用者的相关讯息。
查核 pam 登入模块:这个需要视主机的设定而定!
取得并执行 shell :由 /etc/passwd 取得 shell 之后,并执行 shell ,以 bash 为例,将读入: /ete/profile ? ~/.bash_profile ( 或 .bash_login 或 .profile ) ? ~/.bashrc ? 注销的时候执行 ~/.bash_logout
由 1970 年开始计算,故 1970 年 一月一日为 1 ,2002 年 1 月 1 日为11689
usermod, chfn, chsh, passwd
groups username
先看看 /etc/skel 当中,预设要给 user 的家目录内容;
新增 group : groupadd groupname
新增 user :useradd -m -g groupname username
给予密码: passwd username
试说明 /etc/passwd 这个档案的内容与格式:
账号; 密码; UID; GID; 说明的内容; 家目录; SHELL
UID, GID 跟 GROUP
/etc/security/limits.conf
tar, gzip, compress
试说明开机流程:
BIOS
MBR ( boot loader )
Loader ( lilo or grub, stage 1 and stage 2 )
Kernel loader ( /boot/vmlinuz )
init process ( 读取 /etc/inittab 取得 run-level )
开始执行 /etc/rc.d 内的 scripts
执行 /etc/modules.conf 内部的额外 kernel 模块
执行 /etc/rc.d/rc[1-6].d 的这些 run-level 内的 scripts !
执行 /bin/login 等待使用者登入!
dmesg
grep “kernel” /var/log/messages
改变 run-level 或关机的指令
shutdown,
halt,
reboot,
init or telinit
/etc/inittab
ps, top,
free, top,
[Ctrl] + z
jobs 及 fg %number
nice –n [number] [command]
top, renice
atd,
crond
编辑: crontab –e,
查看: crontab –l,
删除: crontab –r
1 重新读取一次 config file
9 强制删除此一执行程序
15 terminal结束的意思!