Linux命令行与Shell脚本编程[学习笔记1]

原创 2016年08月28日 19:13:07

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入门 一、Linux操作系统一般包括四个主要部分: linux内核; GNU实用程序; 图形桌面环境; 应用软件; 二、内核的主要功能: 1、系统内存管理...

《Linux命令行与Shell脚本编程大全》学习笔记1

0、下面是书本第三章的学习笔记,并且只记录那些,本人不知道的抑或遗忘的内容。      1、默认情况下,bash shell启动时会自动处理用户主目录下.bashrc文件中的命令。许多Lin...

《Linux命令行与shell脚本编程大全》 第一、二章 学习笔记

第一章:初识Linux shell Linux内核负责以下4个主要功能: 1.系统内存管理 2.软件程序管理 3.硬件设备管理 4.文件系统管理 1.系统内存管理 内核不仅管理服务器上的可用物理内...
  • su1216
  • su1216
  • 2012年11月22日 21:50
  • 11430

《Linux命令行与shell脚本编程大全》 第二十四章 学习笔记

第二十四章:使用Web Lynx程序Lynx支持三种不同的查看Web页面真实HTML内容的格式:1.在终端会话中采用curses图形库的文本图形显示2.文本文件,从web页面中转储的原始数据3.文本文...
  • su1216
  • su1216
  • 2013年11月15日 16:34
  • 4187

《Linux命令行与shell脚本编程大全》 第六章 学习笔记

第六章:理解Linux文件权限 root账户的UID通常是0 Linux系统会为各种各样的功能创建不同系统账户,这样即使攻占了某个服务,系统也不会沦陷 Linux为系统预留了500以下的UID值,...
  • su1216
  • su1216
  • 2012年12月17日 00:02
  • 3519

《Linux命令行与shell脚本编程大全》 第十二章 学习笔记

第12章:更多的结构化命令 for 基本格式 for var in list do commands done 可以通过下面几种方式指定list列表 1.罗列 for var in A B ...
  • su1216
  • su1216
  • 2013年02月11日 12:09
  • 3401

《Linux命令行与shell脚本编程大全》 第十七章 学习笔记

第十七章:图形化桌面上的脚本编程 创建文本菜单创建菜单布局#!/bin/bash clear #清屏 echo -e "\t\tMenu" echo -e "1.\tDisplay disk spac...
  • su1216
  • su1216
  • 2013年09月05日 20:35
  • 3408

《Linux命令行与shell脚本编程大全》 第三章 学习笔记

第三章:基本的bash shell命令 bash程序使用命令行参数来修改所启动shell的类型 参数 描述 -c string 从string中读取命令并处理他们 -r...
  • su1216
  • su1216
  • 2012年11月26日 12:58
  • 4655

《Linux命令行与shell脚本编程大全》 第十六章 学习笔记

第十六章:创建函数 基本的脚本函数创建函数1.用function关键字,后面跟函数名function name { commands }2.函数名后面跟空圆括号,标明正在定义一个函数name(...
  • su1216
  • su1216
  • 2013年09月02日 16:03
  • 4152

《Linux命令行与shell脚本编程大全》 第二十一章 学习笔记

第二十一章:gawk进阶 使用变量gawk支持两种类型的变量:内建变量自定义变量内建变量字段和数据行分割符变量使用美元符号($)和数据字段在数据行中位置对应的数值来引用该数据行中的字段。比如,要引用数...
  • su1216
  • su1216
  • 2013年10月15日 15:13
  • 3713
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux命令行与Shell脚本编程[学习笔记1]
举报原因:
原因补充:

(最多只允许输入30个字)