天天看点

Linux系统开发: 基础命令学习

一、Linux系统介绍

Linux是一套免费使用和自由传播的Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。支持32位和64位硬件,Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统;Linux存在着许多不同的版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机,可移植性较强。

Linux系统开发: 基础命令学习

Linux目录结构

/bin 该目录中存放Linux的常用命令,在有的版本中是一些和根目录下相同的目录。

/boot 该目录下存放的都是系统启动时要用到的程序,当用lilo引导Linux时,会用到这里的一些信息。

/dev 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,你可以访问这些外部设备,与访问一个文件或一个目录没有区别。例如在系统中键入“cd /dev/cdrom”,就可以看到光驱中的文件;键入“cd /dev/mouse”即可看鼠标的相关文件。

/etc 该目录存放了系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等。

/sbin 该目录用来存放系统管理员的系统管理程序。

/home 如果建立一个名为“xx”的用户,那么在/home目录下就有一个对应的“/home/xx”路径,用来存放该用户的主目录。

/lib 该目录用来存放系统动态连接共享库,几乎所有的应用程序都会用到该目录下的共享库 。

/lost+found 该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在这里。

/mnt 该目录在一般情况下也是空的,你可以临时将别的文件系统挂在该目录下。

/proc 可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的

/root 如果你是以超级用户的身份登录的,这个就是超级用户的主目录

/tmp 用来存放不同程序执行时产生的临时文件。

/usr 用户的很多应用程序和文件都存放在该目录下。

/usr/X11R6:X-Window目录;

/usr/src:Linux源代码;

/usr/include:系统头文件;

/usr/lib:存放常用动态链接共享库、静态档案库;

二、Linux基本命令介绍

2.1 su命令:切换用户。

语法:su [用户名]  [ ]表示可选

linux下有两种帐号:

1.root--超级用户帐号(系统管理员),使用这个帐号可以在系统中做任何事情。

2.普通用户--这个帐号供普通用户使用,可以进行有限的操作。

su命令的常见用法是变成超级用户,如果普通用户发出不带用户名的su命令 ,则系统提示输入根口令,输入之后则可切换为根用户。

Linux系统开发: 基础命令学习

2.2 ls命令:遍历目录

功能:ls是英文单词list的简写,其功能为列出目录的内容。这是用户最常用的一个命令之一,因为用户需要不时地查看某个目录的内容。该命令类似于DOS下的dir命令。

语法:ls [选项] [目录或是文件]

说明:对于每个目录,该命令将列出其中的所有子目录与文件。对于每个文件,ls将输出其文件名以及所要求的其他信息。默认情况下,输出条目按字母顺序排序。当未给出目录名或是文件名时,就显示当前目录的信息。

常用选项:

Linux系统开发: 基础命令学习

用ls - l命令显示的信息中,开头是由10个字符构成的字符串,其中第一个字符表示文件类型:

- 普通文件、d 目录 、l 符号链接、b 块设备文件、c 字符设备文件、p 命名管道(FIFO)、s  socket文件

后面的9个字符表示文件的访问权限,分为3组,每组3位。

第一组表示文件所有者的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读、写和执行权限。

各权限如下所示:

r 读        (4)

w 写      (2)

x 执行    (1) 对于目录,表示进入权限。

- 没有设置权限。

2.3 man命令:查看帮助

功能:用于查看命令、函数、头文件的使用帮助信息。

用法:  man  [页码]  <命令、函数名称、头文件名称>

页码一般为1-7页。如果当前页看不到想要的信息,可以切换到其他页查看。

2.4 cd命令:切换目录

功能:切换目录

语法:cd [目录路径]

说明:该命令将当前工作目录切换至指定的目录。若没有指定目录路径, 则回到用户的主目录~。为了改变到指定目录,用户必须拥有对指定目录的执行和读权限。

常用的目录表示符号:

cd ..   到父目录,即上一级目录,相当于“向上”

cd -   到上一次目录,相当于“后退”

cd /   到根目录

cd ~或者只写cd  回到到用户主目录下

2.5 mkdir命令:创建目录

功能:创建一个目录

语法:mkdir [选项] dirname

说明:该命令创建由dirname命名的目录。要求创建目录的用户在当前目录中 (dirname的父目录中)具有写权限,并且dirname不能是当前目录中已有的目录或 文件名称。

参数:

- m 对新建目录设置存取权限。也可以用chmod命令设置。

- p 可以是一个路径名称。此时若路径中的某些目录尚不存在, 加上此选项后, 系统将自动建立好那            些尚不存在的目录,即一次可以建立多个目录。

创建多层目录示例:mkdir  ./dir1/dir2/dir3  -p

2.6 touch命令:创建普通文件

功能:创建一个文件。

语法:touch [文件名称]

2.7 rm命令:删除文件/目录

功能:在linux中创建文件很容易,系统中随时会有文件变得过时且毫无用处。用户可以用rm命令将其删除。该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均保持不变。

语法:rm [选项]  <文件或者目录>

说明:如果没有使用- r选项,则rm不会删除目录。

- f 忽略不存在的文件,从不给出提示。

- r 指示rm将参数中列出的全部目录和子目录均递归地删除。

- i 进行交互式删除。

-v 输出已经删除的文件

使用rm命令要格外小心。因为一旦一个文件被删除,它是不能被恢复的。为了防止此种情况的发生,可以使用rm命令中的 -i选项来确认要删除的每个文件。如果用户输入y,文件将被删除。如果输入任何其他东西,文件将被保留。

2.8 cat命令:查看文件内容

功能:查看文件内容

语法:cat [选项] [文件]

-b 对非空输出行编号

-E 在每行结束处显示$

-n 对输出的所有行编号

-s 不输出多行空行

2.9 pwd命令:显示工作目录

功能:在Linux层次目录结构中,用户可以在被授权的任意目录下利用mkdir命令创建新目录,也可以利用cd命令从一个目录转换到另一个目录。然而,没有提示符来告知用户目前处于哪一个目录中。要想知道当前所处的目录,可以使用pwd命令,该命令显示整个路径名。

语法:pwd

说明:此命令显示出当前工作目录的绝对路径。

举例:pwd

根目录以开头的“/”表示。如果pwd后面什么都没有,则显示当前所在位置。如果屏幕信息很多,用clear可以清除。

2.10 cp命令:拷贝文件/目录

功能:将给出的文件或目录拷贝到另一文件或目录中。

语法:cp  [选项]  <源文件或目录>  <目标文件或目录>

说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。

- a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录。

- d 拷贝时保留链接。

- f 删除已经存在的目标文件而不提示。

- i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。

- r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。一般使用-a参数。

举例:

Linux系统开发: 基础命令学习

2.11 mv命令:改名、移动、文件/目录

功能:为文件或目录改名或将文件由一个目录移入另一个目录中。

语法:mv [选项]  <源文件或目录>  <目标文件或目录>

说明:视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。

-i 交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答y或n,这样可以避免误覆盖文件。

-f 禁止交互操作。在mv操作要覆盖某已有的目标文件时不给任何指示,指定此选项后,i选项将不再起作用。

如果所给目标文件(不是目录)已存在,此时该文件的内容将被新文件覆盖。为防止用户在不经意的情况下用mv命令破坏另一个文件,建议用户在使用mv命令移动文件时,最好使用i选项。

2.12 chmod命令:修改文件/目录权限

功能:改变文件或目录的访问权限

语法:chmod  [权限]  <文件或者目录>

通过ls -l命令可以查看目录或者文件的详细信息,其中第2~10个字符代表了文件的访问权限,当中的每3个为一组,左边三个字符表示所有者权限,中间3个字符表示与所有者同一组的用户的权限,右边3个字符是其他用户的权限。这三个一组共9个字符,代表的意义如下:

Linux系统开发: 基础命令学习

其中的权限可以使用数字的组合方式进行表示:

Linux系统开发: 基础命令学习

数字设定的关键是取值,一开始许多初学者会被搞糊涂,其实很简单,我们将rwx看成二进制数,如果有则有1表示,没有则有0表示,那么rwx r-x r- -则可以表示成为:111 101 100

再将其每三位转换成为一个十进制数,就是754。

例如,我们想让123.txt这个文件的权限为:

Linux系统开发: 基础命令学习

我们先根据上表得到权限串为:rwx-rw-rw--,那么转换成二进制数就是111 110 100,再每三位转换成为一个十进制数,就得到764,因此我们执行命令:

[root@xiaolong test_code]# chmod 764 123.txt

2.13 ln命令:建立符号链接

ln连接文件或目录,分为软链接和硬链接。

软连接语法:ln -s <源文件> <目标文件> (删除源文件之后,链接变成无效的了),相当于快捷方式。

硬链接语法:ln <源文件> <目标文件>(删除源文件之后,目标没有影响)

#ln -s a.txt p创建软链接之后通过ls -l命令,可以查看到p带有一个箭头指向a.txt。

2.14 eog命令:查看图片

功能:打开图片浏览器查看图片。

语法:eog  <图片文件>

例如:eog 123.png

2.15 echo命令:输出调试语句

功能:echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。

语法:echo [参数] <输出的数据>

-n :表示在最后输出时不自动换行。

说明:使用echo输出字符串时,双引号会自动省略掉。

(1)示例:

Linux系统开发: 基础命令学习

以上两条命令输出的效果一样。

(2)示例:如果想要显示符号,需要使用转义符号。

Linux系统开发: 基础命令学习

2.16 重定义到文件

在终端中常用的重定义符号为: > 和 >>

其中:>符号表示覆盖、>>符号表示追加。

示例:

Linux系统开发: 基础命令学习

2.17 du命令:查看磁盘/文件的大小

功能:查看文件的大小信息。

用法: du [参数]  <文件名称>

常用参数如下:

-k 用1024字节单位计算块数。

-h 选择合适的单位计算大小。

-b 选择字节单位计算大小。

三、文件编辑器相关命令介绍

在linux下常用的文本编辑器命令有: vi、vim、gedit等。

其中vi与vim命令是基于命令行的编辑器。gedit命令是基于鼠标键盘的编辑器,类似于windows下的记事本。

3.1 gedit编辑器介绍

gedit编辑器用法示例:

Linux系统开发: 基础命令学习

打开的界面如下:

Linux系统开发: 基础命令学习

设置显示行号:

Linux系统开发: 基础命令学习

打开文件时,如果需要进入到文件的指定行位置,可以在命令的最后面写上需要进入的行号。

Linux系统开发: 基础命令学习

3.2 vim编辑器介绍

vim分为两种状态,即命令状态和编辑状态,在命令状态下,所键入的字符系统均作命令来处理,如:q代表退出,而编辑状态则是用来编辑文本的。当你进入vim时,会首先进入命令状态。在命令状态下,按”i”(插入)或”a”(添加)可以进入编辑状态,在编辑状态,按ESC键进入命令状态。

插入文本:

a              从光标后面开始添加文本

A             从光标所在行的末尾开始添加文本

i               从光标前面开始插入文本

I              从光标所在行的开始处插入文本

o               在目前光标所在的下一行处插入新的一行

O              在目前光标所在处的上一行插入新的一行

s               删除游标所在字符,并进入编辑模式

S              删除游标所在的行,并进入编辑模式

r               输入字符,取代光标所在的那一个字符

R              一直取代光标所在的字符,直到按下 ESC 为止

删除与修改:

x              删除光标处的字符

dd            删除光标所在的整行

3dd          删除光标所在行以及下面的两行

D或d$   删除光标到行尾的文本,常用语删除注释语句

d^或d0   删除光标到行首的文本

光标的移动:

h 或 向左方向键(←) → 光标向左移动一个字符

j 或 向下方向鍵(↓) → 光标向下移动一个字符

k 或 向上方向鍵(↑) → 光标向上移动一个字符

l 或 向右方向鍵(→) → 光标向右移动一个字符

w              光标往后移一个字

b               光标往前移一个字

^              光标移动到行首

$              光标移动到行尾

Ctrl+f     向下翻一页  forward

Ctrl+b      向上翻一页  back

Ctrl+d     向下翻半页  down

Ctrl+u     向上翻半页  up

gg             光标定位到文档头

G              光标定位到文档尾

H              光标定位到当前页首

L              光标定位到当前页的最后一行的行首

[n]+         光标向后移动n行,[n]表示一个整数,比如10+

[n]-          光标向前移动n行,[n]表示一个整数,比如10+

[n]G         光标定位到第n行行首, [n]表示一个整数,比如10+

查找与替换:

/[str]    查找字符串str,[str]表示要查找的字符串,回车后会加亮显示所有找到的字符串,命令n移动到下一个找到的字符串,命令N移动到上一个找到的字符串

示例:  /hello

块操作:  

       v               可视化块选择状态,选中块之后,可以对块进行删除(d),复制(y),剪切(x)

       u               撤销上次操作

       ctrl + r     恢复上次操作

结束编辑:

       :q             在未修改文档的情况下退出

       :q!            放弃文档的修改,强行退出

       :w             保存

       :wq          保存并退出

其他:

       :help 命令       查看该命令的帮助提示

       :%!xxd            十六进制模式

       :%!xxd -r         返回文本模式

如果在编辑过程中不小心按了Ctrl+s,vi会处于僵死状态,按Ctrl+q可以恢复。

       执行 vim  +3 main.c      //表示定位到main.c的第3行

       执行 vim  +/printf main.c  //表示定位到第一个printf处

       在命令模式下输入:new 2.c   //表示再打开一个vi,是横向的 用vnew 2.c 表示纵向

       进行切换用Ctrl+w然后再按w即可切换

在命令模式中输入gg=G可以自动对齐

配置vim显示行号

在/etc/vimrc文件中加上以下代码:

Linux系统开发: 基础命令学习

四、gcc命令基本使用

在linux系统下通常使用gcc作为主要编译器。GCC原名为 GNU C语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又扩展能够支持更多编程语言。

使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,这里只介绍其中最基本、最常用的参数。

GCC最基本的用法∶ gcc [参数] [文件名称]

常用的参数如下

-c 只编译:不链接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。

-o output_filename:确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。

五、解压缩命令介绍

Linux下最常用的打包程序是tar命令,使用tar打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的,生成tar包后,就可以用其它的程序来进行压缩了。

5.1 tar命令介绍        

功能:tar是一个压缩解压工具。利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案,如软盘。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。

语法:tar  [主选项+辅选项]  <目标文档>  <源文件或者目录>

使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。

c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。

r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中。

t 列出档案文件的内容,查看已经备份了哪些文件。

u 更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后。

x 从档案文件中释放文件。

注意:c/x/t 仅能存在一个!不可同时存在!

辅助选项:

b 该选项是为磁带机设定的。其后跟一数字,用来说明区块的大小,系统预设值为20(20*512 bytes)。

f 使用档案文件或设备,这个选项通常是必选的。请留意,在 f 之后要立即接档名喔!不要再加参数!

k 保存已经存在的文件。例如我们把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖。

m 在还原文件时,把所有文件的修改时间设定为现在。

M 创建多卷的档案文件,以便在几个磁盘中存放。

v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。

w 每一步都要求确认。

z 用gzip来压缩/解压缩文件,后缀名为.gz,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。

j 用bzip2来压缩/解压缩文件,后缀名为.bz2,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。

5.2 tar命令解压/压缩使用范例

将/test目录下的所有文件打包为test.tar文件。

Linux系统开发: 基础命令学习

注意:如果打包的文件或者目录是绝对路径,可能会出现提示:tar: 从成员名中删除开头的“/”

在参数中加上-P即可消除。

Linux系统开发: 基础命令学习

解压打包的.tar文件

Linux系统开发: 基础命令学习

更新文件

就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后。

Linux系统开发: 基础命令学习

列出已经打包的文件,可以用于查看已经备份了哪些文件。

Linux系统开发: 基础命令学习

使用gzip来压缩/解压缩文件

Linux系统开发: 基础命令学习

使用bzip2来压缩/解压缩文件

Linux系统开发: 基础命令学习

5.3 ZIP格式压缩/解压

linux下提供了zip和unzip程序对ZIP格式压缩包进行处理,zip是压缩程序,unzip是解压程序。它们的参数选项很多,下面只做简单介绍。

将所有.jpg的文件压缩成一个zip包

Linux系统开发: 基础命令学习

将all.zip中的所有文件解压出来

Linux系统开发: 基础命令学习

常用参数:

-r 递 归处理,将指定目录下的所有文件和子目录一并处理。

压缩指定目录下的所有文件

Linux系统开发: 基础命令学习

-g:产生符号调试工具(GNU的gdb)所必要的符号信息,要想对源代码进行调试,我们就必须加入这个选项。

-O:对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、链接的速度就相应地要慢一些。

-O2:比-O更好的优化编译、链接,当然整个编译、链接过程会更慢。

-E:仅执行编译预处理;

-S:将C代码转换为汇编代码;

Linux系统开发: 基础命令学习

编译时指定库与头文件路径

-L:指定动态库路径。示例:gcc test.c -o app -L/usr/lib

-I: 指定头文件存放的路径。示例:gcc test.c -o app -I/usr/include

-l: 指定库名称。示例:示例:gcc test.c -o app -lpthread