Linux命令行与Shell脚本编程[学习笔记1]
来源:互联网 发布:php空间搭建goagent 编辑:程序博客网 时间:2024/05/17 23:49
1、什么是Linux
1.1、Linux可划分为以下四部分:
□ Linux内核;
□ GNU工具组件;
□ 图形化桌面环境;
□ 应用软件。
Linux系统的基本结构框图:
1.2深入探究Linux内核
内核主要负责以下四项功能:
□系统内存管理;
□软件程序管理;
□硬件设备管理;
□文件系统管理。
1.2.1、系统内存管理
内核不仅管理服务器上的可用物理内存,还可以创建和管理虚拟内存(即并不实际存在的内存)。
内核通过硬盘上的存储空间来实现虚拟内存,这块区域称为交换空间(swapspace)。内核不断地在交换空间和实际的物理内存之间反复交换虚拟内存存储单元中的内容,使得系统以为拥有比物理内存更过的可用空间。
内存存储单元会被按组分成很多块,这些快称作为页面(page)。内核会将每个内存页面放在物理内存或交换空间。然后,内核会维护一个内存页面表,指明哪些页面位于物理内存内,哪些页面被换到磁盘上。
内核会记录那些内存页面正在使用中,并自动把一段时间未访问的内存页面复制到交换空间区域(称为换出,swappingout)。当程序要访问一个已经被换出的内存页面时,内核必须从物理内存换出另一个内存页面来给它让出空间,然后从交换空间换入(swappingin)请求的内存页面。
查看/proc/meminfo文件可以观察Linux系统上虚拟内存的当前状态:
xiaoyi@ubuntu:~$ cat/proc/meminfo
MemTotal: 1024788 kB
MemFree: 398188 kB
Buffers: 57352 kB
Cached: 374992 kB
SwapCached: 0 kB
Active: 194596 kB
Inactive: 381272 kB
Active(anon): 144220 kB
Inactive(anon): 240 kB
Active(file): 50376 kB
Inactive(file): 381032 kB
Unevictable: 0 kB
Mlocked: 0 kB
HighTotal: 135048 kB
HighFree: 1796 kB
LowTotal: 889740 kB
LowFree: 396392 kB
SwapTotal: 1046524 kB
SwapFree: 1046524 kB
Dirty: 396 kB
Writeback: 0 kB
AnonPages: 143536 kB
Mapped: 74412 kB
Shmem: 940 kB
Slab: 27684 kB
SReclaimable: 15720 kB
SUnreclaim: 11964 kB
KernelStack: 2912 kB
PageTables: 4772 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1558916 kB
Committed_AS: 1341328 kB
VmallocTotal: 122880 kB
VmallocUsed: 8452 kB
VmallocChunk: 110588 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 26616 kB
DirectMap2M: 886784 kB
xiaoyi@ubuntu:~$
默认情况,运行在Linux上的每个进程都有各自的内存页面。进程不能访问其他进程正在使用的内存页面。内核维护者它自己的内存区域,用户进程不能访问内核进程正在使用的内存。
为了方便共享数据,可以创建一些共享内存页面。多个进程可在同一块共用内存区域,进行读取和写入操作。内核负责维护和管理这块共用内存区域,并控制每个进程访问这块共享区域。
ipcs命令用来查看系统上的当前共享内存页面。
xiaoyi@ubuntu:~$ ipcs-m
------ Shared MemorySegments --------
key shmid owner perms bytes nattch status
xiaoyi@ubuntu:~$
1.2.2、软件程序管理
Linux操作系统称运行中的程序为进程。内核控制着Linux系统如何管理运行在系统上的所有进程。
内核创建了第一个进程(称为init进程)来启动系统上所有其他进程。当内核启动时,它会将init进程加载到虚拟内存中。内核在启动任何其他进程时,都会在虚拟内存中给新进程分配一块专有区域来存储该进程用到的数据和代码。
一些Linux发行版使用一个表来管理在系统开机要自动启动的进程。这个表通常位于专门文件/etc/inittab中
另一些系统(比如Ubuntu)则采用/ect/init.d目录,将开机时启动或停止某个应用的脚本放在这个目录下。这些脚本通过/etc/rcX.d目录下的入口启动,这里X代表运行级(run level)。
Linux操作系统的init系统采用了运行级。运行级决定了init集成运行/etc/inittab文件或/etc/rcX.d目录中定义好的某些特定类型的进程。
Linux系统有5个启动运行级。
运行级为1时,只有基本的系统进程会启动,同时会启动唯一一个控制台终端进程。我们称之为单用户模式。单用户模式通常用来在系统有问题时进程紧急的文件系统维护。这种模式下仅一人能登录到系统上操作数据。
标准的启动运行级是3。大多数应用软件都会启动。
另一个Linux中常见的运行级是5。这个运行级上系统会启动图形化的X Window系统,同时允许用户通过图形化桌面窗口登录系统。
使用ps命令查看当前Linux系统上的进程:
xiaoyi@ubuntu:/$ ps ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:01 /sbin/init
2 ? S 0:00 [kthreadd]
3 ? S 0:00 [ksoftirqd/0]
6 ? S 0:00 [migration/0]
7 ? S 0:00 [watchdog/0]
8 ? S< 0:00 [cpuset]
9 ? S< 0:00 [khelper]
10 ? S 0:00 [kdevtmpfs]
11 ? S< 0:00 [netns]
12 ? S 0:00 [sync_supers]
13 ? S 0:00 [bdi-default]
14 ? S< 0:00 [kintegrityd]
15 ? S< 0:00 [kblockd]
16 ? S< 0:00 [ata_sff]
17 ? S 0:00 [khubd]
18 ? S< 0:00 [md]
19 ? R 0:00 [kworker/0:1]
21 ? S 0:00 [khungtaskd]
22 ? S 0:00 [kswapd0]
23 ? SN 0:00 [ksmd]
24 ? SN 0:00 [khugepaged]
25 ? S 0:00 [fsnotify_mark]
26 ? S 0:00 [ecryptfs-kthrea]
27 ? S< 0:00 [crypto]
35 ? S< 0:00 [kthrotld]
37 ? S 0:00 [scsi_eh_0]
38 ? S 0:00 [scsi_eh_1]
39 ? S 0:00 [scsi_eh_2]
40 ? S 0:00 [scsi_eh_3]
41 ? S 0:00 [scsi_eh_4]
42 ? S 0:00 [scsi_eh_5]
43 ? S 0:00 [scsi_eh_6]
44 ? S 0:00 [scsi_eh_7]
45 ? S 0:00 [scsi_eh_8]
46 ? S 0:00 [scsi_eh_9]
47 ? S 0:00 [scsi_eh_10]
48 ? S 0:00 [scsi_eh_11]
49 ? S 0:00 [scsi_eh_12]
50 ? S 0:00 [scsi_eh_13]
51 ? S 0:00 [scsi_eh_14]
52 ? S 0:00 [scsi_eh_15]
53 ? S 0:00 [scsi_eh_16]
54 ? S 0:00 [scsi_eh_17]
55 ? S 0:00 [scsi_eh_18]
56 ? S 0:00 [scsi_eh_19]
57 ? S 0:00 [scsi_eh_20]
58 ? S 0:00 [scsi_eh_21]
59 ? S 0:00 [scsi_eh_22]
60 ? S 0:00 [scsi_eh_23]
61 ? S 0:00 [scsi_eh_24]
62 ? S 0:00 [scsi_eh_25]
63 ? S 0:00 [scsi_eh_26]
64 ? S 0:00 [scsi_eh_27]
65 ? S 0:00 [scsi_eh_28]
66 ? S 0:00 [scsi_eh_29]
67 ? S 0:00 [scsi_eh_30]
70 ? S 0:00 [scsi_eh_31]
97 ? S 0:00 [kworker/u:31]
98 ? S 0:00 [kworker/u:32]
119 ? S< 0:00 [devfreq_wq]
257 ? S< 0:00 [mpt_poll_0]
259 ? S< 0:00 [mpt/0]
353 ? S 0:00 [scsi_eh_32]
368 ? S 0:00 [kworker/0:2]
369 ? S 0:00 [jbd2/sda1-8]
370 ? S< 0:00 [ext4-dio-unwrit]
431 ? S 0:00 [flush-8:0]
438 ? S 0:00 upstart-udev-bridge --daemon
440 ? Ss 0:00 /sbin/udevd --daemon
739 ? S 0:00 /sbin/udevd --daemon
740 ? S 0:00 /sbin/udevd --daemon
808 ? S< 0:00 [kpsmoused]
836 ? Ss 0:00 dbus-daemon --system --fork --activation=upstart
888 ? Ss 0:00 /usr/sbin/modem-manager
905 ? Ss 0:00 /usr/sbin/bluetoothd
923 ? Sl 0:00 rsyslogd -c5
929 ? Ss 0:00 /usr/sbin/cupsd -F
932 ? S< 0:00 [krfcommd]
954 ? S 0:00 upstart-socket-bridge --daemon
977 ? S 0:00 avahi-daemon: running [ubuntu.local]
978 ? S 0:00 avahi-daemon: chroot helper
980 ? Ssl 0:00 NetworkManager
987 ? Sl 0:00 /usr/lib/i386-linux-gnu/colord/colord
990 ? Sl 0:00 /usr/lib/policykit-1/polkitd --no-debug
1015 ? S 0:00 /sbin/dhclient -d -4 -sf /usr/lib/NetworkManager/nm-d
1082 ? Ss 0:00 tpvmlpd2
1119 tty4 Ss+ 0:00 /sbin/getty -8 38400 tty4
1127 tty5 Ss+ 0:00 /sbin/getty -8 38400 tty5
1147 tty2 Ss+ 0:00 /sbin/getty -8 38400 tty2
1149 tty3 Ss+ 0:00 /sbin/getty -8 38400 tty3
1156 tty6 Ss+ 0:00 /sbin/getty -8 38400 tty6
1170 ? Ss 0:00 acpid -c /etc/acpi/events -s /var/run/acpid.socket
1190 ? Ssl 0:00 lightdm
1194 ? Ss 0:00 cron
1195 ? Ss 0:00 atd
1209 tty7 Ss+ 0:19 /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -noliste
1217 ? Ssl 0:00 whoopsie
1261 ? S< 0:00 [ttm_swap]
1399 ? Sl 0:00 /usr/lib/accountsservice/accounts-daemon
1407 ? S 0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --
1430 ? Sl 0:00 /usr/sbin/console-kit-daemon --no-daemon
1510 tty1 Ss+ 0:00 /sbin/getty -8 38400 tty1
1811 ? Sl 0:00 lightdm --session-child 12 19
1899 ? Sl 0:00 /usr/lib/upower/upowerd
1974 ? Ssl 0:00 /usr/sbin/vmware-vmblock-fuse -o subtype=vmware-vmblo
2004 ? SNl 0:00 /usr/lib/rtkit/rtkit-daemon
2016 ? Sl 0:03 /usr/sbin/vmtoolsd
2237 ? Sl 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
2248 ? Ssl 0:01 gnome-session --session=ubuntu
2283 ? Ss 0:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-s
2286 ? S 0:00 /usr/bin/dbus-launch --exit-with-session gnome-sessio
2287 ? Ss 0:00 //bin/dbus-daemon --fork --print-pid 5 --print-addres
2299 ? Sl 0:01 /usr/lib/gnome-settings-daemon/gnome-settings-daemon
2306 ? S 0:00 /usr/lib/gvfs/gvfsd
2308 ? Sl 0:00 /usr/lib/gvfs//gvfs-fuse-daemon -f /home/xiaoyi/.gvfs
2314 ? Sl 0:15 compiz
2318 ? S 0:00 /usr/lib/i386-linux-gnu/gconf/gconfd-2
2327 ? S<l 0:00 /usr/bin/pulseaudio --start--log-target=syslog
2330 ? S 0:00 /usr/lib/pulseaudio/pulse/gconf-helper
2331 ? Sl 0:00 /usr/lib/gnome-settings-daemon/gnome-fallback-mount-h
2332 ? Sl 0:02 nautilus -n
2335 ? Sl 0:00 bluetooth-applet
2336 ? Sl 0:01 nm-applet
2337 ? Sl 0:07 /usr/lib/vmware-tools/sbin32/vmtoolsd -n vmusr --bloc
2338 ? Sl 0:00 /usr/lib/policykit-1-gnome/polkit-gnome-authenticatio
2356 ? S 0:00 /usr/lib/gvfs/gvfs-gdu-volume-monitor
2358 ? Sl 0:00 /usr/lib/udisks/udisks-daemon
2359 ? S 0:00 udisks-daemon: not polling any devices
2364 ? Sl 0:00 /usr/lib/gvfs/gvfs-afc-volume-monitor
2368 ? S 0:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor
2383 ? S 0:00 /usr/lib/gvfs/gvfsd-trash --spawner :1.6 /org/gtk/gvf
2386 ? S 0:00 /usr/lib/gvfs/gvfsd-burn --spawner :1.6 /org/gtk/gvfs
2409 ? Sl 0:01 /usr/lib/bamf/bamfdaemon
2428 ? Ss 0:00 /bin/sh -c /usr/bin/compiz-decorator
2429 ? Sl 0:00 /usr/bin/gtk-window-decorator
2432 ? Sl 0:01 /usr/lib/unity/unity-panel-service
2434 ? Sl 0:00 /usr/lib/indicator-appmenu/hud-service
2452 ? Sl 0:00 /usr/lib/indicator-application/indicator-application-
2454 ? Sl 0:01 /usr/lib/indicator-printers/indicator-printers-servic
2455 ? Sl 0:00 /usr/lib/indicator-datetime/indicator-datetime-servic
2457 ? Sl 0:00 /usr/lib/indicator-session/indicator-session-service
2459 ? Sl 0:00 /usr/lib/indicator-sound/indicator-sound-service
2461 ? Sl 0:00 /usr/lib/indicator-messages/indicator-messages-servic
2493 ? S 0:00 /usr/lib/geoclue/geoclue-master
2504 ? S 0:00 /usr/lib/ubuntu-geoip/ubuntu-geoip-provider
2513 ? Sl 0:00 /usr/lib/gnome-disk-utility/gdu-notification-daemon
2579 ? Sl 0:00 telepathy-indicator
2585 ? Sl 0:00 /usr/lib/telepathy/mission-control-5
2589 ? Sl 0:00 /usr/lib/gnome-online-accounts/goa-daemon
2599 ? Sl 0:00 zeitgeist-datahub
2600 ? Sl 0:01 gnome-screensaver
2606 ? Sl 0:00 /usr/bin/zeitgeist-daemon
2615 ? Sl 0:00 /usr/lib/zeitgeist/zeitgeist-fts
2622 ? S 0:00 /bin/cat
2640 ? Sl 0:00 /usr/lib/unity-lens-applications/unity-applications-d
2642 ? Sl 0:00 /usr/lib/unity-lens-files/unity-files-daemon
2644 ? Sl 0:00 /usr/lib/unity-lens-music/unity-music-daemon
2646 ? Sl 0:00 /usr/bin/python /usr/lib/unity-lens-video/unity-lens-
2694 ? Sl 0:00 /usr/lib/unity-lens-music/unity-musicstore-daemon
2708 ? Sl 0:00 /usr/bin/python /usr/lib/unity-scope-video-remote/uni
2726 ? Sl 0:01 update-notifier
2740 ? S 0:00 /usr/bin/python /usr/lib/system-service/system-servic
2762 ? Sl 0:00 /usr/lib/deja-dup/deja-dup/deja-dup-monitor
3016 ? S 0:00 /usr/lib/cups/notifier/dbus dbus://
3132 ? Ss 0:00 /bin/sh -c gnome-terminal
3133 ? Sl 0:02 gnome-terminal
3140 ? S 0:00 gnome-pty-helper
3141 pts/0 Ss 0:00 bash
3218 ? SNl 0:07 /usr/bin/python /usr/bin/update-manager --no-focus-on
3222 ? Sl 0:00 /usr/lib/dconf/dconf-service
3395 pts/0 R+ 0:00 ps ax
xiaoyi@ubuntu:/$
第一列显示进程的进程号(ProcessID,即PID)
第三列显示进程的当前状态(S代表睡眠、SW代表在睡眠和等待、R代表在运行中)
进程的名字显示在最后一列。
1.2.3、硬件设备管理
任何Linux系统需要与之通讯的设备,都需要在内核代码中加入其驱动程序代码。驱动程序代码相当于应用称和硬件设备的中间人,允许内和设备之间交换数据。
在Linux内核中有两种方法用来插入设备驱动代码:
□ 编译进内核的设备驱动代码;
□ 可插入内核的设备驱动模块。
Linux将硬件设备当成特殊的文件,称为设备文件。设备文件有三种不同的分类:
□ 字符型设备文件;
□ 块设备文件;
□ 网络设备文件。
字符设备文件:指处理数据时每次只能处理一个字符的设备。(调制解调器、终端)
块设备文件:指处理数据时每次能处理大块数据的设备。(硬盘)
网络设备文件:指采用数据包发送和接收数据的设备。(各种网卡、特殊的回环设备)
1.2.4文件系统管理
Linux内核采用虚拟文件系统(Virtual File System , VFS)作为和每个文件系统交互的接口。这为Linux内核任何同类型文件系统通信提供了一个标准接口。当每个文件系统被挂载和使用时,VFS将信息都缓存在内存找中。
1.3 GNU工具链
1.3.1、核心GNU工具链
GNU coreutils软件包由三部分构成:
□ 用以处理文本的工具;
□ 用以操作文本的工具;
□ 用以管理进程的工具。
1.3.2、shell
1.4 Linux桌面环境
1、X Window系统
2、KDE桌面
3、GNOME桌面
4、其他桌面
2、Linux发行版
- 《Linux命令行与Shell脚本编程大全》学习笔记1
- Linux命令行与Shell脚本编程[学习笔记1]
- 《Linux命令行与Shell脚本编程大全》学习笔记2
- 《Linux命令行与Shell脚本编程大全》学习笔记3
- 《Linux命令行与Shell脚本编程大全》学习笔记4
- Linux命令行与Shell脚本编程[学习笔记序]
- linux命令行与shell脚本编程大全学习笔记之—shell脚本for命令学习
- 《linux命令行和shell脚本编程宝典》学习笔记2
- 《Linux命令行与shell脚本编程大全》 第一、二章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第三章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第四章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第五章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第六章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第七章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第八章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第九章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第十章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第十一章 学习笔记
- linux vim操作小技巧
- 深度优先搜索
- H3C Office 防火墙基本操作
- POJ 4049 Chess(博弈)
- iOS开发中邮箱,电话号码,身份证,密码,昵称正则表达式验证
- Linux命令行与Shell脚本编程[学习笔记1]
- 1013. 数素数 (20)
- app inventor开发日记(一)
- Java泛型详解
- 月度开销
- 各种LPXXSTR之间的互相转换
- Java bug记录
- The Graphics Pipeline and OpenGL
- css常用属性之字体属性