Linux shell编程

持续更新中。。。。。。。

一.  Linux

     

Linux内核主要四种功能:

系统内存管理

软件程序管理

硬件设备管理

文件系统管理

1.内核

1.1系统内存映射

1.2软件程序管理

内核创建第一个进程(init进程)来启动系统上所有其他进程

一些Linux发行版用表管理开机时自启动的系统/etc/inittab

ubuntu/etc/init.d目录,将开机是启动或停止某个应用的脚本放目录下

  脚本通过/etc/rcX.d目录下入口(entry)启动,X表示运行级 ----实际是到/etc/init.d中启动脚本符号链接

 

运行级为1时,单用户模式

运行级为3时,大部分都可以

运行级为5时,可启动图形化

 

1.3硬件设备管理

驱动程序代码相当于应用程序和硬件设备的中间人

两种方法插入设备驱动代码:

编译进内核的设备驱动代码

可插入内核的设备驱动模块

Linux将硬件设备当成特殊文件:设备文件

字符型设备文件:每次只能处理一个字符的设备---调制解调器,终端

块设备文件:处理数据是每次处理大块数据的设备----硬盘

网络设备文件:采用数据包发送和接收---网卡和特殊回环设备

 

节点:系统与设备通信通过设备节点完成,每个节点有对应唯一数值对应Linux内核标记(主设备号,次设备号)

 

1.4文件管理系统

2. GNU工具

2.1.核心GNU工具

GNU coreutils软件包分为三部分:

 用以处理文件的工具

 用以操作文本的工具

 用以管理进程的工具

2.2 shell

可将多个shell命令放在文件中作为程序执行,这些文件被称为shell脚本。

Linux发行版默认的shellbash shell

 

3. Linux桌面环境

3.1 X Window系统 -----是图形显示的核心部分

3.2 KDE桌面

3.3 GNOME桌面

3.4 Unity桌面---ubuntu

3.5 其他轻量级的Linux图形化桌面环境

 

4. Linux发行版

完整的Linux系统包称为发行版

4.1 核心Linux发行版

Slackware最早的Linux发行版中的一员,在Linux极客中比较流行

Red Hat主要用于Internet服务器的商业发行版

Fedora从Red Hat分离出的家用发行版

Gentoo为高级Linux用户设计的发行版,仅包含Linux源代码

openSUSE用于商用和家用的发行版

Debian在Linux专家和商用Linux产品中流行的发行版

4.2 特定用途的Linux发行版

CentOS

一款基于Red Hat企业版Linux源代码构建的免费发行版

Ubuntu

一款用于学校和家庭的免费发行版

PCLinuxOS

一款用于家庭和办公的免费发行版

Mint

一款用于家庭娱乐的免费发行版

dyne:bolic

一款用于音频和MIDI应用的免费发行版

Puppy Linux

一款适用于老旧PC的小型免费发行版

大多基于Debian Linux

 

4.3 Linux liveCD

Knoppix

来自德国的一款Linux发行版,也是最早的LiveCD Linux

PCLinuxOS

一款成熟的LiveCD形式的Linux发行版

Ubuntu

为多种语言设计的世界级Linux项目

Slax

基于Slackware Linux的一款LiveCD Linux

Puppy Linux

为老旧PC设计的一款全功能Linux

二.shell

1.进入命令行

CL I   ----命令行界面

控制台终端

图形化终端

ctrl+alt+Fn+F1~F6(字符界面)

F7(图形界面)

loginpython

password133~~~~~(注意不要用小键盘)

可以在虚拟控制台间切换

修改终端背景白色,文字黑色。

1.1. 命令:

setterm -inversescreen on(打开)/off(关闭)   ---交换前景色与背景色

1.2另一种修改方式命令

setterm -background white

setterm -foreground black

                                            -reset(将终端外观恢复成默认设置并清屏)

                             -store(将终端当前的前景色及后景色设置为-reset选项的值)

 

2. 通过图形化终端仿真访问CLI

终端仿真器软件包

2.1 GNOME Terminal 仿真器

访问:CentOS GNOME桌面   Applications----System Tool----Terminal

unity 桌面    bash----searchTermianl)  ubuntu中快捷键Ctrl+alt+T

KDE桌面     konsole终端 Kickoff Application Launcher图标,点击Application---utilities----Terminal

 

2.2创建启动器

启动指定的程序GNOME桌面环境中,要创建一个启动器的话,可以在桌面中间单击右键,在出现的下拉菜单中选择Select Create Launcher...,然后会打开一个名为Create Launcher的窗口。在Type字段中选择Application。在Name字段中输入图标的名称。在Command字段中输入gnome-terminal 。点击Ok,保存为新的启动器。一个带有指定名称图标的启动器就出现在了桌面上。双击就可以打开GNOME终端仿真器了

2.3菜单栏(GNOME)

File菜单项:用于创建和管理所有CLI终端会话的菜单项。

Edit菜单中的菜单项:用于处理标签内的文本内容,可用鼠标在会话窗口的任意位置复制,粘贴文本。

View菜单:用于控制CLI会话窗口外的菜单项

Search菜单:菜单项用于在终端会话中进行简单的搜素

Terminal菜单:用于控制终端仿真会话的特性(Reset)

Tabs菜单:菜单项用于控制标签的位置以及活动标签的选择

2.4 konsole terminal

File菜单

Edit:用于处理会话中文本内容的选项(管理标签名称的选项)

Scrollback:(回滚缓存区)查看缓存区

Bookmark菜单:管理terminal窗口的书签

Settings:用于定制管理配置文件

Help菜单

2.5 xterm

.基本bash shell

3.1启动shell

etc/passwd 下包含了系统所有账户列表及配置信息

一.命令查看bash shell版本

$echo $BASH_VERSION

二.type 查看命令类型

$type cd

主要有5种类型:

1. 别名2.方法3.shell内置命令4.关键字5.文件

三.Linux会检查配置在 PATH 环境中的指定路径的程序是否可以执行。通常情况下,当前目录是不会被查找,除非你把它配置到PATH 中,执行如下命令,把当前目录加到 PATH 环境中。

export PATH=$PATH:

接下来,我们创建一个存放 shell 脚本的目录bin,可以用如下命令来执行:

$ test -d $HOME/bin || mkdir $HOME/bin

当然你可以在你的主目录下手动创建目录 bin。上面的意思是检查主目录是否有 bin 目录,没有则创建。

四.创建脚本

文件名叫 hello1.sh

#! /bin/bash

echo "Hello World"

exit 0

五.执行脚本

你可以在命令行下,进入到脚本文件存在的目录,也可以是在任意目录下,但是,在执行的时候,文件的路径就应该为绝对路径:

bash $HOME/bin/hello1.sh

执行结果为,打印出“Hello world”

在执行上面的命令中,可能会报错,提示权限不足或访问拒绝的错误。这是因为 hello1.sh 没有执行的权限。所以我们使用如下命令给文件加上对应的权限。
chmod +x $HOME/bin/hello1.sh

六.在脚本中,有些表示特殊含义的参数,下面列出常见的几个:

参数标识符

含义

$0

文件本身的名字

$1

表示位置的参数,第一个参数传递给脚本

${10}

在超过两位数的参数时,使用大括号限定起来

$#

参数的个数

$*

表示所有的参数

七.单双引号

在无变量时,单双引号一样

有变量时,要用双引号,变量的值才会显示出来

例:echo "Hello $1" // 打印传递的值,例如 Tim

 echo 'Hello $1' // $1原样打印出来

八.打印脚本名字

前面提到过,特殊参数$0用来表示脚本的名字,这里的名字会带有完整的路径,如果我们只想要文件名的话,可以使用以下代码:

echo "You are using $(basename $0)"

这里(….)法的作用是我们先执行括号里面的命令,然后然后把结果赋给外面不知名的变量。(….)语法的作用是我们先执行括号里面的命令,然后然后把结果赋给外面不知名的变量。(….)语法还有一种相等的写法,注意,是键盘上数字1左边的按键,不是单引号。

echo "You are using `basename $0`"

个人不推荐这种写法,太容易混淆,不容易差错。

九.调试脚本

 如果想调试你的脚本,bash给我们提供了两个选项:-v -x
如果我们想逐行详细地查看脚本的内容,可以使用-v 选项。

更常用的是-x 选项,它们在执行时显示命令。当我们决定选择分支的时候,更加使用。

使用此选项不会看到代码的详情

3.2 shell提示符

默认的bash shell提示符时$

----@-----         python@ubuntu   用户ID@系统名

3.3 bash手册

man 命令

查找想要了解命令

通过分页程序pager显示,空格翻页

Linux手册页惯用节名

描述

Name

显示命令名和一段简短的描述

Synopsis

命令的语法

Confi guration

命令配置信息

Description

命令的一般性描述

Options

命令选项描述

Exit Status

命令的退出状态指示

Return Value

命令的返回值

Errors

命令的错误消息

Environment

描述所使用的环境变量

Files

命令用到的文件

Versions

命令的版本信息

Conforming To

命名所遵从的标准

Notes

其他有帮助的资料

Bugs

提供提交bug的途径

Example

展示命令的用法

Authors

命令开发人员的信息

Copyright

命令源代码的版权状况

See Also

与该命令类型的其他命令

 

 

记不住命令,也可以用关键字搜索

$man -k 关键字

例:要找关于终端的命令,$man -k terminal

 

linux 手册页内容区域

区域号

所涵盖的内容

1

可执行程序或shell命令

2

系统调用

3

库调用

4

特殊文件

5

文件格式与约定

6

游戏

7

概览、约定及杂项

8

超级用户和系统管理员命令

9

内核例程

 

一个命令会在多个内容区域有对应的手册页,要想查询某一部分的手册页

$man section# topic

$man 1 hostname

$man 7 hostname

 

可以只看个各部分内内容简介

$man 1 intro   阅读第一部分

$man 2 intro   阅读第三部分

3.4浏览文件系统

Linux将文件存储在虚拟目录中

Linux虚拟目录结构只包含一个称为根目录的基础目录,根目录下的目录和文件会按照访问他们的目录路径一一列出。

**Linux中使用/(正斜线),在文件目录中划分路径

常见Linux 目录名称

目录

用途

/

虚拟目录的根目录。通常不会在这里存储文件

/bin

二进制目录,存放许多用户级的GNU工具

/boot

启动目录,存放启动文件

/dev

设备目录,Linux在这里创建设备节点

/etc

系统配置文件目录

/home

主目录,Linux在这里创建用户目录

/lib

库目录,存放系统和应用程序的库文件

/media

媒体目录,可移动媒体设备的常用挂载点

/mnt

挂载目录,另一个可移动媒体设备的常用挂载点

/opt

可选目录,常用于存放第三方软件包和数据文件

/proc

进程目录,存放现有硬件及当前进程的相关信息

/root

root用户的主目录

/sbin

系统二进制目录,存放许多GNU管理员级工具

/run

运行目录,存放系统运作时的运行时数据

/srv

服务目录,存放本地服务的相关文件

/sys

系统目录,存放系统硬件信息的相关文件

/tmp

临时目录,可以在该目录中创建和删除临时工作文件

/usr

用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里

/var

可变目录,用以存放经常变化的文件,比如日志文件

 

 

 

3.4.1遍历目录

 

cd 绝代文件路径/相对文件路径

绝对文件路径:从根目录/开始,完整的路径名

例:cd /usr/bin

pwd 显示当前所在目录

可以使用绝对路径切换到Linux虚拟目录结构中的任意等级

 

相对文件路径:当前工作目录下的一个目录 或特殊字符.  / ..

cd . 表示当前目录

cd .. 表示上一级目录

3.4.2基本列表功能

ls    -F(区分文件和目录)

-a(将隐藏文件和普通文件一起显示出来)

-R(递归选项,列出了当前目录下包含了子目录的文件)

-l(显示长列表)

3.4.3过滤输出列表

文件拓展匹配

命令 指定的文件或目录

:$ ls 新文件.py

可以搭配通配符: ?代表一个字符

*代表零个或多个字符

[] 中括号表示一个字符位,并给出多个可能的选择

[ai] ai

[a-i] ai

[!a] 将不需要的内容排除在外

3.5处理文件

3.5.1创建文件

touch 创建新空文件

touch -a 新文件.py   -a 更改访问时间

ls -l --time=atime 新文件.py     --time=atime (可显示更改的访问时间)

3.5.2复制文件

cp source destination

如果目标文件已经存在,加上-ishell会强制询问是否覆盖已有文件。

cp 绝对文件/相对文件

可搭配通配符使用

3.5.3制表键自动补全

tab

3.5.4链接文件


符号链接:实实在在的文件,指向放在虚拟目录结构中某个地方的另一个文件,两个通过符号链接在一起的文件,彼此内容不同。

用法:$ln -s 文件 文件  

查看inode编号(用于标识的唯一数字):$ls -i 文件

 

  

硬链接:会创建独立的虚拟文件,其中包含了原始文件的信息和位置,根本上说是一个文件。

用法:$ln 文件  文件

带有硬链接的文件共享inode编号,因为是同一个文件

注意:只能对处于同一存储媒体的文件创建硬链接,不同存储媒体文件间的链接用符号链接。

 

3.5.5重命名文件

Linux中重命名又称为移动 mv可以将文件和目录移动到另一个位置或重新命名。

移动,重命名。

使用mv可以移动,重命名一步完成。

 

3.5.6删除文件

删除叫移除

rm -i 文件/*.py

-i  提示你y/n  

-f  强制删除

3.6处理目录

3.6.1创建目录

mkdir 创建多个目录  

$mkdir ab cd ef

创建子目录 mkdir -p ab/cd/ef

 

3.6.2删除目录

 rmdir

默认rmdir只删除空目录

解决:先将目录中文件删掉,再在空目录中使用mkdir

 

也可以在整个非空目录上使用rm,使用-r选项使得命令可以向下进入目录,删除其中文件,再删除目录。

$rm -ri test

进入,删除文件,删除目录

 

rm -rf  最有效删除(慎用,无提示,无法找回)

tree 帮助你更好的查看目录,子目录及文件

3.7查看文件内容

3.7.1查看文件类型

file命令

file 文件   文件包含的文本信息,字符编码

file 目录

file 符号链接文件

二进制可执行能够确定该程序编译时所面向的平台以及需要何种类型的库。如果你有从未知源处获得程序。file 命令的二进制文件,这会是个非常有用的特性

3.7.2查看整个文件

cat

cat -n (给所有的行加上行号,检查脚本时有用)

cat -b(只给有文本的加上行号)

cat -T(不想让制表符出现)

 

more(分页显示文本文件)

 

less

3.7.3查看部分文件

tail (默认显示文本末尾10行)

tail -n2 (显示文件最后两行)

 

head (默认显示文本开头10行)

四.更多的bash shell

4.1检测程序

4.1.1 探查进程

ps 命令只会显示运行在当前控制台下的属于当前用户的进程

UNIX:风格参数

程序的进程IDProcess IDPID)、它们运行在哪个终端(TTY)以及进程已用的CPU时间。

ps -ef (查看系统上运行的所有进程)

-e显示所有运行在系统上的进程

-f 拓展了输出:

· UID :启动这些进程的用户。

· PID :进程的进程ID

· PPID :父进程的进程号(如果该进程是由另一个进程启动的)。

· C :进程生命周期中的CPU利用率。

· STIME :进程启动时的系统时间。

· TTY :进程启动时的终端设备。

· TIME :运行进程需要的累计CPU时间。

· CMD :启动的程序名称。

ps -l

注意使用了-l 参数之后多出的那些列

:内核分配给进程的系统标记。

:进程的状态(O代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵化,进程已结束但父进程已不存在;T代表停止)。

PRI :进程的优先级(越大的数字代表越低的优先级)。

NI :谦让度值用来参与决定优先级。

ADDR :进程的内存地址。

SZ :假如进程被换出,所需交换空间的大致大小。

WCHAN :进程休眠的内核函数的地址。

 

BSD风格参数

GNU长参数

forest 参数。它会显示进程的层级信息,并用ASCII字符绘出可爱的图表。

4.1.2实时监测系统

top (实时显示进程信息)

4.1.3结束进程

kill  kill 命令可通过进程IDPID)给进程发信号,不能用命令名。

killall  它支持通过进程名而不是PID来结束进程。killall 命令也支持通配符

4.2监测磁盘空间

4.2.1挂载存储媒体

Linux文件系统将所有的磁盘都并入一个虚拟目录下。在使用新的存储媒体之前,需要把它放到虚拟目录下。这项工作称为挂载

1. mount命令

要手动在虚拟目录中挂载设备,需要以root用户身份登录,或是以root用户身份运行sudo 命令。下面是手动挂载媒体设备的基本命令:

mount -t type device directory

2. umount

Linux系统上移除一个可移动设备时,不能直接从系统上移除,而应该先卸载

umount [directory | device ]

4.2.2 df命令

有时你需要知道在某个设备上还有多少磁盘空间。df 命令可以让你很方便地查看所有已挂载磁盘的使用情况。

df -h

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值