持续更新中。。。。。。。
Linux内核主要四种功能:
系统内存管理
软件程序管理
硬件设备管理
文件系统管理
内核创建第一个进程(init进程)来启动系统上所有其他进程
一些Linux发行版用表管理开机时自启动的系统/etc/inittab
ubuntu用/etc/init.d目录,将开机是启动或停止某个应用的脚本放目录下
脚本通过/etc/rcX.d目录下入口(entry)启动,X表示运行级 ----实际是到/etc/init.d中启动脚本符号链接
运行级为1时,单用户模式
运行级为3时,大部分都可以
运行级为5时,可启动图形化
驱动程序代码相当于应用程序和硬件设备的中间人
两种方法插入设备驱动代码:
编译进内核的设备驱动代码
可插入内核的设备驱动模块
Linux将硬件设备当成特殊文件:设备文件
字符型设备文件:每次只能处理一个字符的设备---调制解调器,终端
块设备文件:处理数据是每次处理大块数据的设备----硬盘
网络设备文件:采用数据包发送和接收---网卡和特殊回环设备
节点:系统与设备通信通过设备节点完成,每个节点有对应唯一数值对应Linux内核标记(主设备号,次设备号)
GNU coreutils软件包分为三部分:
用以处理文件的工具
用以操作文本的工具
用以管理进程的工具
可将多个shell命令放在文件中作为程序执行,这些文件被称为shell脚本。
Linux发行版默认的shell是bash shell
3.1 X Window系统 -----是图形显示的核心部分
3.2 KDE桌面
3.3 GNOME桌面
3.4 Unity桌面---ubuntu
3.5 其他轻量级的Linux图形化桌面环境
完整的Linux系统包称为发行版
Slackware最早的Linux发行版中的一员,在Linux极客中比较流行
Red Hat主要用于Internet服务器的商业发行版
Fedora从Red Hat分离出的家用发行版
Gentoo为高级Linux用户设计的发行版,仅包含Linux源代码
openSUSE用于商用和家用的发行版
Debian在Linux专家和商用Linux产品中流行的发行版
CentOS |
一款基于Red Hat企业版Linux源代码构建的免费发行版 |
Ubuntu |
一款用于学校和家庭的免费发行版 |
PCLinuxOS |
一款用于家庭和办公的免费发行版 |
Mint |
一款用于家庭娱乐的免费发行版 |
dyne:bolic |
一款用于音频和MIDI应用的免费发行版 |
Puppy Linux |
一款适用于老旧PC的小型免费发行版 |
大多基于Debian Linux
Knoppix |
来自德国的一款Linux发行版,也是最早的LiveCD Linux |
PCLinuxOS |
一款成熟的LiveCD形式的Linux发行版 |
Ubuntu |
为多种语言设计的世界级Linux项目 |
Slax |
基于Slackware Linux的一款LiveCD Linux |
Puppy Linux |
为老旧PC设计的一款全功能Linux |
CL I ----命令行界面
控制台终端
图形化终端
ctrl+alt+(Fn)+F1~F6(字符界面)
F7(图形界面)
login:python
password:133~~~~~(注意不要用小键盘)
可以在虚拟控制台间切换
修改终端背景白色,文字黑色。
setterm -inversescreen on(打开)/off(关闭) ---交换前景色与背景色
:setterm -background white
setterm -foreground black
-reset(将终端外观恢复成默认设置并清屏)
-store(将终端当前的前景色及后景色设置为-reset选项的值)
终端仿真器软件包
访问:CentOS GNOME桌面 Applications----System Tool----Terminal
unity 桌面 bash----search(Termianl) ubuntu中快捷键Ctrl+alt+T
KDE桌面 konsole终端 Kickoff Application Launcher图标,点击Application---utilities----Terminal
启动指定的程序在GNOME桌面环境中,要创建一个启动器的话,可以在桌面中间单击右键,在出现的下拉菜单中选择Select Create Launcher...,然后会打开一个名为Create Launcher的窗口。在Type字段中选择Application。在Name字段中输入图标的名称。在Command字段中输入gnome-terminal 。点击Ok,保存为新的启动器。一个带有指定名称图标的启动器就出现在了桌面上。双击就可以打开GNOME终端仿真器了
File菜单项:用于创建和管理所有CLI终端会话的菜单项。
Edit菜单中的菜单项:用于处理标签内的文本内容,可用鼠标在会话窗口的任意位置复制,粘贴文本。
View菜单:用于控制CLI会话窗口外的菜单项
Search菜单:菜单项用于在终端会话中进行简单的搜素
Terminal菜单:用于控制终端仿真会话的特性(Reset)
Tabs菜单:菜单项用于控制标签的位置以及活动标签的选择
File菜单
Edit:用于处理会话中文本内容的选项(管理标签名称的选项)
Scrollback:(回滚缓存区)查看缓存区
Bookmark菜单:管理terminal窗口的书签
Settings:用于定制管理配置文件
Help菜单
在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 选项,它们在执行时显示命令。当我们决定选择分支的时候,更加使用。
使用此选项不会看到代码的详情
默认的bash shell提示符时$
----@----- python@ubuntu 用户ID名@系统名
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 阅读第三部分
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 |
可变目录,用以存放经常变化的文件,比如日志文件 |
cd 绝代文件路径/相对文件路径
绝对文件路径:从根目录/开始,完整的路径名
例:cd /usr/bin
pwd 显示当前所在目录
可以使用绝对路径切换到Linux虚拟目录结构中的任意等级
相对文件路径:当前工作目录下的一个目录 或特殊字符. / ..
cd . 表示当前目录
cd .. 表示上一级目录
ls -F(区分文件和目录)
-a(将隐藏文件和普通文件一起显示出来)
-R(递归选项,列出了当前目录下包含了子目录的文件)
-l(显示长列表)
文件拓展匹配
命令 指定的文件或目录
例:$ ls 新文件.py
可以搭配通配符: ?代表一个字符
*代表零个或多个字符
[] 中括号表示一个字符位,并给出多个可能的选择
[ai] a或i
[a-i] a到i
[!a] 将不需要的内容排除在外
touch 创建新空文件
touch -a 新文件.py -a 更改访问时间
ls -l --time=atime 新文件.py --time=atime (可显示更改的访问时间)
cp source destination
如果目标文件已经存在,加上-i,shell会强制询问是否覆盖已有文件。
可cp 绝对文件/相对文件
可搭配通配符使用
tab键
符号链接:实实在在的文件,指向放在虚拟目录结构中某个地方的另一个文件,两个通过符号链接在一起的文件,彼此内容不同。
用法:$ln -s 文件 文件
查看inode编号(用于标识的唯一数字):$ls -i 文件
硬链接:会创建独立的虚拟文件,其中包含了原始文件的信息和位置,根本上说是一个文件。
用法:$ln 文件 文件
带有硬链接的文件共享inode编号,因为是同一个文件
注意:只能对处于同一存储媒体的文件创建硬链接,不同存储媒体文件间的链接用符号链接。
Linux中重命名又称为移动 mv可以将文件和目录移动到另一个位置或重新命名。
移动,重命名。
使用mv可以移动,重命名一步完成。
删除叫移除
rm -i 文件/*.py
-i 提示你y/n
-f 强制删除
mkdir 创建多个目录
$mkdir ab cd ef
创建子目录 mkdir -p ab/cd/ef
rmdir
默认rmdir只删除空目录
解决:先将目录中文件删掉,再在空目录中使用mkdir
也可以在整个非空目录上使用rm,使用-r选项使得命令可以向下进入目录,删除其中文件,再删除目录。
$rm -ri test
进入,删除文件,删除目录
rm -rf 最有效删除(慎用,无提示,无法找回)
tree 帮助你更好的查看目录,子目录及文件
file命令
file 文件 文件包含的文本信息,字符编码
file 目录
file 符号链接文件
二进制可执行能够确定该程序编译时所面向的平台以及需要何种类型的库。如果你有从未知源处获得程序。file 命令的二进制文件,这会是个非常有用的特性
cat
cat -n (给所有的行加上行号,检查脚本时有用)
cat -b(只给有文本的加上行号)
cat -T(不想让制表符出现)
more(分页显示文本文件)
less
3.7.3查看部分文件
tail (默认显示文本末尾10行)
tail -n2 (显示文件最后两行)
head (默认显示文本开头10行)
4.1.1 探查进程
ps 命令只会显示运行在当前控制台下的属于当前用户的进程
UNIX:风格参数
程序的进程ID(Process ID,PID)、它们运行在哪个终端(TTY)以及进程已用的CPU时间。
ps -ef (查看系统上运行的所有进程)
-e显示所有运行在系统上的进程
-f 拓展了输出:
· UID :启动这些进程的用户。
· PID :进程的进程ID。
· PPID :父进程的进程号(如果该进程是由另一个进程启动的)。
· C :进程生命周期中的CPU利用率。
· STIME :进程启动时的系统时间。
· TTY :进程启动时的终端设备。
· TIME :运行进程需要的累计CPU时间。
· CMD :启动的程序名称。
ps -l
注意使用了-l 参数之后多出的那些列:
F :内核分配给进程的系统标记。
S :进程的状态(O代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵化,进程已结束但父进程已不存在;T代表停止)。
PRI :进程的优先级(越大的数字代表越低的优先级)。
NI :谦让度值用来参与决定优先级。
ADDR :进程的内存地址。
SZ :假如进程被换出,所需交换空间的大致大小。
WCHAN :进程休眠的内核函数的地址。
BSD风格参数
GNU长参数
forest 参数。它会显示进程的层级信息,并用ASCII字符绘出可爱的图表。
top (实时显示进程信息)
kill kill 命令可通过进程ID(PID)给进程发信号,不能用命令名。
killall 它支持通过进程名而不是PID来结束进程。killall 命令也支持通配符
Linux文件系统将所有的磁盘都并入一个虚拟目录下。在使用新的存储媒体之前,需要把它放到虚拟目录下。这项工作称为挂载
1. mount命令
要手动在虚拟目录中挂载设备,需要以root用户身份登录,或是以root用户身份运行sudo 命令。下面是手动挂载媒体设备的基本命令:
mount -t type device directory
2. umount
从Linux系统上移除一个可移动设备时,不能直接从系统上移除,而应该先卸载
umount [directory | device ]
有时你需要知道在某个设备上还有多少磁盘空间。df 命令可以让你很方便地查看所有已挂载磁盘的使用情况。
df -h