0%

网络中不中,先看ping行不行

linux系统里面如果想判断网络的好坏,脑海中蹦出的第一个命令就是ping了。

官方定义为:

ping - send ICMP ECHO_REQUEST to network hosts

ping命令基本是最常用的网络命令,它可以用来测试与目标主机的连通性。

ping使用ICMP传输协议,通过发送ICMP ECHO_REQUEST数据包到网络主机,并显示返回的相应情况,根据这些信息就可以判断目标主机是否可以访问,在发送的过程中还会有一个时间戳用来计算网络的状态。

不过有些服务器为了防止通过ping探测到,可能会在防火墙或者内核参数中禁止ping命令,这样的话,可能虽然目标主机可以访问,但是无法ping通,所以并不能说ping不通的网络就是不能访问的。

需要注意linux下的ping和windows下的ping稍有区别,linux下ping不会自动终止,需要按ctrl+c终止或者用参数-c指定要求完成的回应次数。

语法

ping的使用说实话挺复杂,挺多的,不过常用的这篇短文基本就够了。

详细如下:

1
2
3
4
5
# ALL
$ ping [-aAbBdDfhLnOqrRUvV46] [-c count] [-F flowlabel] [-i interval] [-I interface] [-l preload] [-m mark] [-M pmtudisc_option] [-N node‐info_option] [-w deadline] [-W timeout] [-p pattern] [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp option] [hop ...] destination

# 较常用的选项如下:
$ ping [-c count] [-i interval] destination

参数说明

  • -c <完成次数> 设置完成要求回应的次数。

  • -i interval 指定收发信息的间隔时间。

不加任何参数

如果不加任何参数,查看是否ping

1
2
3
4
5
6
7
8
9
10
11
12
$ ping www.baidu.com   
PING www.a.shifen.com (115.239.210.27) 56(84) bytes of data.
64 bytes from 115.239.210.27: icmp_seq=1 ttl=52 time=6.06 ms
64 bytes from 115.239.210.27: icmp_seq=2 ttl=52 time=5.56 ms
64 bytes from 115.239.210.27: icmp_seq=3 ttl=52 time=5.67 ms
64 bytes from 115.239.210.27: icmp_seq=4 ttl=52 time=5.82 ms
64 bytes from 115.239.210.27: icmp_seq=5 ttl=52 time=5.70 ms
64 bytes from 115.239.210.27: icmp_seq=6 ttl=52 time=5.79 ms
^C # 此处输入了Ctrl+C强制退出
--- 192.168.1.123 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 0.152/0.159/0.172/0.017 ms

可以看到可以pingwww.baidu.com,时延还算比较OK,几个毫秒量级。

这里看一下几个字段的含义,其中:

56(84) bytes of data:表示默认的数据包长度为56字节;

time=5.56ms:表示响应的时间,值越小,证明连接越快;

TTL=52:TTL是Time To Live的缩写,表示DNS记录在DNS服务器上存在的时间,是IP协议包的一个值,告诉路由器啥时候抛弃这个数据包,(大体上可以通过这个值来判断目标类型的操作系统。)

发送指定数目

可以通过 参数-c 来发送指定数目的包后停止

1
2
3
4
5
6
7
8
9
10
11
$ ping www.baidu.com -c 5
PING www.a.shifen.com (115.239.211.112) 56(84) bytes of data.
64 bytes from 115.239.211.112: icmp_seq=1 ttl=52 time=6.03 ms
64 bytes from 115.239.211.112: icmp_seq=2 ttl=52 time=5.96 ms
64 bytes from 115.239.211.112: icmp_seq=3 ttl=52 time=5.79 ms
64 bytes from 115.239.211.112: icmp_seq=4 ttl=52 time=5.79 ms
64 bytes from 115.239.211.112: icmp_seq=5 ttl=52 time=6.21 ms

--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 5.791/5.958/6.215/0.186 ms

此时将在发送5次数据包以后自动停止,在Linux里面,如果不加这个参数,是会一直发送运行的。

设定发送时间间隔

可以通过 参数 -i N指定每个N秒发送一次信息,如下将每隔3秒发送一次ping信息。

1
2
3
4
5
6
7
8
9
10
11
12
$ ping www.baidu.com -i 3
PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=55 time=28.6 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=55 time=28.6 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=55 time=28.6 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=4 ttl=55 time=28.6 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=5 ttl=55 time=28.6 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=6 ttl=55 time=28.6 ms
^C
--- www.a.shifen.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 15041ms
rtt min/avg/max/mdev = 28.650/28.670/28.697/0.139 ms

如上,每隔3秒会发送一次,对于需要持续检测或者记录的可以考虑适当加大这个时间间隔。

注意,只有管理员可以设置小于0.2秒的时间间隔。所以这个数值可以是浮点数~

组合使用

上面的几个例子是可以配合使用的,比如

1
2
3
4
5
6
7
8
9
10
11
$ ping www.baidu.com -c 4 -i 5 
PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1 ttl=55 time=29.4 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2 ttl=55 time=29.3 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=3 ttl=55 time=29.4 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=4 ttl=55 time=29.4 ms

--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 20045ms
rtt min/avg/max/mdev = 29.396/29.428/29.461/0.110 ms

这个例子为:每个5秒查询一次,一共查询4次,然后退出。

Linux网络入门ping

linux系统里面如果想判断网络的好坏,脑海中蹦出的第一个命令就是ping了。

官方定义为:

ping - send ICMP ECHO_REQUEST to network hosts

ping命令基本是最常用的网络命令,它可以用来测试与目标主机的连通性。

ping使用ICMP传输协议,通过发送ICMP ECHO_REQUEST数据包到网络主机,并显示返回的相应情况,根据这些信息就可以判断目标主机是否可以访问,在发送的过程中还会有一个时间戳用来计算网络的状态。

不过有些服务器为了防止通过ping探测到,可能会在防火墙或者内核参数中禁止ping命令,这样的话,可能虽然目标主机可以访问,但是无法ping通,所以并不能说ping不通的网络就是不能访问的。

需要注意linux下的ping和windows下的ping稍有区别,linux下ping不会自动终止,需要按ctrl+c终止或者用参数-c指定要求完成的回应次数。

语法

ping的使用说实话挺复杂,挺多的,不过常用的这篇短文基本就够了。

详细如下:

1
2
3
4
5
# ALL
$ ping [-aAbBdDfhLnOqrRUvV46] [-c count] [-F flowlabel] [-i interval] [-I interface] [-l preload] [-m mark] [-M pmtudisc_option] [-N node‐info_option] [-w deadline] [-W timeout] [-p pattern] [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp option] [hop ...] destination

# 较常用的选项如下:
$ ping [-c count] [-i interval] destination

参数说明

  • -c <完成次数> 设置完成要求回应的次数。

  • -i interval 指定收发信息的间隔时间。

不加任何参数

如果不加任何参数,查看是否ping

1
2
3
4
5
6
7
8
9
10
11
12
$ ping www.baidu.com   
PING www.a.shifen.com (115.239.210.27) 56(84) bytes of data.
64 bytes from 115.239.210.27: icmp_seq=1 ttl=52 time=6.06 ms
64 bytes from 115.239.210.27: icmp_seq=2 ttl=52 time=5.56 ms
64 bytes from 115.239.210.27: icmp_seq=3 ttl=52 time=5.67 ms
64 bytes from 115.239.210.27: icmp_seq=4 ttl=52 time=5.82 ms
64 bytes from 115.239.210.27: icmp_seq=5 ttl=52 time=5.70 ms
64 bytes from 115.239.210.27: icmp_seq=6 ttl=52 time=5.79 ms
^C # 此处输入了Ctrl+C强制退出
--- 192.168.1.123 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 0.152/0.159/0.172/0.017 ms

可以看到可以pingwww.baidu.com,时延还算比较OK,几个毫秒量级。

这里看一下几个字段的含义,其中:

56(84) bytes of data:表示默认的数据包长度为56字节;

time=5.56ms:表示响应的时间,值越小,证明连接越快;

TTL=52:TTL是Time To Live的缩写,表示DNS记录在DNS服务器上存在的时间,是IP协议包的一个值,告诉路由器啥时候抛弃这个数据包,(大体上可以通过这个值来判断目标类型的操作系统。)

发送指定数目

可以通过 参数-c 来发送指定数目的包后停止

1
2
3
4
5
6
7
8
9
10
11
$ ping www.baidu.com -c 5
PING www.a.shifen.com (115.239.211.112) 56(84) bytes of data.
64 bytes from 115.239.211.112: icmp_seq=1 ttl=52 time=6.03 ms
64 bytes from 115.239.211.112: icmp_seq=2 ttl=52 time=5.96 ms
64 bytes from 115.239.211.112: icmp_seq=3 ttl=52 time=5.79 ms
64 bytes from 115.239.211.112: icmp_seq=4 ttl=52 time=5.79 ms
64 bytes from 115.239.211.112: icmp_seq=5 ttl=52 time=6.21 ms

--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 5.791/5.958/6.215/0.186 ms

此时将在发送5次数据包以后自动停止,在Linux里面,如果不加这个参数,是会一直发送运行的。

设定发送时间间隔

可以通过 参数 -i N指定每个N秒发送一次信息,如下将每隔3秒发送一次ping信息。

1
2
3
4
5
6
7
8
9
10
11
12
$ ping www.baidu.com -i 3
PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=55 time=28.6 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=55 time=28.6 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=55 time=28.6 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=4 ttl=55 time=28.6 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=5 ttl=55 time=28.6 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=6 ttl=55 time=28.6 ms
^C
--- www.a.shifen.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 15041ms
rtt min/avg/max/mdev = 28.650/28.670/28.697/0.139 ms

如上,每隔3秒会发送一次,对于需要持续检测或者记录的可以考虑适当加大这个时间间隔。

注意,只有管理员可以设置小于0.2秒的时间间隔。所以这个数值可以是浮点数~

组合使用

上面的几个例子是可以配合使用的,比如

1
2
3
4
5
6
7
8
9
10
11
$ ping www.baidu.com -c 4 -i 5 
PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1 ttl=55 time=29.4 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2 ttl=55 time=29.3 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=3 ttl=55 time=29.4 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=4 ttl=55 time=29.4 ms

--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 20045ms
rtt min/avg/max/mdev = 29.396/29.428/29.461/0.110 ms

这个例子为:每个5秒查询一次,一共查询4次,然后退出。

Linux的静态库和动态库

编写库

如果有很多的函数要连接,这些函数可能来自不同的源文件,而且这些函数对于将来要编写的程序可能有用,那么可以直接创建一个库(就是一个存档文件)。库文件分为两种:当编译调用静态库中函数的代码时,那些函数编程最终可执行文件的一部分,另一方面,如果库是动态的,那么直到实际执行了程序,这些函数才会真正附加到调用代码上。

创建静态库

1
2
$gcc –g –c a.c
$ar rc liba.a a.o

这样就可以创建一个库文件liba.a,编译主程序时:

1
$gcc –g main.c –la

其中-la即为liba.a的缩写,两者含义相同。如果该库文件与源码不在一个目录,比如在lib目录,则需要L选项,即-Llib就可以将lib文件夹添加到搜索库文件的环境变量中。

这种方法的缺点就是如果很多程序使用同一个库,那么每个程序都会在磁盘上包含该库的独立副本,这样比较浪费空间。可以使用动态库解决这个问题(代价是需要一点额外的加载时间)。

创建动态链接库

1
2
$gcc –fPIC –c a.c
$gcc –shared –o liba.so a.o

这段代码创建了动态库liba.so,(Unix中命名动态库的惯例是使用后缀so,表示shared object,后面可能会跟着版本号。)与连接静态库一样地连接到这个动态库。(其中选项fpic:产生位置无关码

解释一下,位置无关码就是可以在进程的任意内存位置执行的目标码,动态链接库必须使用。)

1
$gcc –g main.c –la

开源软件中库的用法

开源软件现在很流行,尤其是在Linux用户之间。然而有时会出现一个问题,即与源代码配套的构建脚本(通常称为配置文件)找不到某些必须的库。试图通过设置LD_LIBRARY_PATH环境变量可能会失败。

这种问题的根源常常在于配置文件调用的名为pkgconfig的程序,这个程序会从某些元数据文件处接收库的信息,这样的文件爱你后缀为.pc,前缀是库的名称,例如,文件爱你libabc.pc中包含库文件libabc.so*的位置。

curses库

这个库简单到很多人根本没有把它当成GUI。

程序员可以使用curses库编写让光标在屏幕上移动的代码,改变字符的颜色,或者改成反白显示,插入以及删除文本等。

例如,像Vim和Emacs这样的文本编辑器就是用curses编写的。

通过直接添加或者手动编译添加库,解决 library not found for -lxxx 等的问题

本文基本上能完美解决这种库文件无法找到问题,一般保存为library not found for -llxxx。

这个问题是说链接器在链接的时候找不到 Ixxx 这个库,那我们就告诉它(添加库的路径),让它找到就好啦!

扩展:

  • 静态库无法链接报错:
1
library not found for -lxxx
  • 动态库无法装载报错:
1
dyld: library not loaded …/libxxx.dylib

解决办法

方法一:直接添加库

通常解决办法是:库存在,直接添加路径。

也就是通常遇到这个问题的时候,库是已经编译安装好了的,但是 IED 不能找到。这样的话就直接添加库的路径就好了。

第一步:找库

第一步,自己找到这个库。

库一般放在系统默认处或者安装到特定地方。

Linux 系统默认库放在:

1
2
3
4
/lib
/usr/lib
/usr/local/lib
...安装到特定地方,如我 Mac 的用 Homebrew 安装到:
1
/usr/local/Cellar/ice/3.7.0/lib
第二步:添加路径

添加库一般以下三种方法任选其一:

  1. 系统环境变量添加

  2. 系统级:修改/etc/profile或者/etc/bashrc

  3. 用户级:修改~/.bashrc或者~/.bash_profile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
###添加库的bin文件夹路径
export PATH =$PATH:$HOME/bin

###添加到gcc头文件
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/MyLib

###添加到g++头文件路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/MyLib

###添加到动态库
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/MyLib

###添加到静态库
export LIBRARY_PATH=$LIBRARY_PATH:/MyLib
1234567891011121314
  1. IED 编译环境添加

    因 IDE 不同而不同,如 Qt 在项目-构建设置-构建环境处添加

  2. 代码添加

1
2
3
 # 如 Qt pro 文件添加
LIBS += -L/the/library/path/ -llxx
12

这样,IDE就能找到库啦!

Linux的 od 命令

od - dump files in octal and other formats
顾名思义是查看八进制,可以通过指定参数为查看十六进制

  • -A 指定左边侧栏显示的地址基数,默认为八进制
  • -t 指定输出单元的进制格式和字节数
  • -x = -t x2 输出单元为双字节(注意:每单元内排列顺序从左到右为 [高字节|低字节])

例:

1
2
3
4
5
6
7
8
9
$  od -t x1 filename | less
0000000 ed de ad ab 76 00 00 00 76 89 00 59 e6 f3 75 14
0000020 f9 37 34 1b f7 b8 d3 4d ab 2d f1 ef f0 66 f5 12
0000040 2f 33 cf 40 e4 c2 cd 3f 5e 30 00 93 41 a1 0b 0c

$ od -A d -t x2 filename| less
0000000 deed abad 0076 0000 8976 5900 f3e6 1475
0000016 37f9 1b34 b8f7 4dd3 2dab eff1 66f0 12f5
0000032 332f 40cf c2e4 3fcd 305e 9300 a141 0c0b

最常用的且没有之一的 ls

.. note::
寻寻觅觅,冷冷清清,凄凄惨惨戚戚。
宋 李清照《声声慢·寻寻觅觅》

如果linux命令来个排名,ls命令应该是最常用的命令,除非你像黄蓉的母亲,有过目不忘的本领,惹得黄药师抱憾终身。

ls命令是list的缩写,通过ls命令,我们可以查看目录的内容,确定各种重要文件和目录的属性。

命令格式

1
ls [参数] [路径]

不加任何参数

如果不加任何参数,默认列出当前目录的内容。

1
2
3
4
5
6
$ ls /etc/sysconfig/network-scripts
ifcfg-em1
ifcfg-em2
ifcfg-em3
ifcfg-em4
....

使用-l显示更多细节

-l 就是使用long listing format长格式,来显示更多的内容信息。

1
2
3
4
5
6
7
$ ls -l /etc/sysconfig/network-scripts
total 264
-rw-r--r--. 1 root root 341 Nov 30 10:56 ifcfg-em1
-rw-r--r--. 1 root root 294 May 13 2016 ifcfg-em2
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em3
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em4
......

使用-t按照时间排序

如果希望看到最近创建的文件,就需要用到-t参数了。

1
2
3
4
5
6
7
$ ls -lt /etc/sysconfig/network-scripts/
total 264
-rw-r--r--. 1 root root 341 Nov 30 10:56 ifcfg-em1
-rw-r--r--. 1 root root 294 May 13 2016 ifcfg-em2
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em4
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em3
...

使用-r按照时间逆序

如果希望删除很早以前的文件,看到最早创建的文件,就需要用到-r参数了。

1
2
3
4
5
6
7
$ ls -ltr /etc/sysconfig/network-scripts/
total 264
...
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em3
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em4
-rw-r--r--. 1 root root 294 May 13 2016 ifcfg-em2
-rw-r--r--. 1 root root 341 Nov 30 10:56 ifcfg-em1

使用-S根据文件大小排序

1
2
3
4
5
6
7
$ ls -lS /etc/sysconfig/network-scripts/
total 264
...
-rw-r--r--. 1 root root 341 Nov 30 10:56 ifcfg-em1
-rw-r--r--. 1 root root 294 May 13 2016 ifcfg-em2
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em3
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em4

Linux的 ls 命令

如果linux命令来个排名,ls命令应该是最常用的命令,除非你像黄蓉的母亲,有过目不忘的本领,惹得黄药师抱憾终身。

ls命令是list的缩写,通过ls命令,我们可以查看目录的内容,确定各种重要文件和目录的属性。

命令格式

1
ls [参数] [路径]

不加任何参数

如果不加任何参数,默认列出当前目录的内容。

1
2
3
4
5
6
➜  ~ ls /etc/sysconfig/network-scripts
ifcfg-em1
ifcfg-em2
ifcfg-em3
ifcfg-em4
....

使用-l显示更多细节

-l 就是使用long listing format长格式,来显示更多的内容信息。

1
2
3
4
5
6
7
➜  ~ ls -l /etc/sysconfig/network-scripts
total 264
-rw-r--r--. 1 root root 341 Nov 30 10:56 ifcfg-em1
-rw-r--r--. 1 root root 294 May 13 2016 ifcfg-em2
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em3
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em4
......

使用-t按照时间排序

如果希望看到最近创建的文件,就需要用到-t参数了。

1
2
3
4
5
6
7
➜  ~ ls -lt /etc/sysconfig/network-scripts/
total 264
-rw-r--r--. 1 root root 341 Nov 30 10:56 ifcfg-em1
-rw-r--r--. 1 root root 294 May 13 2016 ifcfg-em2
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em4
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em3
...

使用-r按照时间逆序

如果希望删除很早以前的文件,看到最早创建的文件,就需要用到-r参数了。

1
2
3
4
5
6
7
➜  ~ ls -ltr /etc/sysconfig/network-scripts/
total 264
...
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em3
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em4
-rw-r--r--. 1 root root 294 May 13 2016 ifcfg-em2
-rw-r--r--. 1 root root 341 Nov 30 10:56 ifcfg-em1

使用-S根据文件大小排序

1
2
3
4
5
6
7
➜  ~ ls -lS /etc/sysconfig/network-scripts/
total 264
...
-rw-r--r--. 1 root root 341 Nov 30 10:56 ifcfg-em1
-rw-r--r--. 1 root root 294 May 13 2016 ifcfg-em2
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em3
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em4

ncurses是字符终端下屏幕控制的基本库,在编译grub时出现如下错误:

1
2
3
/usr/bin/ld:can not find -lncurses

collect2: ld returned 1 exit status

首先安装ncurses。

Fedora/CentOS/RedHat

1
$ yum install ncurses-devel ncurses-static

Ubuntu:

1
$ apt-get install libncurses5-dev

Linux学习之道
http://www.linuxdiyf.com 看的。

做为中国人的特殊情况,学习linux对中国人来说要做的事情相对多了一些:

  1. 以linux为荣耀,以帮助他人了解和学习linux为己任。
  2. 坚持访问英文网站,尤其是一些大师的个人主页。坚持阅读英文文档,并尽量翻译你读过的文档发表到国内的社区上供他人阅读和整理
  3. 了解unix的历史,linux的历史和hacker的历史及文化
  4. 尽可能联系所以可以联系到Linux的爱好者,尽可能多的了解你能接触到的最了解linux的人对linux的看法。并于自己的观点相比较。
  5. 空闲时思索为什么自己喜欢linux,别人为什么喜欢linux。为什么你们喜欢的理由不同?
  6. 阅读各类的开源许可协议和商业的用户许可协议。对比他们各有哪些问题和优势。

以上使你了解开源文化,是作为一个合格的linux社区成员的前提。

  1. 安装一个linux的发行版本。
  2. 尽你最大的能力把你的学习、娱乐或者工作的环境转移到linux上来。尽量避免寻找linux功能类似的软件,而是寻找linux下解决同样问题的通用的方法。并且对比同windows下的解决方法哪种更加优越。
  3. 学会SHELL编程。SHELL几乎可以作为一个入门语言来学习。最低的要求是能够看懂你自己的版本的linux的配置脚本。理解为什么一些帖子中里提到的配置方法回起作用,并了解你的发行版本怎样从每个配置文件中把设置用环境变量的形式读取并让他生效的。
  4. 学会安装以各种方式发行的程序,并且让他们的安装同你系统的惯例一致。熟悉X windows的运作方式。熟悉你的发行版本的安全机制,并且学会定制他们按你的需求工作。

如果仅仅是作为用户并且部分体会unix的哲学,上面的几点就足够了。个人认为这几点足够成长为一个合格的Linux用户了。甚至只要再稍稍的扩充就可以制作自己的发行版本了!而对于不同的用户群体,比如办公用户或者科研人员等。第8条意味着不同的标准。

  1. 选择一门或几门语言社区常用的编程语言
  2. 搜集社区或者hackers推荐的图书或资料、网站、新闻组等。
  3. 选择一个较小的用你当前学习的语言开发的开源项目。阅读他的代码,并且对比他的代码和你形象的编写方式是否相同?哪种更加优越?
  4. 尝试按照TODO中的要求为这个软件编写代码,并且同他的作者联系。学习autoconf和automake等工具的用法。
  5. 你也可以不参与项目的开发,但仍然能从代码阅读中获益。如果项目是一种你没有接触到的技术或者标准的实现,那么搜集资料读懂它!
  6. 学会使用linux下的调试工具,如果软件还不太稳定,可以帮助找出BUG并且改正。并且学会制作patch发给作者。
  7. 如果曾是windows的程序员,尝试把开发环境转移到linux上来。或者开始在windows的开发工作中使用开源的开发工具和SDK。
  8. 如果是系统管理员,还要学会在linux部署更强的各类的安全方案。但这已经不属于学习linux的范畴了。

上面介绍了几条学习的要求,主要强调的是学习的态度。至于具体什么样的技术和自己应该在技术层次上的要求,按照上面介绍的方法应该会慢慢的体会到。

关于开发/编程工具

Refer from : http://www.zhihu.com/question/20302904

我认为开发编程工具分三类,需区别对待:

  1. 可以使用一辈子的工具,学习路径几乎没有尽头,值得在职业初期就好好考虑,仔细斟酌进行选择,并在整个生涯中不断努力力求学到更多,你的工作效率会因为这种努力不断提高。如:
  • 编辑器: vim / emacs
  • 基本操作系统环境:如shell
  • 基本编程语言: c / lisp
  1. 任何时候都需要掌握的工具,这类工具总是每隔一个周期就有新的产品出现,取代掉旧有的产品,但相对来说是值得学习的,能保持一个较长的时代的有效期,如:
  • 版本控制系统:git
  • 社交网络: stack overflow/github
  • 写作工具: markdown / latex / html
  • 通用编程语言: python / ruby / javascript
  1. 特定领域需要的工具,此类工具往往时效性较短,不断被新产品取代,一旦掌握,能在特定领域获得非常高的效率,但缺点是很快会过期,通常是几年之内
  • 各类编程框架: xcode / rails / backbone
  • 各类测试框架:xunit / rspec
  • 用户行为分析工具: ga
  • 各类设计工具: balsamiq
  • 各类项目管理,代码集成工具: github / trac / basecamp

Fedora17初始配置

系统基本配置

刚刚安装完毕的系统无法在命令直接添加 sudo 执行。可以使用 su 或 su –c ‘cmd’ 来执行需要管理员权限的命令。

启用 sudo

在终端下输入vi /etc/sudoers 或visudo命令:
搜索文件,找到下面而2行内容:

1
2
## Allow root to run any commands anywhere
root ALL=(ALL) ALL

然后,在第二行下面添加如下内容

‘username’ ALL=(ALL) ALL

提示:将换成你的用户名即可。

检查、安装系统更新

检查系统更新:

1
$ sudo yum check-update

安装系统更新:

1
$ sudo yum update

安装快速打开终端

1
$ sudo yum nautilus-open-terminal

设置中文输入法

安装Fcitx 小企鹅输入法

1
$ sudo yum install fcitx ibus-sunpinyin

在应用里面查找“Input Method selector”(输入法切换器),打开后选择“Show
all”(显示所有输入法),选择“Chinese”,添加“Pinyin输入法”即可。

GNOME 3.2 配置

安装Gnome-tweak-tool

1
$ sudo yum install gnome-tweak-tool    —对于不是很习惯Gnome3的可以事先缓解一下

GNOME Shell Extension

扩展列表:

1
$ sudo yum install gnome-shell-extension-alternate-tab.noarch gnome-shell-extension-apps-menu.noarch gnome-shell-extension-auto-move-windows.noarch gnome-shell-extension-common.noarch gnome-shell-extension-cpu-temperature.noarch gnome-shell-extension-dock.noarch gnome-shell-extension-drive-menu.noarch gnome-shell-extension-gpaste.noarch gnome-shell-extension-icon-manager.noarch gnome-shell-extension-mediaplayers.noarch gnome-shell-extension-noim.noarch gnome-shell-extension-noripple.noarch gnome-shell-extension-pidgin.i686 gnome-shell-extension-places-menu.noarch gnome-shell-extension-pomodoro.noarch gnome-shell-extension-presentation-mode.noarch gnome-shell-extension-remove-volume-icon.noarch gnome-shell-extension-righthotcorner.noarch gnome-shell-extension-systemMonitor.noarch gnome-shell-extension-theme-selector.noarch gnome-shell-extension-user-theme.noarch gnome-shell-extension-windowsNavigator.noarch gnome-shell-extension-workspace-indicator.noarch gnome-shell-extension-workspacesmenu.noarch gnome-shell-extension-xrandr-indicator.noarch gnome-shell-theme-atolm.noarch gnome-shell-theme-dark-glass.noarch gnome-shell-theme-gaia.noarch gnome-shell-theme-orta.noarch gnome-shell-theme-smooth-inset.noarch

扩展安装完毕后,需重启GNOME Shell(按住Alt+F2,输入 r) 。打开gnome-tweak-tool,激活安装的扩展即可。

安装编译开发环境

1
$ yum install curl-devel gcc glibc-devel gcc-gfortran gcc-c++ python perl erlang vim gedit tcl tk

安装X11图形库

1
$ sudo yum install libX11-devel

安装auto libtools

autoconf automake libtool flex pkgconfig

安装分布式文件管理工具git

1
$ yum install git-core

集成工具与常用软件

优秀集成工具推荐:

Ailurus小熊猫

1
yum install ailurus:著名的系统设置、软件工具

Autoplus

简介:可用Autoplus进行安装/卸载 Adobe Flash, codecs, Google Earth,Skype, Sun Java, VirtualBox, WinFF, Imagination, Cinelerra, Hugin Panorama Creator, Lightscribe, Dropbox等操作。

1
su -c ‘yum -y -–nogpgcheck install http://dnmouse.org/autoplus-1.4-5.noarch.rpm’

如果有必要,可导入签名(可选项):

1
2
3
4
5
6
su -c ‘rpm –import http://dnmouse.org/RPM-GPG-KEY-dnmouse’
Fedora Utils

应用安装与系统设置脚本,可安装Adobe Flash, codecs, Sun Java, Adobe Air,Wine, Google Earth, GTalk plugin, MS Truetype Fonts 等其他常用应用。
```bash
su -c “curl http://master.dl.sourceforge.net/project/fedorautils/fedorautils.repo -o /etc/yum.repos.d/fedorautils.repo && yum install fedorautils”

常用应用

邮件

1
$ sudo yum install thunderbird

文件分享

Transmission(BT客户端)

1
$ sudo yum install transmission

Filezilla(FTP客户端):

1
$ sudo yum install filezilla

即时通讯IM

Pidgin(同Empathy):

1
$ sudo yum install pidgin

Emesene(MSN客户端):

1
$ sudo yum install emesene

Gwibber(微博客户端):

1
$ sudo yum install gwibber

Pino(Twitter 客户端):
$ sudo yum install pino

1
2
3
Hotot(傲兔,Twitter客户端)
```bash
yum install hotot

图形图像

shutter(截图、截屏):

1
$ sudo yum install shutter

Gimp:

1
$ sudo yum install gimp

Dia(流程图):

1
$ sudo yum install dia

Inkscape(矢量做图):

1
$ sudo yum install inkscape

Gthumb(图像浏览器):

1
$ sudo yum install gthumb

Pinta(小Gimp):

1
$ sudo yum install pinta

播放器

vlc:

1
$ sudo yum install vlc

Banshee(音乐播放器):

1
$ sudo yum install banshee

音视频编辑

Pitivi(视频编辑):

1
$ sudo yum install pitivi

Audacity(音频编辑):

1
$ sudo yum install audacity

系统类工具

Gnome Do(快速文件搜索):

1
$ sudo yum install gnome-do

p7zip (解压缩工具):

1
$ sudo yum install p7zip

Terminator(优秀命令终端):

1
$ sudo yum install terminator

办公

Stardict(星际词典):

1
$ sudo yum install stardict

Chmsee(CHM文件阅读器):
$ sudo yum install chmsee

1
2
3
LibreOffice(Office套件):
```bash
$ sudo yum install libreoffice

IDE

Anjuta:

1
$ sudo yum install anjuta

Code::Blocks:

1
$ sudo yum install codeblocks

Eclipse:

1
$ sudo yum install eclipse-platform

版本控制

1
$ sudo yum install svn git bzr cvs

yum

查看更新的软件

1
$ yum list upgrades