ubuntu 学习笔记

来源:互联网 发布:脸部干燥怎么补水 知乎 编辑:程序博客网 时间:2024/05/23 19:06

 ubuntu 学习笔记
http://wiki.ubuntu.org.cn/UbuntuManual

笔记如下:

您可以在 root 命令提示符下使用下面的命令来关闭系统。

# shutdown -h now

上面是在正常的多用户模式下面的方法。如果您是处在单用户模式,您可以在root用户的命令提示符下使用下面的

命令:

# poweroff -i -f

可选择的其它方式,比如您可以用Ctrl-Alt-Delete来关闭系统

Midnight Commander (MC)

* F1: 帮助菜单
* F3: 内置文件阅读器
* F4: 内置编辑器
* F9: 激活折叠菜单
* F10: 退出Midnight Commander
* Tab: 在两个窗口间移动
* Insert: 为多文件操作生成文件如拷贝
* Del: 删除文件(小心—请设置MC为安装删除模式)
* Cursor keys: 与各自的名字一致

在类 Unix 的系统中,有几个文本处理工具经常用到。

* 非正则表达式的方法有:
o head 显示文件的开始部分。
o tail 显示文件的结尾部分。
o sort 给文件中的每一行排序。
o uniq 删除文件中重复的行。
o tr 转换或者删除字符。
o diff 把文件中的内容一行一行的比较。
* 基本的正则表达式Basic regular expression (BRE) :
o grep 按模式匹配文本。
o ed 一个原始的行编辑器。
o sed 一个流编辑器。
o vi 一个屏幕编辑器。
o emacs 一个屏幕编辑器。
* 扩展的正则表达式Extended regular expression (ERE) is used:
o egrep 按模式匹配文本。
o awk 进行简单的文本处理。 查看 Awk, 第 13.3 节.
o perl做非常难以想像的文本处理。 查看 Perl, 第 13.4 节.

文件和目录的访问权限对如下3类用户进行了分别定义:

* 文件拥有者(u),
* 文件拥有者所在用户组中的其它成员(g),和
* 所有其它用户(o)。

每个文件均拥有下列三种权限:

* read (r): 查看文件内容
* write (w): 修改文件
* execute (x): 如同命令一样执行文件

每个目录均拥有下列三种权限:

* read (r): 列出目录内容
* write (w): 在目录中增删文件
* execute (x): 访问目录中的文件

在此,对目录的execute权限,不仅意味着允许查看目录下文件的内容,还允许查看文件的其它信息如文件大小、修

改时间。

ls可用来显示目录和文件的这些信息。参阅 ls(1)。使用ls的-l选项,就会按如下顺序显示下列信息:

* 文件类型(第1个字符)
o -: 普通文件
o d: 目录
o l: 符号链接
o c: 字符型设备节点
o b: 块设备节点
o p: 命名管道
o s: 套接字
* 文件访问权限(接下来的9个字符,每3个一组依次代表user、group和other)。
* 文件的硬链接数
* 文件拥有user的用户名
* 文件所属group的用户组名
* 文件的字符数大小 (bytes)
* 文件的时间和日期 (mtime)
* 文件的名称

GNU/Linux的文件有3种类型的时间戳:

* mtime: 修改时间 (ls -l),
* ctime: 状态改变时间 (ls -lc),以及
* atime: 最近访问时间 (ls -lu).

注意ctime并非文件创建时间。

* 覆盖一个文件会改变所有三类时间mtime、ctime和atime所有三类时间。
* 改变文件的访问权限或拥有者会改变文件的ctime和atime。
* 读文件会改变文件的atime。

注意,在 Debian 系统中,即便是简单的读文件通常会引起文件的写操作,从而更新inode上的atime信息。使用

noatime选项来挂载文件系统,可使用系统忽略该操作,从而加速文件的访问和读取。

有多种方法禁用 X 启动 daemons:

* 运行 update-rc.d -f ?dm remove ; update-rc.d ?dm stop 99 1 2 3 4 5 6 .

* 在所有 /etc/init.d/?dm 文件的最前面加上“exit 0”。

* 把所有的 /etc/rc2.d/S99?dm 文件改名为 /etc/rc2.d/K99?dm。

* 删除所有的 /etc/rc2.d/S99?dm 文件。

* 运行 :>/etc/X11/default-display-manager

其中,rc2.d 中的数字必须与 /etc/inittab 中指定的 runlevel 一致。而 ?dm 的意思是你要将同一个命令运行多

次,每次将其替换成 xdm、gdm、kdm 和 wdm 中的一个。

在 Ubuntu 下只有第一种方法是“唯一正确的方法”。最后一种方法比较简单但只适用于 Ubuntu,而且还需要使用

dpkg-reconfigure 重新设置一次。其它方法都是通用的中 daemons 的方法。

你仍可在任何控制台 shell 中用 startx 命令启动 X。

Shell:使用screen命令和 用screen来定制控制台, 第 8.6.28 节 中描述的“^A H”;或者使用 script 命令。

$ script
Script started, file is typescript
... do whatever ...
Ctrl-D
$ col -bx <typescript >savefile
$ vi savefile

还可使用下面的方法:

$ bash -i 2>&1 | tee typescript

分割大文件

$ split -b 650m file # 将大文件分块成多个650MB的小文件
$ cat x* >largefile # 将所有小文件合并成一个大文件

从文本格式的表格中抽取数据
很COOL的文章!!

假设有一个文本文件名为DPL,其中存放着所有前Debian项目领导人的名字和他们的上台日期,表格格式是以空格做

为分隔的。

Ian Murdock August 1993
Bruce Perens April 1996
Ian Jackson January 1998
Wichert Akkerman January 1999
Ben Collins April 2001
Bdale Garbee April 2002
Martin Michlmayr March 2003

Awk经常用于从这类文件中提取数据。

$ awk '{ print $3 }' <DPL # month started
August
April
January
January
April
April
March
$ awk '($1=="Ian" { print }' <DPL # DPL called Ian
Ian Murdock August 1993
Ian Jackson January 1998
$ awk '($2=="Perens" { print $3,$4 }' <DPL # When Perens started
April 1996

象 Bash 这种 Shell 也能够用来分析这种文件:

$ while read first last month year; do
echo $month
done <DPL
... 跟第一个 Awk 例子有相同的输出

如果你改变 IFS 为 ":",你能够用 shell 漂亮的分析 /etc/passwd:

$ oldIFS="$IFS" # 保存旧值
$ IFS=":"
$ while read user password uid gid rest_of_line; do
if [ "$user" === "osamu" ]; then
echo "$user's ID is $uid"
fi
done < /etc/passwd
osamu's ID is 1001
$ IFS="$oldIFS" # 恢复旧值

shell 也使用 IFS 来分开参数扩展、命令替换和算术扩展的结果集。 但在被单引号或双引号引用的单词内,不会

发生这种情况。 默认的 IFS 值是: <space>、 <tab> 和 <newline> 。

请小心使用这个 shell IFS 技巧。 当 shell 解释部分脚本作为它的输入时,奇怪的事情将会发生。

$ IFS=":," # 使用 ":" 和 "," 作为 IFS
$ echo IFS=$IFS, IFS="$IFS" # echo 是 Bash 内建的
IFS== , IFS=:,
$ date -R # 只是一个命令输出
Sat, 23 Aug 2003 08:30:15 +0200
$ echo $(date -R) # 子 shell --> 输入到主 shell
Sat 23 Aug 2003 08 30 36 +0200
$ unset IFS # 重设 IFS 为默认的
$ echo $(date -R)
Sat, 23 Aug 2003 08:30:50 +0200

精巧的管道命令辅助脚本

下列脚本做为管道的一部分十分有用。

find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local"
# 查找 /usr 下的所有文件,排除某些文件
xargs -n 1 command # 将所有项作为标准输入来执行命令
xargs -n 1 echo | # 将空格隔离的项分开为行
xargs echo | # 合并所有的行到一行里面
grep -e pattern| # 提取含有 pattern 的行
cut -d: -f3 -|
# 提取用 : 分开的第 3 列(比如说 passwd 文件)
awk '{ print $3 }' | # 提取用空格分开的第 3 列
awk -F'/t' '{ print $3 }' |
# 提取用 tab 分开的第 3 列
col -bx | # 删除退格键,扩展 tab 为空格
expand -| # 扩展 tab
sort -u| # 排序并删除重复行

tr '/n' ' '| # 将多行连接为一行
tr '/r' ''| # 删除 CR
tr 'A-Z' 'a-z'| # 转化大写字母为小写
sed 's/^/# /'| # 将每行变为注释
sed 's//.ext//g'| # 删除 .ext
sed -n -e 2p| # 显示第 2 行
head -n 2 -| # 显示头两行
tail -n 2 -| # 显示最后两行

从网页上获取文本或邮件列表文档

下面的操作将网页转化为文本文件。从网上拷贝配置文件时十分有用。

$ lynx -dump http://www.remote-site.com/help-info.html >textfile

links和w3m也可以这么用,只是生成的文本样式可能略有不同。

如果是邮件列表文档,可使用munpack从文本获得mime内容。

网络测试基础

安装netkit-ping、traceroute、dnsutils、ipchains(适用于2.2版内核)、iptables(适用于2.4版内核)和net

-tools软件包,然后执行:

$ ping yahoo.com # 检查Internet连接
$ traceroute yahoo.com # 跟踪IP数据包
$ ifconfig # 检查主机设置
$ route -n # 检查路由设置
$ dig [@dns-server.com] host.dom [{a|mx|any}] |less
# 检查dns-server.com的host.dom DNS记录
# 查找{a|mx|any}记录
$ ipchains -L -n |less # 检查包过滤(2.2 kernel)
$ iptables -L -n |less # 检查包过滤(2.4 kernel)
$ netstat -a # 查找系统上所有打开的端口
$ netstat -l --inet # 查找系统监听的端口
$ netstat -ln --tcp # 查找系统监听的TCP端口(端口数字)

清空文件内容

要清空某些文件如日志文件的内容,千万不要使用rm删除文件然后再创建一个新的空文件,因为在两次操作的间隔

,系统可能需要访问该文件。下面是清空文件内容的安全方法:

$ :>file-to-be-cleared

空文件

下面的命令可以创建空文件:

$ dd if=/dev/zero of=filename bs=1k count=5 # 5KB 零内容
$ dd if=/dev/urandom of=filename bs=1M count=7 # 7MB 随机内容
$ touch filename # 创建一个 0 B 大小的文件 (如果文件存在,更新该文件的修改时间)

例如,最实用的用法是从Debian启动软盘的shell中执行下列命令将硬盘/dev/hda的内容完全清空。

# dd if=/dev/urandom of=/dev/hda ; dd if=/dev/zero of=/dev/hda