一、文件系统的基础:
1. ed 命令: 行编辑命令。
2. cat 命令: 显示文件内容的命令
3. od命令: 八进制显示文件内容: 选项 -c -b -x
4. stty 命令: 终端设置命令, 选项 -tabs
5. 命令cat 与 cat -u的区别
6. 终端输入结束命令和退出终端命令:ctrl+d
7.file命令:查看文件的类型。
8. sort命令:排序命令。
9. wc 命令,统计文件的字符数、行数(-l)
10. cp命令: copy
11. cmp命令: compare files content
12. grep 命令: filter
二、文件目录和文件名
1. ls命令:
2. pwd命令:
3. mkdir命令:
4. cd 命令:
5. du命令: du (disc usage) 磁盘使用情况
du -a du -h du -ah | grep filename
6. . :当前目录 。 .. :父目录。
7. find命令: find / -name filename == du -a | grep filename
三、文件的权限
1. super-user : root 777
2. crypt: 加密命令。
3. login-id: uid:user-id 一个整数;group-id 也是一个整数
4. /etc/passwd: 记录用户信息的口令文件
5. /etc/shadow: 记录用户加密后的密码文件
wzb56@ubuntu:~/test$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 35944 Dec 8 2008 /usr/bin/passwd
对于文件的所有者而言,在执行域用s代替x,当命令运行时,由文件的所有者赋予其权限。例如passwd命令是个owner是root, passwd命令进行了setuid设置,任何用户都可以运行passwd命令编辑口令文件。
set-uid是一个简单但很完美的想法,解决了许多系统安全问题。也具有潜在的危险。
具有set-uid的几个系统程序:
6. who , w, whoami
7. which whereis
8. rm : -R -f
9. chmod:
10. chown:
11. I 节点: 一个文件有几项内容:名称、内容和管理信息、修改时间。 管理信息存放在I节点中,同时,存放的还有一些基本的系统参数:文件的长度,文件在磁盘上的位置等。
I节点中的三个时间:最后一次修改时间(w)、最后一次使用时间(r、x)、以及I节点自身最后一次改变(chmod)。分别用命令: ls -lu junk ; ls -l junk ; ls -lc junk ; ls -lt junk
12. ln命令: 创建link文件
13.mv命令:重命名或移动文件。
14.rcp\scp: 远程复制。(不同linux主机之间对传文件,很有用。)
15. cp -r
四、unix的文件目录结构:
/ : 根文件系统。
/bin :(binaries)二进制文件,可执行的基本程序。
/dev :(devices)设备文件。
/etc: (et cetera)系统的各种配置管理文件。
/etc/passwd : 口令文件。
/etc/shadow: 口令密文文件。
/etc/getty : /bin/login初始化的终端连接。
/etc/rc : 系统的初始化shell脚本。
/etc/group: 成员组。
/lib: (library) C编译器的主要部分。
/lib/cpp: c预处理器。
/lib/libc.a: c子例程库。
/tmp: (temporaries) 程序执行过程中创建的临时文件的仓库。
/usr: 用户文件目录。
/usr/bin:
/usr/lib:
/usr/tmp:
五、设备文件
1. unix把设备也抽象成为文件,提供了对复杂低级设备的统一操作接口。文件即是字节序列或者bit序列。
设备文件分为:块设备(b)和字符设备(c)。
设备文件还有主设备号和从设备号.
主设备号:区分设备类型。
从设备号:区分同一设备的不同实例。
不同的文件系统上I结点是不同的,故不能创建跨文件系统的系统的连接文件用ln。
2. 监控磁盘或文件系统的使用情况的命令有:
du -ah:(disc usage) 文件系统的磁盘的使用情况。
df -ah:(disc free space)报告整个文件系统的使用情况。
oggo@ubuntu:~$ du -ah
8.0K ./.viminfo
4.0K ./.bash_history
4.0K ./c/HelloWorld.o
4.0K ./c/HelloWorld.c
12K ./c/HelloWorld
4.0K ./c/makefile
28K ./c
4.0K ./oggo
4.0K ./.vimrc
4.0K ./wzb/HelloWorld.c
16K ./wzb/tmp
24K ./wzb
4.0K ./.rhosts
12K ./.makefile.swp
92K .
oggo@ubuntu:~$ du -ah
8.0K ./.viminfo
4.0K ./.bash_history
4.0K ./c/HelloWorld.o
4.0K ./c/HelloWorld.c
12K ./c/HelloWorld
4.0K ./c/makefile
28K ./c
4.0K ./oggo
4.0K ./.vimrc
4.0K ./wzb/HelloWorld.c
16K ./wzb/tmp
24K ./wzb
4.0K ./.rhosts
12K ./.makefile.swp
92K .
oggo@ubuntu:~$ du -ah
8.0K ./.viminfo
4.0K ./.bash_history
4.0K ./c/HelloWorld.o
4.0K ./c/HelloWorld.c
12K ./c/HelloWorld
4.0K ./c/makefile
28K ./c
4.0K ./oggo
4.0K ./.vimrc
4.0K ./wzb/HelloWorld.c
16K ./wzb/tmp
24K ./wzb
4.0K ./.rhosts
12K ./.makefile.swp
92K .
oggo@ubuntu:~$ df -ah
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 144G 6.6G 130G 5% /
proc 0 0 0 - /proc
/sys 0 0 0 - /sys
varrun 4.0G 88K 4.0G 1% /var/run
varlock 4.0G 0 4.0G 0% /var/lock
udev 4.0G 32K 4.0G 1% /dev
devshm 4.0G 0 4.0G 0% /dev/shm
devpts 0 0 0 - /dev/pts
lrm 4.0G 44M 3.9G 2% /lib/modules/2.6.24-22-generic/volatile
192.168.2.5:/store/home
2.3T 553G 1.7T 25% /home
securityfs 0 0 0 - /sys/kernel/security
oggo@ubuntu:~$ df -ah /home
Filesystem Size Used Avail Use% Mounted on
192.168.2.5:/store/home
2.3T 553G 1.7T 25% /home
oggo@ubuntu:~$ df -ah /home
Filesystem Size Used Avail Use% Mounted on
192.168.2.5:/store/home
2.3T 553G 1.7T 25% /home
oggo@ubuntu:~$ df -ah /home
Filesystem Size Used Avail Use% Mounted on
192.168.2.5:/store/home
2.3T 553G 1.7T 25% /home
oggo@ubuntu:~$ df -ah /
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 144G 6.6G 130G 5% /
3. who am i:格式
oggo@ubuntu:~$ who am i
oggo pts/5 Oct 6 09:37 (211.87.235.109)
说明: user tty_no date time ip
oggo@ubuntu:~$ who | grep ogg
oggo pts/5 Oct 6 09:37 (211.87.235.109)
oggo@ubuntu:~$ w
10:32:53 up 3:20, 11 users, load average: 0.00, 0.03, 0.07
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
wzb56 pts/4 211.87.235.109 09:29 34:07m 0.08s 0.08s -bash
oggo pts/5 211.87.235.109 09:37 0.00s 0.08s 0.00s w
4. last : 查看过去登录用户的信息。
5. 产看用户终端的命令:
stty: 设置用户终端。eg: stty -tabs
tty: 产看当前用户的终端设备文件.
oggo@ubuntu:~$ tty
/dev/pts/5
oggo@ubuntu:~$ ls -l /dev/pts/5
crw--w---- 1 oggo tty 136, 5 Oct 6 10:40 /dev/pts/5
用户oggo的虚拟终端号/dev/pts/5:620,write命令使用的就是它。
oggo@ubuntu:~$ date > /dev/tty
Thu Oct 6 10:40:56 CST 2011
oggo@ubuntu:~$ write wzb55
write: wzb55 is not logged in
oggo@ubuntu on pts/5 at 10:44 ...
EOF
mesg n: 关闭接受从其他用户通过write发送的消息。
wzb56@ubuntu:~$ tty
/dev/pts/4
oggo@ubuntu:~$ write wzb56
write: wzb56 has messages disabled
打开接受消息功能。
wzb56@ubuntu:~$ tty
/dev/pts/4
oggo@ubuntu:~$ write wzb56
hello 0
Message from wzb56@ubuntu on pts/4 at 10:52 ...
hello 1
hehe 0
hehe 1
oggo@ubuntu on pts/5 at 10:52 ...
hello 0
write oggo
hello 1
hehe 0
hehe 1
EOF
需要使用 0,1协议区分用户的消息。ctrl -d 结束对话。
7. 用户登录终端设备的同义词: /dev/tty, 非常实用,而不考录用户实际登录的设备终端。
oggo@ubuntu:~$ ls -l /dev/tty
crw-rw-rw- 1 root dialout 5, 0 Oct 6 10:40 /dev/tty
oggo@ubuntu:~$ dd if=/etc/passwd of=/dev/null
2+1 records in
2+1 records out
1467 bytes (1.5 kB) copied, 1.5109e-05 s, 97.1 MB/s
oggo@ubuntu:~$ time dd if=/etc/passwd of=/dev/null
2+1 records in
2+1 records out
1467 bytes (1.5 kB) copied, 1.5173e-05 s, 96.7 MB/s
real 0m0.001s
user 0m0.000s
sys 0m0.000s
9.文件的过滤功能: grep和egrep
oggo@ubuntu:~$ grep -e root /etc/passwd
root:x:0:0:root:/root:/bin/sh
oggo@ubuntu:~$ egrep -e root /etc/passwd
root:x:0:0:root:/root:/bin/sh
oggo@ubuntu:~$ time grep -e root /etc/passwd
root:x:0:0:root:/root:/bin/sh
real 0m0.001s
user 0m0.000s
sys 0m0.000s
oggo@ubuntu:~$ time egrep -e root /etc/passwd
root:x:0:0:root:/root:/bin/sh
real 0m0.001s
user 0m0.000s
sys 0m0.000s
oggo@ubuntu:~$ grep --help
Usage: grep [OPTION]... PATTERN [FILE]...
Search for PATTERN in each FILE or standard input.
PATTERN is, by default, a basic regular expression (BRE).
Example: grep -i 'hello world' menu.h main.c
Regexp selection and interpretation:
-E, --extended-regexp PATTERN is an extended regular expression (ERE)
-F, --fixed-strings PATTERN is a set of newline-separated fixed strings
-G, --basic-regexp PATTERN is a basic regular expression (BRE)
-P, --perl-regexp PATTERN is a Perl regular expression
-e, --regexp=PATTERN use PATTERN for matching
-f, --file=FILE obtain PATTERN from FILE
-i, --ignore-case ignore case distinctions
-w, --word-regexp force PATTERN to match only whole words
-x, --line-regexp force PATTERN to match only whole lines
-z, --null-data a data line ends in 0 byte, not newline
Miscellaneous:
-s, --no-messages suppress error messages
-v, --invert-match select non-matching lines
-V, --version print version information and exit
--help display this help and exit
--mmap use memory-mapped input if possible
Output control:
-m, --max-count=NUM stop after NUM matches
-b, --byte-offset print the byte offset with output lines
-n, --line-number print line number with output lines
--line-buffered flush output on every line
-H, --with-filename print the filename for each match
-h, --no-filename suppress the prefixing filename on output
--label=LABEL print LABEL as filename for standard input
-o, --only-matching show only the part of a line matching PATTERN
-q, --quiet, --silent suppress all normal output
--binary-files=TYPE assume that binary files are TYPE;
TYPE is `binary', `text', or `without-match'
-a, --text equivalent to --binary-files=text
-I equivalent to --binary-files=without-match
-d, --directories=ACTION how to handle directories;
ACTION is `read', `recurse', or `skip'
-D, --devices=ACTION how to handle devices, FIFOs and sockets;
ACTION is `read' or `skip'
-R, -r, --recursive equivalent to --directories=recurse
--include=FILE_PATTERN search only files that match FILE_PATTERN
--exclude=FILE_PATTERN skip files and directories matching FILE_PATTERN
--exclude-from=FILE skip files matching any file pattern from FILE
--exclude-dir=PATTERN directories that match PATTERN will be skipped.
-L, --files-without-match print only names of FILEs containing no match
-l, --files-with-matches print only names of FILEs containing matches
-c, --count print only a count of matching lines per FILE
-T, --initial-tab make tabs line up (if needed)
-Z, --null print 0 byte after FILE name
Context control:
-B, --before-context=NUM print NUM lines of leading context
-A, --after-context=NUM print NUM lines of trailing context
-C, --context=NUM print NUM lines of output context
-NUM same as --context=NUM
--color[=WHEN],
--colour[=WHEN] use markers to highlight the matching strings;
WHEN is `always', `never', or `auto'
-U, --binary do not strip CR characters at EOL (MSDOS)
-u, --unix-byte-offsets report offsets as if CRs were not there (MSDOS)
`egrep' means `grep -E'. `fgrep' means `grep -F'.
Direct invocation as either `egrep' or `fgrep' is deprecated.
With no FILE, or when FILE is -, read standard input. If less than two FILEs
are given, assume -h. Exit status is 0 if any line was selected, 1 otherwise;
if any error occurs and -q was not given, the exit status is 2.
Report bugs to <[email protected]>.
参考文献:
1. Ken Thompson :unix implementation
2. Dennis Richie: The Evolution of the unix time-sharing system.
3. unix文件系统从multics 中借鉴了一些思想。 the multics system: an examination of its structure.
4. Bob Morris and Ken Thompson : password security : a case history
5. Dennis Ritchie: on the security of unix.