通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解。
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
其中一些命令需要安装sysstat包,有一些由procps包提供。这些命令的输出,有助于快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,也就是所谓的USE方法。
下面我们来逐一介绍下这些命令,有关这些命令更多的参数和说明,请参照命令的手册。
uptime
$ uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02
这个命令可以快速查看机器的负载情况。在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程(进程状态为D)的数量。这些数据可以让我们对系统资源使用有一个宏观的了解。
命令的输出分别表示1分钟、5分钟、15分钟的平均负载情况。通过这三个数据,可以了解服务器负载是在趋于紧张还是区域缓解。如果1分钟平均负载很高,而15分钟平均负载很低,说明服务器正在命令高负载情况,需要进一步排查CPU资源都消耗在了哪里。反之,如果15分钟平均负载很高,1分钟平均负载较低,则有可能是CPU资源紧张时刻已经过去。
上面例子中的输出,可以看见最近1分钟的平均负载非常高,且远高于最近15分钟负载,因此我们需要继续排查当前系统中有什么进程消耗了大量的资源。可以通过下文将会介绍的vmstat、mpstat等命令进一步排查。
dmesg | tail
$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.
该命令会输出系统日志的最后10行。示例中的输出,可以看见一次内核的oom kill和一次TCP丢包。这些日志可以帮助排查性能问题。千万不要忘了这一步。
vmstat 1
$ vmstat 1
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0
32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0
32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0
^C
vmstat(8) 命令,每行会输出一些系统核心指标,这些指标可以让我们更详细的了解系统状态。后面跟的参数1,表示每秒输出一次统计信息,表头提示了每一列的含义,这几介绍一些和性能调优相关的列:
r:等待在CPU资源的进程数。这个数据比平均负载更加能够体现CPU负载情况,数据中不包含等待IO的进程。如果这个数值大于机器CPU核数,那么机器的CPU资源已经饱和。
free:系统可用内存数(以千字节为单位),如果剩余内存不足,也会导致系统性能问题。下文介绍到的free命令,可以更详细的了解系统内存的使用情况。
si, so:交换区写入和读取的数量。如果这个数据不为0,说明系统已经在使用交换区(swap),机器物理内存已经不足。
us, sy, id, wa, st:这些都代表了CPU时间的消耗,它们分别表示用户时间(user)、系统(内核)时间(sys)、空闲时间(idle)、IO等待时间(wait)和被偷走的时间(stolen,一般被其他虚拟机消耗)。
上述这些CPU时间,可以让我们很快了解CPU是否出于繁忙状态。一般情况下,如果用户时间和系统时间相加非常大,CPU出于忙于执行指令。如果IO等待时间很长,那么系统的瓶颈可能在磁盘IO。
示例命令的输出可以看见,大量CPU时间消耗在用户态,也就是用户应用程序消耗了CPU时间。这不一定是性能问题,需要结合r队列,一起分析。
mpstat -P ALL 1
$ mpstat -P ALL 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:38:49 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
07:38:50 PM all 98.47 0.00 0.75 0.00 0.00 0.00 0.00 0.00 0.00 0.78
07:38:50 PM 0 96.04 0.00 2.97 0.00 0.00 0.00 0.00 0.00 0.00 0.99
07:38:50 PM 1 97.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00
07:38:50 PM 2 98.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00
07:38:50 PM 3 96.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.03
[...]
该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一个单线程应用程序引起的。
pidstat 1
$ pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:41:02 PM UID PID %usr %system %guest %CPU CPU Command
07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/0
07:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave
07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java
07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java
07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java
07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat
07:41:03 PM UID PID %usr %system %guest %CPU CPU Command
07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave
07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java
07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java
07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass
07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat
^C
pidstat命令输出进程的CPU占用率,该命令会持续输出,并且不会覆盖之前的数据,可以方便观察系统动态。如上的输出,可以看见两个JAVA进程占用了将近1600%的CPU时间,既消耗了大约16个CPU核心的运算资源。
iostat -xz 1
$ iostat -xz 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
73.96 0.00 3.73 0.03 0.06 22.21
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00 0.23 0.21 0.18 4.52 2.08 34.37 0.00 9.98 13.80 5.42 2.44 0.09
xvdb 0.01 0.00 1.02 8.94 127.97 598.53 145.79 0.00 0.43 1.78 0.28 0.25 0.25
xvdc 0.01 0.00 1.02 8.86 127.79 595.94 146.50 0.00 0.45 1.82 0.30 0.27 0.26
dm-0 0.00 0.00 0.69 2.32 10.47 31.69 28.01 0.01 3.23 0.71 3.98 0.13 0.04
dm-1 0.00 0.00 0.00 0.94 0.01 3.78 8.00 0.33 345.84 0.04 346.81 0.01 0.00
dm-2 0.00 0.00 0.09 0.07 1.35 0.36 22.50 0.00 2.55 0.23 5.62 1.78 0.03
[...]
^C
iostat命令主要用于查看机器磁盘IO情况。该命令输出的列,主要含义是:
r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节)。读写量过大,可能会引起性能问题。
await:IO操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬件设备遇到了瓶颈或者出现故障。
avgqu-sz:向设备发出的请求平均数量。如果这个数值大于1,可能是硬件设备已经饱和(部分前端硬件设备支持并行写入)。
%util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能(可以参照IO操作平均等待时间)。如果到达100%,说明硬件设备已经饱和。
如果显示的是逻辑设备的数据,那么设备利用率不代表后端实际的硬件设备已经饱和。值得注意的是,即使IO性能不理想,也不一定意味这应用程序性能会不好,可以利用诸如预读取、写缓存等策略提升应用性能。
free –m
$ free -m
total used free shared buffers cached
Mem: 245998 24545 221453 83 59 541
-/+ buffers/cache: 23944 222053
Swap: 0 0 0
free命令可以查看系统内存的使用情况,-m参数表示按照兆字节展示。最后两列分别表示用于IO缓存的内存数,和用于文件系统页缓存的内存数。需要注意的是,第二行-/+ buffers/cache,看上去缓存占用了大量内存空间。这是Linux系统的内存使用策略,尽可能的利用内存,如果应用程序需要内存,这部分内存会立即被回收并分配给应用程序。因此,这部分内存一般也被当成是可用内存。
如果可用内存非常少,系统可能会动用交换区(如果配置了的话),这样会增加IO开销(可以在iostat命令中提现),降低系统性能。
sar -n DEV 1
$ sar -n DEV 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:16:48 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:49 AM eth0 18763.00 5032.00 20686.42 478.30 0.00 0.00 0.00 0.00
12:16:49 AM lo 14.00 14.00 1.36 1.36 0.00 0.00 0.00 0.00
12:16:49 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:16:49 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:50 AM eth0 19763.00 5101.00 21999.10 482.56 0.00 0.00 0.00 0.00
12:16:50 AM lo 20.00 20.00 3.25 3.25 0.00 0.00 0.00 0.00
12:16:50 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
^C
sar命令在这里可以查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量,判断网络设备是否已经饱和。如示例输出中,eth0网卡设备,吞吐率大概在22 Mbytes/s,既176 Mbits/sec,没有达到1Gbit/sec的硬件上限。
sar -n TCP,ETCP 1
$ sar -n TCP,ETCP 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:17:19 AM active/s passive/s iseg/s oseg/s
12:17:20 AM 1.00 0.00 10233.00 18846.00
12:17:19 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:20 AM 0.00 0.00 0.00 0.00 0.00
12:17:20 AM active/s passive/s iseg/s oseg/s
12:17:21 AM 1.00 0.00 8359.00 6039.00
12:17:20 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:21 AM 0.00 0.00 0.00 0.00 0.00
^C
sar命令在这里用于查看TCP连接状态,其中包括:
active/s:每秒本地发起的TCP连接数,既通过connect调用创建的TCP连接;
passive/s:每秒远程发起的TCP连接数,即通过accept调用创建的TCP连接;
retrans/s:每秒TCP重传数量;
TCP连接数可以用来判断性能问题是否由于建立了过多的连接,进一步可以判断是主动发起的连接,还是被动接受的连接。TCP重传可能是因为网络环境恶劣,或者服务器压力过大导致丢包。
top
$ top
top - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92
Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie
%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 25190241+total, 24921688 used, 22698073+free, 60448 buffers
KiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java
4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave
66128 titancl+ 20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top
5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java
4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java
1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:0
8 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched
top命令包含了前面好几个命令的检查的内容。比如系统负载情况(uptime)、系统内存使用情况(free)、系统CPU使用情况(vmstat)等。因此通过这个命令,可以相对全面的查看系统负载的来源。同时,top命令支持排序,可以按照不同的列排序,方便查找出诸如内存占用最多的进程、CPU占用率最高的进程等。
但是,top命令相对于前面一些命令,输出是一个瞬间值,如果不持续盯着,可能会错过一些线索。这时可能需要暂停top命令刷新,来记录和比对数据。
总结
排查Linux服务器性能问题还有很多工具,上面介绍的一些命令,可以帮助我们快速的定位问题。例如前面的示例输出,多个证据证明有JAVA进程占用了大量CPU资源,之后的性能调优就可以针对应用程序进行。
2. 树莓派(Linux 系统)触摸屏翻转显示以及触摸翻转
树莓派(Linux 系统)触摸屏翻转显示以及触摸翻转
问题:未使用的Pi官方屏幕,所以使用HDMI屏幕显示的时候,显示旋转的同时,触摸没有旋转
目的:旋转屏幕显示的同时,使得触摸也跟随旋转
操作总流程:
旋转90度操作
翻转显示:
1.sudo nano /boot/config.txt
2.在文件末尾加入
display_rotate=0
display_rotate=1 //90°
display_rotate=2 //180°
display_rotate=3 //270°
ctrl + o 保存文档 重启即可。
注:以下操作皆为SSH操作,所以每条指令前都加了DISPLAY=:0,如果本机操作删掉即可。
1.安装xinput
sudo apt-get install xinput
2.列出所有输入设备信息 远程操作时,使用xinput指令需要加入DISPLAY=:0
DISPLAY=:0 xinput --list
3.列出目标设备属性
DISPLAY=:0 xinput --list-props 7
4.旋转触摸的坐标轴
1)所以先交换x、y轴
DISPLAY=:0 xinput --set-prop '7' 'Evdev Axes Swap' 1
2)然后反转y轴
DISPLAY=:0 xinput --set-prop '7' 'Evdev Axis Inversion' 0 1
显示旋转修改之后需要重启。而触摸旋转不需要重启。
详细操作方法:
1.安装xinput
sudo apt-get install xinput
描述:
xinput - utility to configure and test X input devices
xinput-用于配置和测试X输入设备的实用程序
xinput is a utility to list available input devices,
xinput是一个实用程序,可以列出可用的输入设备、
query information about a device and change input device settings.
关于设备的查询信息和更改输入设备设置
2.列出所有输入设备信息
xinput --list
如果远程操作记得在命令前加DISPLAY=:0
得到以下信息:
pi@NTGAGE:~ $ DISPLAY=:0 xinput --list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Optical Mouse id=6 [slave pointer (2)]
⎜ ↳ WaveShare WaveShare Touchscreen id=7 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Logitech USB Keyboard id=8 [slave keyboard (3)]
↳ Logitech USB Keyboard id=9 [slave keyboard (3)]
3.列出目标设备属性
由于所使用的触摸屏幕是微雪7寸屏幕,由以上信息可以得到微雪的触摸屏对应的ID为7
所以,接下来看这款输入设备的属性,
pi@NTGAGE:~ $ DISPLAY=:0 xinput --list-props 7
Device 'WaveShare WaveShare Touchscreen':
Device Enabled (115): 1
Coordinate Transformation Matrix (116): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (240): 0
Device Accel Constant Deceleration (241): 1.000000
Device Accel Adaptive Deceleration (242): 1.000000
Device Accel Velocity Scaling (243): 10.000000
Device Proct ID (244): 3823, 5
Device Node (245): "/dev/input/event3"
Evdev Axis Inversion (246): 0, 0
Evdev Axis Calibration (247): <no items>
Evdev Axes Swap (248): 0
Axis Labels (249): "Abs MT Position X" (267), "Abs MT Position Y" (268), "Abs MT Pressure" (269), "None" (0), "None" (0), "None" (0)
Button Labels (250): "Button Unknown" (233), "Button Unknown" (233), "Button Unknown" (233), "Button Wheel Up" (121), "Button Wheel Down" (122)
Evdev Scrolling Distance (251): 0, 0, 0
Evdev Middle Button Emulation (252): 0
Evdev Middle Button Timeout (253): 50
Evdev Third Button Emulation (254): 0
Evdev Third Button Emulation Timeout (255): 1000
Evdev Third Button Emulation Button (256): 3
Evdev Third Button Emulation Threshold (257): 20
Evdev Wheel Emulation (258): 0
Evdev Wheel Emulation Axes (259): 0, 0, 4, 5
Evdev Wheel Emulation Inertia (260): 10
Evdev Wheel Emulation Timeout (261): 200
Evdev Wheel Emulation Button (262): 4
Evdev Drag Lock Buttons (263): 0
这块屏幕正常显示和触摸的信息如上。
如果执行到这一步,发现并没有以上的Evdev等属性项,请跳转第2种方法。
现在需要达到的目的是在屏幕显示反转的同时,使得触摸也随显示翻转。
屏幕显示为翻转90度。/boot/config.txt设置为display_rotate=1
上述信息中Evdev Axis Inversion 项是每条轴的旋转设置项,后面第一个参数是x,第二个参数是y.
Evdev Axes Swap项对应的是两条轴的交换。
0为不翻转,1为翻转
例如。x轴原本是朝向右的,当把Evdev Axis Inversion的第一个参数
设置为1,即x轴朝向左。
4.旋转触摸的坐标轴
现在目的是要触摸旋转90度,从坐标轴理解:
即目的x轴正向为初始y轴的反向。目的y轴的正方向为初始x轴的正向。
1)所以先交换x、y轴
DISPLAY=:0 xinput --set-prop '7' 'Evdev Axes Swap' 1
2)然后反转y轴
DISPLAY=:0 xinput --set-prop '7' 'Evdev Axis Inversion' 0 1
这样即可完成触摸旋转90度。若要旋转其他角度,推理一下即可。
显示旋转修改之后需要重启。而触摸旋转不需要重启。
第二种方法
如果查询到的信息如下
DISPLAY=:0 xinput --list-props 6
Device 'WaveShare WaveShare Touchscreen':
Device Enabled (114): 1
Coordinate Transformation Matrix (115): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Calibration Matrix (246): 0.000000, 1.000000, 0.000000, -1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000
libinput Calibration Matrix Default (247): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Send Events Modes Available (248): 1, 0
libinput Send Events Mode Enabled (249): 0, 0
libinput Send Events Mode Enabled Default (250): 0, 0
Device Node (251): "/dev/input/event0"
Device Proct ID (252): 3823, 5
可以看到该驱动方式采用的是libinput,
查看/usr/share/X11/xorg.conf.d/目录下是否有40-libinput.conf这个文件。
无 则需要安装
sudo apt-get install xserver-xorg-input-libinput
下一步安装完成后ls一下,就可以看到在/usr/share/X11/xorg.conf.d/目录下存在该文件,
下一步复制该文件到/etc/X11/xorg.conf.d/目录下。
一开始xorg.conf.d这个目录在/etc/X11可能没有,需要自己创建。
sudo mkdir xorg.conf.d
下一步复制到xorg.conf.d 目录下即可。
sudo cp /usr/share/X11/xorg.conf.d/40-libinput.conf /etc/X11/xorg.conf.d/
下一步进入/etc/X11/xorg.conf.d/目录下修改40-libinput.conf 文件
cd /etc/X11/xorg.conf.d/
sudo nano 40-libinput.conf
找到touchscreen section
Section "InputClass"
Identifier "libinput touchscreen catchall"
MatchIsTouchscreen "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
EndSection
添加一行 Option "CalibrationMatrix" "0 1 0 -1 0 1 0 0 1
结果为
Section "InputClass"
Identifier "libinput touchscreen catchall"
Option "CalibrationMatrix" "0 1 0 -1 0 1 0 0 1
MatchIsTouchscreen "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
EndSection
然后重启生效
这样的修改也是同样修改为翻转90度,如果需要修改为其他角度,请参考libinput的算法
https://wayland.freedesktop.org/libinput/doc/latest/absolute_axes.html
3. Linux都有哪些版本 那只企鹅是什么版本 最好能给安装教程
Linux的发行版本很多,如果你以前没接触过,可以先装一个Unbuntu试试,到Unbuntu网站上下载一个ISO镜像,然后刻盘,或者向他们要一张光盘,他们负责邮寄的。Unbuntu中文地址:http://www.ubuntu.com.cn/
或者装一个红旗也行,是咱们中国做的发行版,中文处理方面相对要好一些,目前是6.0,也是下载一张系统盘就行了。红旗官网:http://www.redflag-linux.com/xiazai/index.php
至于具体的安装,在这里搜一下会找到很多,大概说一下:主要是在硬盘上留一块空白空间,6、7G以上,用光盘启动按步骤操作就行了。难点是Linux的分区,在安装之前可以再查一下,做到心中有数。VirtualBox下载地址:http://www.virtualbox.org/wiki/Downloads
另外你也可以下载一个虚拟机软件,在虚拟机上安装Linux,这样成功的把握大一些。推荐使用VirtualBox。
企鹅是Linux的标志,来历看这里:
企鹅是Linux的象征,linux的标志为什么是企鹅?
企鹅是南极洲的标志性动物,根据国际公约,南极洲为全人类共同所有,不属于当今世界上的任何国家,当今任何国家无权将南极洲纳入其版图。Linux选择企鹅图案作标志 ,其含意也是表明:开源的Linux,为全人类共同所有,任何公司无权将其私有。
在1996年, Linux操作系统开始被广泛应用, Linus开始考虑给这个操作系统创作一个logo. 他想起曾经在澳大利亚被一种鸟咬过,咬他的不是别鸟,就是企鹅.选 定了企鹅做为logo之后,linus当时的要求是:"不要太胖, 而且应该是坐着的姿态 ?想象一下装满豆子的袋子." 设计师Ewing使用GIMP创建了企鹅的基本形态, 允许用户自由添加修改这只企鹅的造型, 也衍生了现在诸多企鹅造型.
至于企鹅的名字: Tux. 因为企鹅总是黑白一身,当时外界认为这个名字来自燕尾服(Txuedo)一词.事实上Tux是“Torvalds' UniX”的缩写.现在, 企鹅Tux已经是Linux的标志,或者可以说品牌. 笑容可掬的Tux吸引了世界众多爱好自由的电脑爱好者.
4. Linux服务器搭建实战详解的目录
第1章 Linux系统概述 1
1.1 Linux的发展 1
1.2 Linux常见版本 2
1.2.1 Red Hat Linux 2
1.2.2 Debian Linux 2
1.2.3 Ubuntu Linux 3
1.3 Linux操作系统 3
1.3.1 Linux操作系统结构 3
1.3.2 Linux操作系统特点 5
1.3.3 Linux操作系统的应用领域 6
1.3.4 Red Hat Enterprise Linux 5 7
1.4 Red Hat Enterprise Linux 5的两个版本 8
1.5 安装和管理Red Hat Enterprise Linux 8
1.5.1 安装前的准备 8
1.5.2 与其他操作系统并存的问题 10
1.5.3 Red Hat Enterprise Linux的安装阶段 11
1.6 Linux操作系统的引导与登录 19
1.6.1 多系统引导管理器——GRUB及LILO 19
1.6.2 Linux的启动过程 20
1.6.3 Linux的关闭与重新引导 20
1.6.4 Linux系统的登录和退出 20
1.7 GNOME和KDE桌面管理器 22
1.7.1 GNOME桌面环境 23
1.7.2 KDE桌面环境 31
1.7.3 定制自己的桌面 42
第2章 FTP服务器 45
2.1 FTP服务简介 45
2.1.1 FTP工作原理 45
2.1.2 匿名用户访问的产生 46
2.1.3 FTP服务的连接模式 46
2.1.4 几种流行的FTP服务器软件 48
2.2 安装vsFTPd服务 49
2.2.1 安装vsFTPd软件 49
2.2.2 FTP服务的启动与关闭 50
2.3 vsFTPd的相关配置 52
2.3.1 配置匿名用户登录环境 53
2.3.2 监听地址与控制端口 53
2.3.3 FTP模式与数据端口 54
2.3.4 ASCII模式 55
2.3.5 超时选项 55
2.3.6 负载控制 55
2.3.7 用户设置 56
2.3.8 用户登录控制 57
2.3.9 目录访问控制 57
2.3.10 文件操作控制 58
2.3.11 新增文件权限设置 58
2.3.12 日志设置 58
2.4 安装与配置PureFTPD服务器的 59
2.4.1 安装Apache服务 59
2.4.2 安装MySQL数据库 61
2.4.3 安装PureFTPD 62
2.4.4 生成PureFTPD服务管理脚本 64
2.4.5 配置匿名用户登录环境 64
2.4.6 安装Zend Optimizer 65
2.4.7 WebPureFTP的安装与配置 66
2.4.8 生成MySQL数据库 67
2.4.9 生成pure-ftpd数据库配置文件 68
2.4.10 使用webpureftp管理虚拟用户 68
2.5 FTP服务器的访问 69
2.5.1 Linux环境下访问FTP服务器 69
2.5.2 Windows环境下访问FTP服务器 70
第3章 电子邮件服务器 71
3.1 电子邮件服务概述 71
3.1.1 电子邮件服务简介 71
3.1.2 邮件专有名词解释 72
3.1.3 POP3与SMTP协议 73
3.2 Postfix邮件服务器 74
3.2.1 安装Postfix邮件服务器 74
3.2.2 Postfix配置文件 76
3.2.3 Postfix基本配置 77
3.2.4 虚拟别名域 80
3.2.5 用户别名 80
3.2.6 SMTP认证 81
3.2.7 启动和停止Postfix服务 83
3.2.8 配置与访问电子邮件客户端 84
3.3 POP和IMAP邮件服务 87
3.3.1 dovecot服务 87
3.3.2 CyrusImapd服务 88
3.4 Web支持电子邮件 92
3.4.1 Squirrelmail的安装与配置 92
3.4.2 登录Squirrelmail 94
第4章 Web服务器 95
4.1 Web概述 95
4.1.1 Web服务简介 95
4.1.2 HTTP协议简介 96
4.1.3 Web服务器软件 99
4.2 Apache概述 99
4.2.1 Apache的诞生 100
4.2.2 安装Apache服务 101
4.3 启动与停止Apache服务 103
4.4 Apache服务的基本配置方法 106
4.4.1 httpd.conf配置文件 106
4.4.2 Apache服务主配置文件的构成 107
4.5 Apache服务器控制存取的方式 112
4.5.1 Options选项 113
4.5.2 浏览权限的设置 113
4.6 Apache服务的高级配置 116
4.6.1 虚拟目录简介 116
4.6.2 配置与管理虚拟主机 117
4.6.3 用户认证和授权 119
4.6.4 配置SSI 123
4.6.5 MIME类型简介 124
4.7 创建并配置动态网站 124
4.7.1 创建并配置JSP动态网站 124
4.7.2 创建并配置CGI动态网站 131
第5章 DHCP服务器 133
5.1 DHCP服务概述 133
5.1.1 DHCP服务的实现原理 133
5.1.2 IP地址租约和更新 134
5.1.3 DHCP服务器分配的IP地址类型 135
5.2 安装DHCP服务 137
5.2.1 做好DHCP服务器安装前的准备 137
5.2.2 安装DHCP服务的方法 138
5.2.3 启动及停止DHCP服务 141
5.3 配置DHCP服务 142
5.3.1 DHCP配置文件及格式 142
5.3.2 配置IP作用域 145
5.3.3 配置客户机的IP 选项 146
5.3.4 设置租约期限 147
5.3.5 保留特定的IP地址 147
5.3.6 多网段的IP地址的分配 148
5.3.7 DHCP服务器配置实例 149
5.4 配置DHCP客户机 150
5.4.1 以Linux操作系统作为客户端配置 150
5.4.2 以Windows操作系统作为客户端配置 152
第6章 DNS服务器 155
6.1 DNS服务概述 155
6.1.1 DNS服务简介 155
6.1.2 DNS提供的服务 156
6.1.3 DNS查询原理和规划 156
6.1.4 DNS域名解析 158
6.2 DNS服务的安装 158
6.2.1 安装DNS服务 159
6.2.2 安装Chroot软件包 159
6.2.3 DNS服务的启动与停止 160
6.3 配置主要名称服务器 161
6.3.1 主配置文件 161
6.3.2 设置根区域和主区域 162
6.3.3 设置反向解析区域 165
6.3.4 根服务器信息文件 166
6.3.5 区域文件 166
6.3.6 反向解析区域文件 169
6.3.7 功能实现 170
6.3.8 测试DNS服务器 170
6.4 配置辅助DNS服务器 174
6.5 配置缓存Cache-only服务器 175
6.6 DNS客户端的配置 176
6.6.1 在Linux下配置DNS客户端 176
6.6.2 在Windows下配置DNS客户端 177
第7章 代理服务器 179
7.1 代理服务器概述 179
7.1.1 代理服务器的工作流程 179
7.1.2 代理服务器的作用及相关应用 180
7.2 安装Squid Server 181
7.2.1 Squid简介 181
7.2.2 Squid Server的安装 182
7.3 Squid Server的基本配置 184
7.3.1 设置监听的IP和端口 184
7.3.2 设置缓存大小 184
7.3.3 访问控制设置 186
7.3.4 指定Squid可以使用内存的理想值 188
7.3.5 其他参数设置 188
7.3.6 设置错误提示为中文 189
7.3.7 初始化Squid Server 189
7.4 启动与停止代理服务器 192
7.4.1 设置Squid服务随系统的启动而自动启动 193
7.4.2 重新载入配置文件 195
7.5 Squid Server高级配置 195
7.5.1 实现透明代理 195
7.5.2 Squid安全设置 197
7.5.3 Squid外部程序支持选项 199
7.6 Squid日志管理 199
7.6.1 日志选项 199
7.6.2 Squid代理服务器日志系统的构成 199
7.6.3 日志及流量分析软件——Webalizer 200
7.6.4 Webalizer软件的应用 204
7.7 不同环境下的代理客户端的配置 205
7.7.1 Linux系统下Firefox代理设置 205
7.7.2 Windows系统下IE代理配置 207
第8章 Samba服务器 209
8.1 Samba服务概述 209
8.1.1 Samba服务简介 209
8.1.2 Samba服务的安装 209
8.1.3 Samba服务的图形化配置方法 212
8.1.4 启动、停止和重启Samba服务 216
8.2 Samba服务的配置文件 216
8.2.1 Samba服务的主要配置文件 217
8.2.2 Samba服务的密码文件 217
8.2.3 Samba服务的日志文件 218
8.3 smb.conf文件详解 218
8.3.1 smb.conf文件结构 219
8.3.2 smb.conf文件的语法和变量 220
8.3.3 smb.conf文件详解 220
8.3.4 smb.conf文件中的段 223
8.3.5 Samba服务具体参数设置 223
8.4 Samba服务功能实现 225
8.4.1 指定Samba所要加入的工作组 225
8.4.2 注释说明服务器 226
8.4.3 限制可访问服务器IP地址的范围 226
8.4.4 打印机设置 227
8.4.5 设置guest账号匿名登录 228
8.4.6 设置日志文件名、存放路径及大小 228
8.4.7 服务器安全设置 229
8.4.8 具体的共享设置 232
8.5 共享的资源访问 234
8.5.1 不同客户端主机的资源访问 234
8.5.2 本机Windows分区和Linux分区的资源互访 235
第9章 NFS服务器 237
9.1 NFS服务简介 237
9.1.1 使用NFS的优势 237
9.1.2 NFS服务的组件 238
9.2 RPC简介 238
9.3 安装并配置NFS服务 239
9.3.1 安装NFS服务 239
9.3.2 配置NFS服务 240
9.3.3 NFS文件的存取权限 242
9.4 启动与停止NFS服务 243
9.5 在客户端挂载NFS文件系统 244
9.5.1 查看NFS服务器信息 244
9.5.2 加载NFS服务器共享目录 245
9.5.3 自动挂接NFS文件系统 246
第10章 LDAP目录服务 247
10.1 目录服务概述 247
10.1.1 X.500简介 247
10.1.2 初识LDAP 248
10.1.3 X.500与LDAP 251
10.1.4 流行的目录服务产品 252
10.2 深入认识LDAP 254
10.2.1 LDAP的几种基本模型 254
10.2.2 如何规划目录树 256
10.2.3 LDAP的应用领域 257
10.3 安装LDAP 257
10.3.1 安装Berkeley DB 257
10.3.2 安装OpenLDAP 260
10.4 配置OpenLDAP 261
10.4.1 OpenLDAP的基本配置 261
10.4.2 启动OpenLDAP服务器 262
10.5 为OpenLDAP建立初始化数据 263
10.6 LDAP图形界面管理工具简介 264
10.6.1 主要的LDAP图形界面管理工具 264
10.6.2 安装phpLDAPadmin 266
10.7 配置phpLDAPadmin 268
10.7.1 生成phpLDAPadmin主配置文件 268
10.7.2 phpLDAPadmin的基本配置 268
10.8 使用OpenLDAPadmin管理目录树 271
10.8.1 进入phpLDAPadmin 271
10.8.2 创建组织单元 272
10.8.3 创建用户组 274
10.8.4 创建用户账号 276
10.9 实现LDAP服务的身份验证 277
10.9.1 实现Linux系统用户验证 277
10.9.2 实现FTP用户验证 279
10.9.3 实现Web用户验证 280
第11章 SSH服务器 281
11.1 SSH服务概述 281
11.1.1 SSH服务简介 281
11.1.2 公钥加密体系结构 282
11.2 SSH服务的安装 283
11.3 配置SSH服务器 283
11.4 SSH服务的启动和停止 286
11.4.1 启动SSH服务 286
11.4.2 重启SSH服务 287
11.4.3 自动启动SSH服务 287
11.4.4 停止SSH服务 288
11.5 使用SSH客户端 288
11.5.1 SSH客户端在Windows平台下的使用 288
11.5.2 SSH客户端在Linux平台下的使用 289
第12章 MySQL数据库的配置 293
12.1 MySQL概述 293
12.1.1 MySQL简介 293
12.1.2 MySQL的应用领域 294
12.2 安装MySQL 295
12.2.1 安装前的准备 295
12.2.2 MySQL的具体安装过程 295
12.3 启动与停止MySQLD服务 298
12.4 配置及使用MySQL服务 298
12.4.1 修改MySQL管理员的口令 299
12.4.2 MySQL数据库的创建和使用 299
12.4.3 MySQL数据表的创建和使用 300
12.4.4 索引的创建和删除 304
12.4.5 用户的创建和删除 305
12.4.6 用户权限的设置 306
12.5 图形化配置MySQL 309
12.5.1 安装phpMyAdmin 309
12.5.2 配置phpMyAdmin虚拟目录 310
12.5.3 使用phpMyAdmin 311
第13章 使用Webmin配置各种服务 313
13.1 Webmin的概述 313
13.1.1 Webmin简介 313
13.1.2 Webmin特性 313
13.1.3 Webmin主要功能 314
13.2 安装和配置Webmin 317
13.2.1 Perl语言解释器的安装 318
13.2.2 Net-SSLeay perl和OpenSSL的安装 318
13.2.3 安装与访问Webmin 319
13.2.4 设置Webmin为中文界面 321
13.2.5 停止和启动Webmin服务 322
13.3 用Webmin配置服务 323
13.3.1 Samba服务的配置 323
13.3.2 NFS服务的配置 327
13.3.3 DNS服务的配置 328
13.3.4 Web服务的配置 331
13.3.5 网络防火墙与NAT服务配置 336
13.3.6 代理服务配置 342
13.3.7 SSH服务的配置 349
第14章 Linux命令行 351
14.1 Linux Shell概述 351
14.1.1 Linux Shell简介 351
14.1.2 系统默认Shell——Bash Shell 351
14.1.3 设置使用其他Shell 352
14.2 启动Shell 353
14.2.1 终端启动Shell 353
14.2.2 直接启用Shell 354
14.2.3 直接启动命令行窗口 354
14.3 Shell指令详解 355
14.3.1 目录及文件管理指令 355
14.3.2 信息显示指令 360
14.3.3 网络基本配置指令 363
14.3.4 关机和注销指令 366
14.4 配置Shell环境 367
14.4.1 Shell环境变量 367
14.4.2 环境变量设置 369
14.4.3 Shell环境配置文件 370
14.5 使用vim文本编辑器 371
14.5.1 vim编辑器简介 371
14.5.2 常用vim指令 372
14.5.3 vim的定制 376
第15章 Linux操作系统中的 网络连通性测试 377
15.1 网络线路的连通性测试 377
15.1.1 双绞线的线芯 377
15.1.2 测试直通双绞线 378
15.1.3 测试交叉双绞线 378
15.1.4 利用ping命令测试网络连通性 379
15.2 路由跟踪 382
15.2.1 traceroute命令 382
15.2.2 traceroute显示代码 383
15.2.3 traceroute命令选项的应用 384
15.3 Linux图形界面下测试网络 386
15.3.1 进入“Network Tools”窗口 386
15.3.2 网络设备查询 387
15.3.3 网络连通性测试 387
15.3.4 网络信息统计 388
15.3.5 网络路由跟踪 388
15.3.6 网络端口扫描 389
15.3.7 网络查阅 389
15.3.8 查询登录用户的信息 390
15.3.9 域名查询工具 390
第16章 Linux网络管理 391
16.1 静态IP地址管理工具 391
16.1.1 IP地址 391
16.1.2 子网掩码 392
16.1.3 TCP/IP配置文件 392
16.1.4 在图形界面下配置以太网络 392
16.1.5 在命令模式下配置以太网 397
16.2 动态IP地址分配工具 400
16.2.1 获取动态IP地址 400
16.2.2 安装DHCP服务 401
16.2.3 DHCP服务的启动与停止 404
16.2.4 DHCP服务的配置 405
16.3 网络地址表管理工具 407
16.3.1 显示ARP缓存 407
16.3.2 管理ARP缓存 408
第17章 软件基础管理 409
17.1 Kickstart简介 409
17.1.1 安装Kickstart 409
17.1.2 Debian/Ubuntu的自动化安装 419
17.2 Linux操作系统中的软件包管理 420
17.2.1 RPM简介 420
17.2.2 RPM软件包管理系统的应用 423
17.3 Debian的软件包管理系统 434
17.3.1 DPKG简介 434
17.3.2 DPKG软件包管理系统应用 435
第18章 软件包高级管理 441
18.1 APT——高级软件包管理 441
18.1.1 APT概述 441
18.1.2 应用APT软件包管理系统 442
18.2 YUM——智能化的RPM软件包管理 452
18.2.1 YUM概述 452
18.2.2 应用YUM软件包管理系统 453
18.3 Linux内核的升级 462
18.3.1 获取内核源代码 463
18.3.2 配置内核 464
18.3.3 编译内核 467
18.3.4 安装内核 469
第19章 用户和进程管理 471
19.1 用户管理 471
19.1.1 用户账号文件 471
19.1.2 用户群组文件 474
19.1.3 命令行方式的用户管理 476
19.1.4 图形界面方式的用户管理 486
19.1.5 命令行方式的群组管理 486
19.2 进程管理 490
19.2.1 进程及作业 490
19.2.2 进程控制 490
19.2.3 作业控制 494
第20章 管理Linux文件系统及磁盘 497
20.1 管理Linux文件系统 497
20.1.1 Linux文件系统结构 497
20.1.2 常见的文件系统 497
20.1.3 文件类型 498
20.1.4 文件压缩与归档 498
20.1.5 文件链接 503
20.1.6 安装文件系统 505
20.2 磁盘管理 507
20.2.1 硬盘简介 507
20.2.2 管理磁盘分区 509
20.2.3 使用磁盘管理命令 529
20.2.4 磁盘配额管理问题 539
第21章 Linux系统安全 549
21.1 系统安全基础设置 549
21.1.1 BIOS安全 549
21.1.2 账号安全 549
21.2 系统安全高级设置 552
21.2.1 重要文件 552
21.2.2 防止攻击系统 553
21.2.3 开启安全服务 555
21.2.4 审计日志 556
21.2.5 文件和目录许可 558
5. 红旗版本Linux(asianux server 4)安装unixODBC-2.2.12,在make时出现CAbout错误,求解答,谢谢,重赏!
你缺了开发头文件,安装QT的开发包就可以了
望采纳