1 常用的国内Linux资源
第2章 Linux安装
1 书中推荐的虚拟机为VMware。VMware面向企业和个人开发了多个版本,其中一些需要用户购买许可证,如VMware Workstation等。VMware Server则可以免费使用。推荐使用VMare Server。
1 用户可以执行不带参数的su命令将自己提升为root权限,另一个命令行工具是sudo,它可以临时使用root身份运行一个程序,并在程序执行完毕后返回至普通用户状态。
略
1 Linux的命令和文件名都是区分大小写的
2 使用tab键,点击一次,如果以已键入的字符开头的文件只有一个,Shell会自动把文件名补全。如果不止一个,需要点击2次tab键,Shell会罗列出所有以已键入的字符开头的文件
3 Shell的通配符,有 " * " , " ? " , " [ ] " 三种
4 命令pwd显示当前目录
5 回到用户主目录可以用命令单单一个cd 或 cd ~
6 命令 ls -F 里 -F选项会在每个目录后面加上/,可执行文件后加*,链接文件后加@。如下
7 命令ls -a 则显示该目录下所有文件,包括隐藏文件
8 命令 ls -l 查看文件的各种属性
注:属性从左往右:文件的权限标志,文件的链接个数,文件所有者的用户名,该用户所在的用户组组名,文件的大小,最后一次被修改的日期,最后一次被修改的时间,文件名
9 查看文本文件:cat和more
10 阅读文件的开头和结尾:head和tail。可以再使用-n选项指定显示的行数,如下
head -n 2 xxx.txt ## 显示头两行
tail -n 2 xxx.txt ## 显示结尾两行
11 查找文件内容: grep,如果要搜索带空格的内容,可以用引号把搜索的内容包含进去
12 快速定位文件:locate
13 搜索:find
14 whereis命令查找程序文件,并提供这个文件的二进制可执行文件,源代码文件和使用手册页存放的位置
15 who 查看当前系统中有哪些帐号登录
16 man命令,寻求帮助,如man find
1 和团队共享文件
2 创建目录:mkdir
3 touch命令创建的文件是个空文件,另外也可以用来更新一个文件的建立日期和时间,这种功能在自动备份和整理文件时非常有用。
4 mv可以在移动文件和目录同时对其重命名,加 -i 选项会有确认提醒
5 cp命令用来复制文件和目录,加 -i 选项会有确认提醒,加 -r 选项会将子目录连同其中的文件一起复制到另一个目录中
6 rmdir命令用于删除目录,但只能删除空目录。rm可以删除目录和文件,加 -i 选项会有确认提醒,加 -r 选项会将子目录连同其中的文件一起删除,加 -f 选项则避免每个文件删除的确认提醒等交互式操作。
7 文件/目录的权限样式如"-rwxr-xr-x" ,第一个字符表示文件类型,rwxr-xr-x是三组权限位,分别为属主(rwx),属组(r-x)和其他人(r-x)。
8 查看目录的权限可以使用 ls -ld /xxx/
9 chown命令改变文件的所有权,如下
sudo chown yyy:root in.txt // 修改属主为yyy,属组为root
sudo chown yyy in.txt // 只修改属主为yyy
sudo chown :root in.txt // 只修改属组为root
sudo chown -R yyy dac // 修改子目录及其的所有文件属主为yyy
10 chgrp命令只能修改文件的属组所有权
11 chmod命令修改一个文件的权限,命令使用"用户组+/-权限"的表达方式来增加/删除相应的权限。也可以通过“用户组=权限”的规则直接设置文件权限。也可以通过“用户组1=用户组2”将用户组1的权限设置跟用户组2一样。用户组包括属主(u),属组(g),其他人(o)和所有人(a),权限包含读(r),写(w)和执行(x),如下
chmod u+x in.txt // 给属主开通执行的权限
chmod a-x in.txt // 给所有人删除执行权限
chmod ug=rw , o=r in.txt // 给属主和属组读写权限,其他人读的权限
chmod o=u in.txt // 将其他人的权限设置为跟属主一样
12 文件权限的八进制表示,如 711 表示 rwx--x--x
13 文件类型,-表示普通文件,d表示目录,c表示字符设备文件,b表示块设备文件,s表示本地域套接口,p表示有名管道,l表示符号链接
14 符号链接(软连接)需要使用带-s参数的ln命令来创建,如下
ln -s TARGET LINK_NAME // 给目标文件TARGET取了一个别名LINK_NAME
ln -s days my_days // 建立一个名为my_days的符号链接指向文本文件days
ln -s /usr/local/share/ local_share // 建立一个名为local_share的符号链接指向目录/usr/local/share
还有一种硬链接,它跟符号链接的区别在于:硬链接是直接引用,即修改硬链接内容也会影响源内容。符号链接则通过名称进行引用。使用不带选项的ln命令就是建立硬链接。
ln days hard_days // 建立一个链接到days的新文件hard_days,硬链接
15 输出重定向
ls > ~/ls_out ## 将输出内容输入到~/ls_out文件中 ## 如果ls_out不存在,输出重定向符" > " 会创建该文件,如果存在则删除原有内容,用新内容替代
注:如果不想覆盖文件原有内容,可使用输出重定向符" >> "。
16 cat命令会将用户的每行输入会立即显示在屏幕上,直到使用Ctrl+D快捷键来结束,如下
17 通过使用输入重定向符号" < " 可以让程序从一个文件中获取输入 ,如 $ cat < data.txt。cat命令可以通过接受参数来显示文件内容,如 $ cat data.txt
18 另一种输入重定向的例子为立即文档,使用操作符" << ",立即文档指定一个代表输入结束的分隔符,但shell遇到这个分隔符后就结束输入,如下
$ cat << a
> d
> dfd
> dfd
> aaa
> a ### 结束分隔符
d
dfd
dfd
aaa
$ cat << END > hello
> Hello World !
> ok
> END
19 管道( | )将一条命令的输出连接到另一条命令输入,如 ls | grep ay,即将命令ls的输出发送给命令grep作为其输入
1 一些高级软件包管理工具如APT和yum可以自动搜寻依赖关系并执行安装
2 管理.deb软件包:dpkg
3 管理RPM软件包:rpm
4 APT工具最常用的两个命令:apt-get和apt-cache
apt-get
- $ sudo apt-get update ### 更新软件包信息
- $ sudo apt-get xxx ### 安装软件包xxx
- $ sudo apt-get install xxx ### 下载并安装软件包
- $ sudo apt-get upgrade ### 下载并安装在本系统上已有的软件包的最新版本
- $ sudo apt-get remove xxx ### 卸载软件包xxx
- $ sudo apt-get source xxx ### 下载软件包xxx的源代码
- $ sudo apt-get clean ### 删除所有已下载的包文件
- $ apt-get -h ### 显示apt-get的完整用法
apt-cache
- $ apt-cache search xxx ### 搜索带“xxx”字样的软件包
- $ apt-cache depends xxx ### 查询xxx的依赖关系
5 所有apt-get用于下载软件的地址,即安装源,都放在/etc/apt/sources.list中,如下
1 文件系统是一种对物理空间的组织方式,通常在格式化硬盘时创建。在Windows下,有NTFS和FAT两种文件系统。
2 Linux的最常用的几种文件系统:
3 挂载文件系统
$ sudo mkdir /mnt/cdrom ### 新建一个目录
$ sudo mount /dev/cdrom /mnt/cdrom/ ### 挂载光盘至这个新建的目录
mount: 块设备 /dev/scd0 写保护,以只读方式挂载
$ cd /mnt/cdrom/
$ ls ### 查看光盘内容
$ cd / ### 退出/mnt/cdrom目录
$ sudo umount /dev/cdrom ### 卸载光盘
注:卸载光盘前必须先退出光盘所挂载的那个目录,否则系统会提示设备忙并拒绝卸载
4 Linux下所有的设备都被当作文件来操作
5 在Linux中,每个设备都被映射为一个特殊文件,这个文件被称作“设备文件”。对于上层应用程序而言,所有对这个设备的操作都是通过读写这个文件实现的,通过文件来操作硬件。Linux把所有的设备文件都放在/dev/目录下
这些文件中大部分是块设备文件和字符设备文件,块设备(例如磁盘)可以随机读写,/dev/hda1,/dev/sda2等就是典型的块设备文件。字符设备只是按顺序接受“字符流”,常见的有打印机等。
6 挂载文件系统:mount命令,也可以使用 -t 选项明确指明设备所使用的文件系统类型,常见文件系统的表示方法
表示方法 | 描述 |
ext2 | Linux的ext2文件系统 |
ext3 | Linux的ext3文件系统 |
ext4 | Linux的ext4文件系统 |
vfat | windows的FAT16/FAT32文件系统 |
ntfs | windows的NTFS文件系统 |
iso9660 | CD-ROM光盘的标准文件系统 |
另外常用的选项是 -r 和 -w ,分别指定以只读模式和可读写模式挂载设备。 -w 是默认的
$ sudo mount -r /dev/sda3 /mnt/vista
7 在启动的时候挂载文件系统: /etc/fstab文件
8 查看磁盘使用情况: df命令
df命令提供了 -t 参数用于显示特定的文件系统
9 检查和修复文件系统: fsck命令
注:使用fsck命令检查并修复文件系统是存在风险的,特别是当磁盘错误非常严重时,修复前请记得备份
10 在磁盘上建立文件系统: mkfs命令,如下
$ sudo mkfs -t ext3 /dev/sdb1 ### 将/dev/sdb1分区格式化为ext4格式
$ sudo mkfs -t ext4 -c /dev/sdb1 ### 可以用 -c 选项来检查指定设备上损坏的块
11 压缩文件:gzip,是目前Linux下使用常见的压缩工具
$ gzip xxx ### 会将xxx压缩成xxx.gz ,源文件xxx就不存在
$ gzip -d xxx.gz 或 gunzip xxx.gz ### 解压xxx.gz文件,xxx.gz就不存在,变成xxx
$ gzip -l xxx.gz ### -l 选择用于查看压缩效果,文件大小以字节为单位
$ gzip -tv xxx.gz ### -t 选项用来测试压缩文件的完整性
12 更高压缩率:bzip2,压缩率高,压缩速度慢,使用方法跟gzip一样
$ bzip2 xxx ### 会将xxx压缩成xxx.bz2 ,源文件xxx就不存在
$ bzip2 -d xxx.bz2 或 bunzip2 xxx.bz2 ### 解压xxx.bz2文件,xxx.bz2就不存在,变成xxx
$ bzip2 -l xxx.bz2 ### -l 选择用于查看压缩效果,文件大小以字节为单位
$ bzip2 -tv xxx.bz2 ### -t 选项用来测试压缩文件的完整性
bzip2可以识别的压缩文件格式包括 .bz2 , .bz , .tbz2 , .tbz 和 bzip2。
13 支持rar格式, rar x xxx.rar ### 解压xxx.rar
14 Linux下的两个存档工具:tar和dd
文件打包:tar
tar -cvf shell.tar shell/ ### 将shell目录连同其下的文件一同打包成文件shell.tar,tar不会删除原来的文件
-c 选项指定tar创建归档文件,-v 选项显示命令的执行过程,-f 选项则用于指定归档文件的文件名
tar -xvf shell.tar ### -x 选项解开shell.jar 文件
-w 选项用于提示确认。-z 选项会自动调用gzip程序,归档文件时最后会去调用gzip压缩归档文件;解开时会先调用gzip解压再解档,如下
tar -czvf shell.tar.gz shell/ ### 打包
tar -xzf shell.tar.gz ### 解档
-j 选项用于调用bzip2程序,用法跟-z选项一样
tar -cjvf shell.tar.bz2 shell/ ### 打包
tar -xjf shell.tar.bz2 ### 解档
转移文件:dd,因为有了更好的dump和restore命令,dd现在很少用。if选项指定输入端的文件系统,of选项则指定其输出端。
$ dd if=/dev/cdrom of=CD.iso
15 Linux中用于建立分区表的工具: fdisk。fdisk是一个交互式的应用程序。在执行完一项操作后,fdisk会显示一行提示信息,并给出一个冒号“ :”,等待用户输入命令。使用命令m可以显示fdisk所有的命令信息
16 备份文件系统: dump
# dump -0u -f /dev/nst0 /web ### 执行从/web到/dev/nst0的0级备份
-0 选项指定dump执行级别为0的备份。级别0表示完整备份。-u选项指定dump更新/etc/dumpdates文件,该文件记录历次备份的时间,备份级别和实施备份的文件系统。 -f 选项指定了用于存放备份的设备
# rdump -0u -f backup:/dev/nst0 /web ### rdump命令用于将备份转储到远程主机
17 从灾难中恢复:restore,它是dump的配套工具,用于从备份设备中提取数据。在恢复前,首先要建立一个临时目录。
# mkdir /var/restore ###建立用于恢复文件的临时目录/var/restore
# cd /var/restore
# restore -i -f /dev/sdb3 ### -i 选项用于交互式地恢复单个文件和目录,-f 选项指定存放备份的设备
# restore -r -f /dev/sdb3 ### -r 选项恢复整个文件系统
# rrestore -i -f backup:/dev/nst0 ### 从远程主机提取备份信息
18 cron 是一个能够定时执行命令的软件
1 创建帐户
$ sudo useradd -m xxx ### 添加一个用户名为xxx的用户,并自动建立主目录
$ sudo passwd xxx ### 设置用户xxx的登录密码
2 不带 -m 选项的useradd命令不会为新用户建立主目录,用户可以登录到系统的shell,但不能够登录到图形界面。
3 useradd命令的另一个常用的选项是 -g , 该选项用于指定用户所属的组。如下
$ sudo useradd -g users mike ### 建立名为mike的用户帐号,并指定其属于users组
4 添加组可以使用groupadd命令,如下
$ sudo groupadd newgroup
5 shell会记录用户的每一条命令,可以history命令查看
history会列出所有使用过的命令并加以编号,这些信息被存储在用户主目录的.bash_history文件中,这个文件默认情况下可以存储1000条命令记录。用如下命令可以列出最近n条
$ history 10 ### 列出最近使用的10条命令
6 所有用户信息都登记在/etc/passwd文件中,而/etc/shadow文件则保存着用户的的登录密码
7 删除用户:userdel
$ sudo userdel mike ### 删除用户帐号mike,但不删除用户的主目录
$ sudo userdel -r mike ### -r 选项会连同主目录一起删除
8 管理用户帐号:usermod,常用的选项
$ sudo usermod -l mike -d /home/mike -e /12/31/13 jon ###将john改名为mike,主目录改为/home/mike,并设置有效期至2013年12月31日
9 查看用户信息:id,查看用户的UID,GID以及所属的组,id以用户名为参数。没有用户名则显示当前登录用户的信息
10 用户间切换:su
11 /etc/passwd文件内容预览
每一行由7个字段组成,字段间使用冒号分隔,各字段的含义如下:
12 MD5加密算法可以对任意长度的口令进行加密且不产生损失,加密后的长度都是一个固定值(34个字符)。
1 创建shell脚本test,如下
#! /bin/bash
while echo "I'm making files!!"
do
mkdir adir
cd adir
touch afile
sleep 2s
done
$ chmod +x test
$ ./test & ### &表示后台运行
2 每个进程都有一个ID号,即PID。所有进程都必须由另一个进程创建(除了在系统引导时由内核自主创建并安装的几个进程),会有一个父进程的PID,即PPID
3 监视进程:ps命令
4 即时跟踪进程信息:top命令。使用命令q可退出
5 查看占用文件的进程:lsof ,查看某个文件被哪些进程使用
6 向进程发送信号:kill,标准语法如下:
kill [-signal] pid
使用kill命令是否一定可以终止一个进程吗?答案是否定的。但有一个KILL信号可以在内核级别杀死一个进程,如下三种方式
$ sudo kill -KILL pid
$ sudo kill -SIGKILL pid
$ sudo kill -9 pid
7 调整进程的谦让度:nice和renice,高谦让度意味着低优先级,谦让度值在-20 ~ +19 。
$ nice -n 2 bc ### 设置bc以谦让度增量2启动
$ sudo nice -n -3 bc ### 设置bc以谦让度-3启动,但可能不得不用root权限启动
$ nice bc ### 不带 -n 选项,默认以谦让度0启动
$ renice +12 -p 8567 ### renice命令可以在进程运行时调整谦让度,-p 选项指定进程的PID
1 DSL是数字用户线路(Digital Subscriber Line)的缩写。目前国内主要使用的DSL技术分支是ADSL,A代表非对称,即上传和下载速度不同。
2 ifconfig命令用于启动或禁用一个网络接口,同时设置其IP地址,子网掩码以及其他网络选项。如下
$ sudo ifconfig eth0 192.168.1.14 netmask 255.255.255.0 up ### 将网络接口eth0的IP地址设置为192.168.1.14,子网掩码为255.255.255.0,up表示同时启动这个网络接口
$ sudo ifconfig eth0 down
3 使用route配置静态路由。Linux内核中维护着一张路由表,每当一个数据包需要被发送时,Linux会把这个包的目标IP地址和路由表中的路由信息比较。使用netstat -r命令可以看到当前系统中的路由信息
route命令用于增加或删除一条路由,如下
$ sudo route add default gw 10.71.84.2
也可以手动设置路由信息,如希望链接到一个网络地址为10.62.74.0/24的网络,在本地网络中有一台IP地址为10.71.84.51的主机可作为网关。
$ sudo route add -net 10.62.74.0/24 gw 10.71.84.51
4 DNS是一种确定主机名和IP地址间的映射关系的方法。