Linux笔记

Linux笔记
Linux笔记

第一天

一、名词解释

GPL(GNU General Public License)通用公共许可证

GNU是GNU Is Not UNIX的递归缩写,旨在消除对计算机软件拷贝、分发、修改的限制

GPL许可协议的主要目标是保证软件对所有的用户都是自由的。

LGPL(Lesser General Public License)

LGPL相对于GPL的条款更加宽松,为使用Linux平台开发商业软件提供了更多的空间。与GPL的最大不同是,可以私有使用LGPL授权的自由软件,开发出来的新软件可以是私有的而不需要是自由软件。

OSD(The Open Source Definition)开放源代码软件的定义文本可以从官方网站查阅

二、Linux版本命名

Linux发行版的名称和版本号是由发行版的维护者决定的

RHEL5/Fedora是由Red Hat公司发布的

Ubuntu Linux 11 是由Ubuntu社团维护和发布的

Debian Linux 3.1是由Debian维护社区发布的

Red Hat Linux 已停止开发,最高版本为9.0。之后衍生出两个系列:Red Hat Linux企业版简称RHEL,目前最高版本为RHEL5

Fedora 社区版目前流行版本为Fedora 9, Fedora 14

三、文件系统

1、在文件/proc/filesystem文件中列出了系统当前可用的文件系统类型:

EXT2和EXT3都是Linux操作系统默认使用的文件系统类型

EXT3属于日志文件系统,是EXT2文件系统的升级版

swap类型的文件系统在Linux系统的交换分区中使用

Linux支持对FAT格式文件系统(包括FAT16和FAT32)的读写

Linux支持对NTFS文件系统的读取,默认不支持对NTFS文件系统的写入2、文件名:字母、数字、下划线、圆点(与windows不同,圆点后面不是扩展名)

文件类型:普通文件、目录文件、链接文件、特殊文件

文件属性:第一个字符可为:-、d、b、c (查看文件属性时)-:普通文件d:目录文件

b:块特殊文件,如硬盘和CDROM设备c:字符文件设备

l:符号连接p:管道,用于进程通讯

3、目录结构及目录路径

Linux系统使用树型目录结构,在整个系统中只存在一个根目录(文件系统)

Linux系统中总是将文件系统挂载到树型目录结构中的某个目录节点中使用

/bin/ —用来贮存用户命令。目录/usr/bin也被用来贮存用户命令。

/sbin/ —许多系统命令(例如shutdown)的贮存位置。目录/usr/sbin中也包括了许多系统命令。

/root/ —根用户(超级用户)的主目录。

/mnt/ —该目录中通常包括系统引导后被挂载的文件系统的挂载点。譬如,默认的光盘挂载点是/mnt/cdrom

/boot/ —包括内核和其它系统启动期间使用的文件。

/lost+found/ —被fsck 用来放置零散文件(没有名称的文件)

/lib/ —用来存放系统动态连接共享库。

/dev/ —贮存设备文件。

/etc/ —存放了系统管理时要用到的各种配置文件和子目录。

/var/ —用于贮存variable(或不断改变的)文件,例如日志文件和打印机假脱机文件。

/usr/ —这是linux系统中占用硬盘空间最大的目录。用户的很多应用程序和文件都存放在这个目录下。

/proc/ —一个虚拟的系统目录,可以在这个目录下获取系统信息。这些信息是在内存中,由系统自己产生的。

/initrd/ —用来在计算机启动时挂载initrd.img 映像文件的目录以及载入所需设备模块的目录。

/tmp/ —用户和程序的临时目录。用来存放不同程序执行时产生的临时文件/home/ —如果建立一个用户“student”,那么在/home目录下就有一个对应

/home/student路径,作为用户的主目录。

/opt/ —可选文件和程序的贮存目录。该目录主要被第三方开发者用来简易地安装和卸装他们的软件包。

四、硬盘对应的设备文件

Linux中,每一个硬件设备都被映射到一个系统的设备文件,对于磁盘、光驱等IDE或者SCSI设备也不例外。

IDE磁盘的设备文件采用/dev/hdx来命名,分区则采用/dev/hdxy来命名,其中x 表示磁盘(a是第一块磁盘,b是第二块磁盘,依此类推),y表示分区的号码。

SCSI磁盘和分区则采用/dev/sdx和/dev/sdxy来命名(x和y的命名规则与IDE磁盘一样)。IDE和SCSI光驱采用的是跟磁盘一样的命令方式。

/dev/hda表示第一个IDE接口的第一个设备(master)

/dev/hdb表示第一个IDE接口的第二个设备(slave)

/dev/hdc和/dev/hdd则是第二个IDE接口上的master和slave设备

/dev/sda1表示第一个SCSI接口硬盘的第一个分区

注:逻辑分区从5开始,linux预留了4个主分区

第二天

1、linux命令格式

Linux命令的组成部分:命令字、命令选项、命令参数

(1)命令提示符表示命令输入的状态:

a、管理员root用户的提示符“#”:[root@localhost ~]#

普通用户提示符“$”:[student@localhost ~]$

b、命令的各组成部分之间用空格分隔

C、命令的输入以回车键结束

(2)帮助命令

a、help加索要查询的命令命令例如:$ help pwd (查询pwd的功能)

b、指令+“--help”例如:$ touch --help (查询help功能)

c、使用man命令阅读手册页例如:$ man ls

d、使用info命令阅读信息页例如:$ info ls

2、文件、目录操作命令

(1)目录操作命令

注:(1)rmdir 只能删除口的目录

(2)相对路径是以“.”或“..”开始的目录路径表示形式

“.”表示当前目录;“..”表示上一级目录

例如:cd ./test ls ../bin

绝对路径是以“/”开始的路径表示形式

例如:ls / cd /home

(2)文件操作命令

a、检测文件类型: $ file /etc/passwd

b、建立空文件: $ touch myfile

c、文件查找: 按文件名进行查找: $ find . -name “file*”

按文件属主进行查找: $ find . -user student

d、复制和删除文件$ cp filea fileb (复制filea得到文件fileb)

$ cp filea fileb (复制filea得到文件fileb)

$ rm filea

e、文件移动与重命名:

$ mv filea fileb(蓝色为文件名表示:把filea重命名为fileb)

$ mv filea dira/ (蓝色为目录表示:把filea搬运到dira目录内) (3)文本操作命令

(a)显示文本:$ cat /etc/passwd

(b)分页显示文本:$ more /etc/passwd

(c)分页文本浏览:$ less /etc/passwd

(d)显示文件首:$ head -5 /etc/passwd

(e)显示文件尾:$ tail -5 /etc/passwd

(4)用户系统命令及网络命令

(5)光盘及U盘使用

光盘使用:

光盘驱动器设备文件:/dev/cdrom

挂载光盘使用mount命令:#mount -t iso9660 /dev/cdrom /mnt/cdrom/ 使用命令访问光盘挂载点目录::ls /mnt/cdrom/

卸载光盘使用umount命令:#umount /mnt/cdrom

弹出光盘驱动器托盘:#eject

U盘使用:

识别USB存储设备:包括USB硬盘、U盘、MP3播放器等/dev/sda、/dev/sdb

#fdisk –l //查看识别的U盘动态分配的设备文件名使用mount命令挂载U盘:#mount -t vfat /dev/sdb/ mnt/udisk 通过挂载点目录访问U盘的内容:ls /mnt/udisk

使用umount命令卸载U盘:#umount /mnt/udisk

(6)tar命令

a、建立归档:

对文件和目录进行归档:$ tar cf myfiles.tar files/

对文件和目录进行压缩归档:$ tar czf myfiles.tar.gz files/

注:c表示建立归档;z表示对归档进行压缩;f用于指定建立的归档文件名。

b、查看归档:

查看归档文件中的目录列表:$ tar tf myfiles.tar

查看压缩归档文件中的目录列表:$ tar tzf myfiles.tar.gz

注:t表示查看归档;z表示归档文件是压缩格式;f用于指定归档文件名。

c、恢复归档:

恢复归档文件:$ tar xf myfiles.tar

恢复压缩的归档文件:$ tar xzf myfiles.tar.gz

恢复归档文件到指定目录::$ tar xzf myfiles.tar.gz -C test/ (大写C)注:x表示恢复归档;z表示归档是压缩格式;f用于指定归档文件名。

-C用于指定归档恢复的目录名,若不指定,默认在当前目录打开。

Zip格式:tar cvzf mydir.tgz mydir/

tar xvzf mydir.tgz -C ../

Bz2格式:tar cvjf mydir.tar.bz2 mydir/

tar xvjf mydir.tar.bz2 -C ../

(7)RPM 软件包

RPM最早是由Red Hat公司提出的软件包管理标准,目前应用于很多Linux发行版

(8)用户管理命令:

建立用户帐号:# adduser st01

设置用户口令:# passwd st01

设置用户帐号属性:锁定用户帐号禁止登录usermod -L st01

删除用户帐号:# userdel -r st01

用户组帐号管理:

添加用户组:# groupadd class1

在建立用户时指定用户组:# adduser -g class1 st03

更改用户的组帐号:# usermod -g class1 st01

删除用户组:# groupdel class1

用户帐号相关文件和目录

用户帐号信息保存在passwd文件中:/etc/passwd

用户的加密口令保存在shadow文件中:/etc/shadow

用户的宿主目录是home目录中与用户名称相同的目录:/home/teacher

用户的初始配置文件来在skel目录(配置模版):/etc/skel

(9)文件的权限属性

查看文件权限:$ ls -l afile

增加文件属主st01的执行权限(x):$ chmod u+x afile 去除文件属组class1的写权限(w)$ chmod g-w afile 设置其他用户的文件权限为可执行:$ chmod o=x afile chown命令用于设置文件的属主和属组:

命令格式:chown OWNER[:[GROUP]] FILE...

设置文件afile的属主为用户st01:# chown st01 afile

设置文件afile的属组为用户组class1:# chown :class1 afile 设置文件afile的属主为st03,并设置文件的属组为class2 # chown st03:class2 afile

第二天

一、文本编辑器概述

1、文本编辑器的作用:

Linux系统中的配置文件以文本文件的形式保存

Linux管理员需要通过编辑配置文件进行系统管理

2、文本编辑器的分类:

行编辑器与全屏幕编辑器

字符界面编辑器与图形界面编辑

3、Linux中的多种文本编辑器

vi:Linux学习者需要掌握的第一个文本编辑器,大多数Linux系统中缺省使用的文本编辑器

emacs: 用于编辑程序源代码文件的文本编辑器

nano: 在字符界面提供了菜单操作,易用性较好

gedit: GNOME图形环境中的文本编辑器

二、vi编辑器中有三种状态模式

命令模式;输入模式;末行模式

二、vi编辑器的基本使用

1、vi编辑器的启动与退出:

直接进入编辑环境:$ vi

进入编辑环境并打开(新建)文件:$ vi myfile

退出vi编辑环境:输入末行命令放弃对文件的修改,并退出编辑器::q!

2、文件的打开与读取操作

打开新的文件到vi编辑器中::e filename

打开新的文件到vi编辑器中,并放弃对当前文件的修改::e! filename 读取文件内容到当前vi编辑器中::r filename

3、文件保存与另存为:

保存文件:保存对vi编辑器中已打开文件的修改::w

另存为文件:将vi编辑器中的内容另存为指定文件名::w myfile

4、退出vi编辑器的多种方法

未修改退出:没有对vi编辑器中打开的文件进行修改,或已对修改进行了保存,直接退出vi编辑器::q

保存并退出:对vi编辑器中的文件进行保存并退出vi编辑器::wq 不保存退出:放弃对文件内容的修改,并退出vi编辑器: :q!

5、行内快速跳转:

6、文件内行间快速跳转:

7、进入输入模式:

8、输入模式的编辑键操作:

9、删除操作:

10、撤销操作:

11、复制与粘贴操作:

12、字符串查找操作

13、字符串替换操作

在输入vi命令时使用多个文件名作为参数:vi file1 file2 file3 ...

第三天

一、Shell的基本概念:

1、Shell是操作系统与用户进行交互操作的界面

2、Shell与内核交互的方式:

a、直接从键盘输入命令:

b、通过Shell脚本方式执行:

Shell脚本本质上就是把命令行的命令简单组合到一个文件中。

Shell脚本内容包括:Shell内部命令和系统命令

3、Fedora中Shell的使用

a、Fedora中提供了多种Shell程序可供用户选择

文件Shells中保存了Linux系统中可使用的Shell程序列表:/etc/shells

b、在某个Shell程序中可通过执行其他的Shell程序改变用户的当前Shell

[teacher@localhost ~]$ bsh

c、用户默认Shell的设定

用户使用的登录Shell保存在passwd文件的记录中:/etc/passwd

二、Shell变量

1、基本概念

a、Shell提供变量来设置环境参数和保存Shell信息。可以在命令行直接访问

Shell变量,也可以在Shell脚本中引用。

b、Shell变量名可以包含数字,字母和下划线,变量名的开头只准许是字母

和下划线。变量名中的字母是大小写敏感的。为了与命令名相区别,一般建议采用大写字母来表示Shell变量。

c、Shell变量的取值都是一个字符串,赋值采用:“变量名=值”。注意“=”

左右不能有空格!

d、Shell变量的引用:$变量名

2、Shell变量的分类:

(1)用户自定义变量(本地变量):

a、本地变量由用户自己定义,只作用于当前的Shell环境,对于在这个

Shell环境下启动的子Shell进程,它将不能够被有效访问。

b、自定义变量的设置

$ DAY=Sunday // =两边不能有空格

$ DAY=“today is Sunday”//若变量值本身包含空格,则整个字符串

必须用双引号括起来

c、自定义变量的查看与引用

$ echo $DAY//如果变量值含有空格,为保留原有格式应该echo“$DAY”

d、自定义变量的清除

$ unset DAY

e、显示所有本地定义的Shell 变量

$ set

(2)环境变量:

a、环境变量定义用户的工作环境,用户可以在当前shell和任意子shell

中获得它们设置的信息。

b、环境变量必须用export命令导出,使之能够用于全部的Shell环境。

$ export DAY

c、使用env命令查看环境变量

env

d、常用环境变量

USER PWD SHELL HOME PATH HOSTNAME

e、环境变量配置文件

/etc/profile //所有用户登录都会先执行本文件

/etc/bashrc //被用户主目录下的.bashrc调用执行

~/.bash_profile //用户登录时执行,并调用本目录下.bashrc

~/.bashrc //每次打开新的终端时执行,并调用/etc/bashrc

(3)位置参数变量

shell通过位置参数变量来获得用户在命令行上附加的参数。位置参数变量共有l0个:$0 -$9,它们分别标识了用户输入的整个命令行中以空格分隔开的字符串。

(4)预定义变量

(5)用户自定义变量

三、Bash的命令行全功能

1、命令补全功能:

使用Tab键可在命令查找路径中查找匹配的命令,并进行命令拼写的补全2、文件补全功能:

使用Tab键可对文件和目录名进行补全

3、Bash中提供的通配符“?”和“*”

4、命令历史功能的使用:

使用上下方向键浏览已输入命令(历史命令)

5、历史命令的查看:

$ history

6、用户命令历史保存文件:

~/.bash_history

7、命令历史的清除:

$ history -c

四、管道与重定向

1、标准输入输出:

2、重定向操作:

3、输出重定向实例:

a、将标准输入重定向到文件

$ wc //统计从键盘输入的信息,包含的行数、单词数和字符数

$ wc < /etc/passwd

b、将标准输出重定向到文件

$ ls /etc/ > show.ls

c、将标准输出重定向追加到文件

$ ls /etc/sysconfig/ >> show.ls

d、将错误输出重定向到文件

$ cmd 2 > errfile

将标准输出和错误输出重定向到文件

$ ls afile bfile &> errfile

4、管道的使用:

a、管道操作符:|

b、“|”符用于连接左右两个命令,将“|”左边的命令执行结果(输出)

作为“|”右边命令的输入:cmd1 | cmd2

c、在同一条命令中可以使用多个“|”符连接多条命令:

cmd1 | cmd2 | ... | cmdn

五、Shell脚本

1、Shell脚本的概念:

a、Shell脚本程序是Shell命令语句的集合,用于实现特定的功能,类似Windows下.bat批处理文件;

b、Shell脚本程序保存在文本文件中,可以使用文本处理程序进行阅读和编辑;

c、Shell脚本程序是由Shell环境解释执行的,不需要在执行前进行编译;

d、执行Shell程序时,Shell脚本文件需要具有可执行(x)的属性

2、基本脚本编程:

a、使用文本编辑器(vi)建立Shell脚本文件:vi hello.sh

b、脚本中应包括的内容

脚本运行环境设置,指明使用哪种Shell来解释本脚本:

#!/bin/bash 或者#!/bin/sh

注释行以#开始

# Clean command history,清除用户命令历史

脚本语句:Shell命令+系统命令

c、设置脚本文件为可执行属性(+x)

chmod u+x hello.sh

3、脚本程序的运行:

a、使用Shell命令程序执行脚本程序:$ bash hello.sh

b、使用“.”命令执行脚本程序:$ .hello.sh

c、直接执行具有可执行属性的脚本程序

$ chmod +x hello.sh $./hello.sh

4、条件测试:

使用test命令:test 条件表达式

使用括号[ ]:[ 条件表达式]

条件表达式的值为真返回零,为假时返回非零值

注意:条件表达式两边都必须留有一个空格

test string1 = string2

[ string1 = string2]

test $PWD = /home/student

echo $? //回显结果,0-真,非零-假

5、Shell常用条件运算符

六、流程控制:

1、if then else语句:

if语句测试条件,如果测试结果为真(0),则执行if体中的某段语句;

如果为假(1),则执行if体外的语句。

if [ 条件语句1 ] ,then

指令序列1

elif [ 条件语句2 ] ,then

指令序列2

else

指令序列3

fi

2、for循环:

当变量可以在列表中取值时,执行下面的指令序列,循环替换变量的值,直到列表中的值被替换完为止。

for 变量名in 列表;do

指令序列

done

3、until循环:

until在条件为假时执行指令序列,循环直到条件为真。

until 条件;do

指令序列

done

4、while循环:

while在条件为真时执行指令序列,循环直到条件为假。

while 条件;do

指令序列

done

5、case语句:

case 值in

模式1)

指令序列1;;

模式2)

指令序列2;;

模式3)

指令序列3;;

esac

6、函数

a、函数定义:

函数名( )

{

函数体

}

b、函数调用:函数调用之前先定义,脚本中没有函数声明。

c、函数导出:使用“.”运算符将建立的函数导入Shell环境

eg: $ .sh_fun.sh // 函数hello导入Shell (sh_fun.中含有函数hello) $set | grep hello // 使用set查看hello函数

$hello //直接在命令行中调用并运行hello函数

第四天

一、GCC编译器

二、GCC编译器简介:

a、GCC编译器能将C、C++语言源程序、汇编程序编译、链接为可执行的文件。

b、在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可

执行文件和不可执行文件。

c、GCC编译流程分为四个阶段:

预处理:

编译:把高级语言翻译成汇编语言

汇编:把汇编语言翻译成机器语言

链接

1、文件类型

GCC通过后缀来区别输入文件的类别:

.c 为后缀的文件:C语言源代码文件

.a 为后缀的文件:是由目标文件构成的库文件

.C,.cc或.cpp为后缀的文件:是C++源代码文件

.h 为后缀的文件:头文件

.i 为后缀的文件:是已经预处理过的C源代码文件

.ii 为后缀的文件:是已经预处理过的C++源代码文件

.o 为后缀的文件:是编译后的目标文件

.s 为后缀的文件:是汇编语言源代码文件

.S 为后缀的文件:是经过预编译的汇编语言源代码文件

3、GCC 编译流程

a、分四个阶段编译:

预处理:gcc —E hello.c —o hello.i

编译:gcc —S hello.i —o hello.S

汇编:gcc —c hello.S —o hello.o

链接:gcc hello.o —o hello

b、单步完成编译:

gcc hello.c —o hello

c、运行:

./hello 输出:Hello World!

二、GCC 基本用法:

1、gcc [options] [filenames]

其中:options: 编译器所需要的编译选项filenames:要编译的文件名

2、GCC 编译选项:

总体选项;警告和出错选项;优化选项。

a、总体选项:

-c 只是编译不链接,生成目标文件“.o”

-S 只是编译不汇编,生成汇编代码

-E 只进行预编译,不做其他处理

-g 在可执行程序中包含标准调试信息(用于GDB调试)

-ofile 指定输出文件为file

-v 打印出编译器内部编译各过程的命令行信息和编译器的版本

-static 链接静态库

-Idir 在头文件的搜索路径列表中添加dir 路径

eg: gcc –I /home/student/include test.c –o test

-Ldir 在库文件的搜索路径列表中添加dir 路径

-lname 链接名为libname.so的库文件

eg: gcc –L /home/student/lib –lmylib test.c –o test

b、警告和出错选项:

-ansi 输出符合ANSI C标准语法的警告信息

-pedantic 允许发出ANSI C 标准所列的全部警告信息

-Wall 允许发出GCC 提供的所有有用的警告信息

-w 关闭所有警告信息

-Werror 把所有的告警信息转化为错误信息,并在警告发生时终止编译过程c、优化选项:

GCC代码优化是指通过编译选项“-On”来控制代码的生成,进而改善代码的执行性能。对于大程序来说,使用代码优化选项可以大幅度提高代码的运行速度。

-O或者-O1 告诉GCC同时减小代码的长度和执行时间

-O2 告诉GCC除了完成所有-O1级别的优化之外,同时还要进行一些额外的调整工作。比如处理器指令调度等。

-O3 还包括循环展开和其他一些与处理器特性相关的优化工作。

代码优化虽然加速代码的运行速度,但对于调试而言是一个很大的挑战。

一般建议在调试的时候最好不使用任何优化选项,只有当程序在最终发布的时候才考虑对其进行优化。

三、GDB调试器

1、基本概念:

a、基于命令行的工作模式,主要用来调试C和C++程序。

b、通过GDB能在程序运行时动态观察程序的内部结构、变量值和内存的使用

情况。

c、使用GDB调试可执行文件之前,必须使用带-g或者-gdb编译选项的gcc命

令来编译源程序。

编译支持GDB调试的可执行文件: gcc test.c–o test –g

GDB调试:gdb test

2、GDB的作用

GDB主要完成下面四个方面的功能:

启动程序,并且可以设置运行环境和参数来运行指定程序。

可让被调试的程序在你所指定的断点处停住。(断点可以是条件表达式)

当程序被停住时,可以检查此时你的程序中所发生的事。

支持单步调试。

使用GDB调试能帮助检查出程序的逻辑错误,纠正一个错误后可继续调试。

3、GDB使用流程:

查看文件;设置断点;查看断点情况;运行代码;查看变量值;单步运行;

恢复程序运行。

四、GDB基本命令

相关主题
相关文档
最新文档