最近在用Ubuntu11.04重新学习以前没怎么学好的Unix,不过在VMware7.1.4下Ubuntu11.04的X Window表现不是很好。这都无所谓,先把命令行的基础打好再说。
Ubuntu的Vi也不好用,搞了个Vim用来学习了,简单记录下它的基本操作,备用,给大家提供一本书《UNIX实用教程(第5版)》命令模式切换到文本输入模式:
键
功能
i
在光标左侧输入文本
I
在当前行的行首输入文本
a
在光标右侧输入文本
A
在当前行的行尾输入文本
o
在当前行的下一行添加一个空行,光标放在新行的行首
O
在当前行的上一行添加一个空行,光标放在新行的行首
无论是使用哪种快捷键进入这个模式,在插入模式下,都是在光标前进行插入。
文本修改键,只适用于命令模式
键
功能
x
删除光标位置指定的字符
dd
删除光标所在的行
u
撤销最近的修改
U
撤销对当前行上做的所有修改
r
替换光标位置上的一个字符
R
替换从光标位置上开始的字符,同时改变vim到文本输入模式
.
重复上一次的修改
光标移动键,命令模式下控制光标移动。
键
功能
h或[←]
将光标向左移动一位
j 或[↓]
将光标向下移动一行
k或[↑]
将光标向上移动一行
i 或[→]
将光标向右移动一位
$
将光标移动移到当前行的行尾
w
将光标向右移动一个字,到下一个字的开头
b
将光标向左移动一个字,到前一个字的开头
e
将光标移到字尾
0
将光标移到当前行的行首
[Enter]
将光标移到下一行的行首
[Space]
将光标向右移动一位
[Backspace]
将光标向左移动一位
退出命令,除了ZZ命令外,都以":"开始,用[Enter]结束命令行。
键
功能
wq
保存文件,退出编辑器
w
保存文件,但不退出编辑器
q
退出编辑器
q!
不保存文件,退出编辑器
ZZ
保存文件,退出编辑器
搜索命令
键
功能
/
向前搜索指定的字符串,搜索到后按n寻找下一个
?
向后搜索指定的字符串,搜索到后按n寻找下一个
对于命令的详细解释可以在vim里使用 :help [命令] 来查询在线帮助。
以上命令在原教材以Vi中使用,已在Vim 7.3.35中全部测试可用。
有一阵子着实对Ubuntu的网络配置很迷惑,耐下心来仔细上网找了找,有点小心得,总结一下。
先说下大概的配置过程,再去细究一些情况。
一、配置大概分三类:通过配置文件配置、通过命令配置、通过图形化的网络连接菜单配置。
主要文件:/etc/network/interfaces,这里是IP、网关、掩码等的一些配置;/etc/resolv.conf这个文件保存DNS的有关信息
主要命令:sudo /etc/init.d/networking restart重启网络,使配置文件的配置失效;sudo route add default gw <IP地址>,设置网关。
二、配置方法
1、通过命令配置
如果你只是想暂时性的修改IP地址,可以选择这种方法。重启网络后会丢失。
1)sudo ifconfig eth0 <IP地址> netmask <子网掩码> up
eth0是网卡。最后的up表示开启网卡,可以不加。
2) sudo route add default gw <网关IP>
设置网关
3) 设置DNS,这个必须去配置文件修改,同第二种
4)配置主机名称
命令:sudo /bin/hostname <主机名>
但是系统启动时,会从/etc/hostname来读取主机的名称。
2、通过配置文件配置
1)配置IP网关:sudo gedit /etc/network/interfaces 里面添加
dhcp的:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
静态IP的:
auto lo
iface lo inet loopback
#上面的是回环
#网卡eth0的配置
auto eth0
#staic 静态IP
iface eth0 inet static
address 192.168.1.5
netmask 255.255.255.0
gateway 192.168.1.1
#network 192.168.3.0
#broadcast 192.168.3.255
#后面两条是网络号和广播号,这个可以由其它信息计算,因此无需设置
这里还可以配置第二IP(虚拟IP)
auto eth0:1
iface eth0:1 inet static
address 192.168.1.60
netmask 255.255.255.0
#network x.x.x.x
#broadcast x.x.x.x
gateway x.x.x.x
2)配置DNS: sudo gedit /etc/resolv.conf
nameserver 202.107.117.11
3)主机名:sudo gedit /etc/hostname 里面输入主机名。默认有个主机名,因此这个不是必须的。
4)重启网络:sudo /etc/init.d/networking restart
也可以重启网卡:
sudo ifconfig eth0 down
sudo ifconfig eth0 up
重启网卡对别的网卡无影响,更推荐一些。
3、通过图形化的网络连接菜单配置
这个在系统-首选项里,也叫做network manager,通过右上角面板里的网络管理小程序可以启用它的配置。
这个有点问题:它和第二种方法共用配置文件,所以会导致种种冲突,使用时要注意。
不如,这两种方法都做了配置,sudo /etc/init.d/networking restart启用的是第二种方法的配置,而点击桌面面板上的网络管理小程序中的auto eth0启用的是第三种的配置。
Linux命令行吸引了大多数Linux爱好者。一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务。Linux命令和它们的转换对于Linux用户、Shell脚本程序员和管理员来说是最有价值的宝藏。有些Linux命令很少人知道,但不管你是新手还是高级用户,它们都非常方便有用。
1. sudo !!命令
没有特定输入sudo命令而运行,将给出没有权限的错误。那么,你不需要重写整个命令,仅仅输入'!!'就可以抓取最后的命令。
$ apt-get update
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
$ sudo !!
sudo apt-get update
[sudo] password for server:
…
..
Fetched 474 kB in 16s (28.0 kB/s)
Reading package lists... Done
server@localhost:~$
2. python命令
下面的命令生产一个通过HTTP显示文件夹结构树的简单网页,可以通过浏览器在端口8000访问,直到发出中断信号。
# python -m SimpleHTTPServer
3. mtr命令
我们大多数都熟悉ping和traceroute。那对于把两个命令的功能合二为一的mtr命令呢。如果mtr没在你的机子上安装,apt或者yum需要的包。
sudo apt-get install mtr (On Debian based Systems)
# yum install mtr (On Red Hat based Systems)
现在运行mtr命令,开始查看mtr运行的主机和google.com直接的网络连接。
# mtr google.com
3. mtr命令
我们大多数都熟悉ping和traceroute。那对于把两个命令的功能合二为一的mtr命令呢。如果mtr没在你的机子上安装,apt或者yum需要的包。
sudo apt-get install mtr (On Debian based Systems)
# yum install mtr (On Red Hat based Systems)
现在运行mtr命令,开始查看mtr运行的主机和google.com直接的网络连接。
# mtr google.com
4. Ctrl+x+e命令
这个命令对于管理员和开发者非常有用。为了使每天的任务自动化,管理员需要通过输入vi、vim、nano等打开编辑器。
仅仅从命令行快速的敲击“Ctrl-x-e”,就可以在编辑器中开始工作了。
5. nl命令
“nl命令”添加文件的行数。一个叫做'one.txt'的文件,其每行的内容是(Fedora、Debian、Arch、Slack和Suse),给每行添加行号。首先使用cat命令显示“one.txt”的文件内容。
# cat one.txt
fedora
debian
arch
slack
suse
现在运行“nl命令”,以添加行号的方式来显示。
# nl one.txt
1 fedora
2 debian
3 arch
4 slack
5 suse
6. shuf命令
“Shut”命令随机从一个文件或文件夹中选择行/文件/文件夹。首先使用ls命令来显示文件夹的内容。
# ls
Desktop Documents Downloads Music Pictures Public Templates Videos
# ls | shuf (shuffle Input)
Music
Documents
Templates
Pictures
Public
Desktop
Downloads
Videos
# ls | shuf -n1 (pick on random selection)
Public
# ls | shuf -n1
Videos
# ls | shuf -n1
Templates
# ls | shuf -n1
Downloads
注意:你可以把‘ n1'替换成‘ n2'来输出两个随机选择或者使用 n3、 n4等数字输出其他任意的随机选择。
7. ss命令
“ss”表示socket统计。这个命令调查socket,显示类似netstat命令的信息。它可以比其他工具显示更多的TCP和状态信息。
# ss
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.1.198:41250 *.*.*.*:http
CLOSE-WAIT 1 0 127.0.0.1:8000 127.0.0.1:41393
ESTAB 0 0 192.168.1.198:36239 *.*.*.*:http
ESTAB 310 0 127.0.0.1:8000 127.0.0.1:41384
ESTAB 0 0 192.168.1.198:41002 *.*.*.*:http
ESTAB 0 0 127.0.0.1:41384 127.0.0.1:8000
8. last命令
“last”命令显示的是上次登录用户的历史信息。这个命令通过搜索文件“/var/log/wtmp”,显示logged-in和logged-out及其tty‘s的用户列表。
# last
server pts/0 :0 Tue Oct 22 12:03 still logged in
server tty8 :0 Tue Oct 22 12:02 still logged in
…
...
(unknown tty8 :0 Tue Oct 22 12:02 - 12:02 (00:00)
server pts/0 :0 Tue Oct 22 10:33 - 12:02 (01:29)
server tty7 :0 Tue Oct 22 10:05 - 12:02 (01:56)
(unknown tty7 :0 Tue Oct 22 10:04 - 10:05 (00:00)
reboot system boot 3.2.0-4-686-pae Tue Oct 22 10:04 - 12:44 (02:39)
wtmp begins Fri Oct 4 14:43:17 2007
9. curl ifconfig.me
那么如何得到你的外部IP地址呢?使用google?那么这个命令就在你的终端输出你的外部IP地址。
# curl ifconfig.me
注意:你可能没有按照curl包,你需要 apt/yum来按照包。
10. tree命令
以树式的格式得到当前文件夹的结构。
# tree
.
|-- Desktop
|-- Documents
| `-- 37.odt
|-- Downloads
| |-- attachments.zip
| |-- ttf-indic-fonts_0.5.11_all.deb
| |-- ttf-indic-fonts_1.1_all.deb
| `-- wheezy-nv-install.sh
|-- Music
|-- Pictures
| |-- Screenshot from 2013-10-22 12:03:49.png
| `-- Screenshot from 2013-10-22 12:12:38.png
|-- Public
|-- Templates
`-- Videos
10 directories, 23 files
11. pstree
这个命令显示当前运行的所有进程及其相关的子进程,输出的是类似‘tree'命令的树状格式。
# pstree
init─┬─NetworkManager───{NetworkManager}
├─accounts-daemon───{accounts-daemon}
├─acpi_fakekeyd
├─acpid
├─apache2───10*[apache2]
├─at-spi-bus-laun───2*[{at-spi-bus-laun}]
├─atd
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─colord───{colord}
├─colord-sane───2*[{colord-sane}]
├─console-kit-dae───64*[{console-kit-dae}]
├─cron
├─cupsd
├─2*[dbus-daemon]
├─dbus-launch
├─dconf-service───2*[{dconf-service}]
├─dovecot─┬─anvil
│ ├─config
│ └─log
├─exim4
├─gconfd-2
├─gdm3─┬─gdm-simple-slav─┬─Xorg
│ │ ├─gdm-session-wor─┬─x-session-manag─┬─evolution-a+
│ │ │ │ ├─gdu-notific+
│ │ │ │ ├─gnome-scree+
│ │ │ │ ├─gnome-setti+
│ │ │ │ ├─gnome-shell+++
│ │ │ │ ├─nm-applet──+++
│ │ │ │ ├─ssh-agent
│ │ │ │ ├─tracker-min+
│ │ │ │ ├─tracker-sto+
│ │ │ │ └─3*[{x-sessi+
│ │ │ └─2*[{gdm-session-wor}]
│ │ └─{gdm-simple-slav}
│ └─{gdm3}
├─6*[getty]
├─gnome-keyring-d───9*[{gnome-keyring-d}]
├─gnome-shell-cal───2*[{gnome-shell-cal}]
├─goa-daemon───{goa-daemon}
├─gsd-printer───{gsd-printer}
├─gvfs-afc-volume───{gvfs-afc-volume}