Linux学习笔记(一)常用命令

一、常用命令

1.1命令格式

command [options][arguments]

command:命令名称; options:选项, 表示命令的执行特性, argument:命令的作用对象

示例:$ rm -r dir

该语句的功能为删除目录dir,其中rm为命令的名称,表示删除文件;-r为选项,表示删除目录中的文件和子目录;dir为命令作用的对象,该对象是一个目录。Linux系统中的命令都遵循以上格式,命令中的选项和参数可酌情缺省

1.2 文件操作命令

1.文件处理命令

常用的文件处理命令有ls、cd、pwd、touch、mkdir、cp、mv、rm、rmdir等,涵盖了文件的属性查看、目录切换、目录查看、删除、复制等功能。

(1)ls

ls命令的原意为list,即“列出”,用于列出参数的属性值息,其命令格式如下:

ls [选项][参数]
ls 显示当前目录下的文件,当参数缺省时,ls命令默认列出当前目录中的内容。
ls -a 显示当前目录下的所有文件信息 .开头为隐藏文件 ..为上一级目录2.文件查看命令

(2)cd

cd命令的原意为change direciory,即更改目录。若执行该命令的用户具有切换目录的权限,cd命令将更改当前工作目录到目标目录。该命令的格式如下:

cd 参数(不可省略)
cd /etc/yum

(3)pwd

pwd命令的原意为print working directory,即打印当前工作目录的绝对路径。该命令可直接使用。

(4)touch

touch命令的主要功能是将已存在文件的时间标签更新为系统的当前时间。若指定的文件不存在,该命令将会创建一个新文件,所以该命令有个附加功能,即创建新的空文件。touch命令的格式如下:

touch 参数
$ ls -l file 
$ touch file 
$ ls -l file 

touch命令的参数可以是文件,也可以是一个目录。

(5)mkdir

mkdir命令的原意为make directory,即创建目录。mkdir命令的格式如下:

mkdir [选项] 参数

mkdir命令的参数一般为目录或路径名。当参数为目录时,为保证新目录可成功创建,使用该命令前应确保新建目录不与其同路径下的目录重名;当参数为路径时,需要保证路径中的目录都已存在或通过选项创建路径缺失的目录。

若路径中的目录不存在 加上-p 选项即可同时创建

(6)cp

cp命令的原意为copy,即复制。该命令的功能为将一个或多个源文件复制到指定的目录,其命令格式如下:

cp [选项] 源文件或目录 目的目录

默认情况下,该命令不能复制目录,若要复制目录,需要同时使用-R选项。

(7)mv

mv命令的原意为move,该命令用于移动文件或目录。若同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则该命令会将前面指定的多个文件或目录复制到最后一个目录中。其命令格式如下:

mv 源文件或目录 目标目录

若该命令操作的对象是相同路径下的两个文件,则其功能为修改文件名

(8)rm

rm命令的原意为remove,功能为删除目录中的文件或目录。该命令可同时删除多个对象,其命令格式如下:

rm [选项] 文件或目录

若要使用rm命令删除目录,需要在参数前添加-r选项。

2. 文件查看命令

文件查看命令主要用于查看文件中存储的内容,常用的文件査看命令有cat、more、head、tail 等。

(1)cat

cat命令的原意为concatenate and display files,即连接和显示文件。cat的功能为将文件中的内容打印到输出设备,该命令的格式如下:

cat 文件名

(2)more

more命令用于分页显示文件内容,其命令格式如下:

more [文件名]/

(3)head

head命令也用于查看文件内容,但该命令可指定只查看文件的前n行。head命令的格式如下:

 head -n filename

(4)tail

tail命令与head命令相反,用于查看文件的后n行内容。tail命令的格式如下:

tail -n filename

其中n为要查看的行数,filename为待查看文件的文件名。

3.权限管理命令

根据用户的权限,Linux系统中的用户大体分为两类:超级用户root和普通用户。其中超级用户拥有操作Linux系统的所有权限,但为保证系统安全,一般不使用超级用户登录,而是创建普通用户,使用普通用户进行一系列操作。为避免普通用户权限过大或权限不足,通常需要由root用户创建拥有不同权限的多个用户或变更某个用户的权限,此时便需要用到一系列的权限管理命令。

常用的权限管理命令有chmod、chown、chgrp等。使用这些命令时往往需要管理员权限,但登录时系统默认的是普通用户,因此我们应先将用户切换到root。切换用户时使用时命令是su。

当然普通用户也可使用权限管理命令,但只能操作属于诙用户的文件。若想对其他用户的文件进行操作,需要先提升自身的权限。提升用户权限的命令为sudo

(1)chmod

chmod命令的原意为change the permissions mode of file,其功能为变更文件或目录的权限。该命令的格式如下:

chmod [augo][+-=] 文件或目录

其中a表示所有用户,u表示用户名user,g表示组名group,o表示其他;+表示添加权限,-表示取消权限,=表示设定权限。

#chmod u+x,g+x b.txt

除了上述方法外,还可以以数值的形式表示权限。

使用数值表示权限时,可以方便地设置某个文件的所有者权限、所在组权限及其他人的权限。不同的权限对应不同的数值:读权限对应的数值为4,写权限对应的数值为2,执行权限对应的数值为1。简单来说,若设置某个文件的权限为777,用表示所有用户对该文件,都有读权限、写权限和可执行权限。

# chmod 754 bxg

(2)chown

chown命令的原意为change the owner of file,其功能为更改文件或目录的所有者。默认情况下文件的所有者为创建该文件的用户或在文件被创建时通过命令指定的用户,但在需要时,可使用chown对文件的所有者进行修改。被命令的格式如下:

chgrp [组名][文件或目录]
#chgrp ct7 bxg
4.文件搜索命令

(1)which

我们所使用的每条Linux命令都以文件的形式保存在系统中,使用which命令可査看命令所在的目录。which命令的格式如下:

which 命令

与which类似,whereis也能找到命令所在的位置。不同的是,which还能找到命令的别名记录,而whereis可以同时展示命令帮助文档所在的路径。

(2)find

find命令可以借助搜索关键字查找文件或目录,该命令的格式如下:

find 搜索路径 [选项] 搜索关键字

其中搜索关键字可以为文件名、文件大小、文件所有者等。find命令搜索目录下所有格文件

(3)locate

locate命令也可借助搜索关键字查找文件或目录,该命令的格式如下:

locate [选项] 搜索关键字

locate的功能与find -name相同,但在速度上,locate要比find命令快很多,因为它不是捜索Linux的整个目录,而是搜索数据库/var/lib/locatedb。使用locate命令査不到最新变动的文件,可以在使用locate命令之前,先使用updatedb命令手动更新数据库。

(4)grep

grep命令用于在文件中搜索与字符串匹配的行并输出,该命令的格式如下:

grep 指定字符 源文件

1.3网路管理与通信命令

1. ifconfig

ifconfig命令的原意为interfaces config,其功能为配置和显示Linux内核中网络接口的参数,该命令的格式为:

ifconfig [参数]

ifconfig命令的参数可以忽略,表示查看本机的网络配置信息。

2. netstat

显示系统中的所有端口。

[ct7 @localhost ~]$ netstat -a

3. ping

ping命令用于测试主机之间网络的连通性,默认情况下该命令会一直打印测试结果(可使用快捷键组合ctrl+D停止打印)。ping命令的格式如下:

ping [选项][参数]

4. write

write命令可使当前用户向另一个用户发送信息(按快捷键ctrl+D结束),该命令的格式如下:

write 用户名

5. wall

wall命令可使用root用户向所有用户(观察ct7的用户)发送信息,以快捷键组合ctrl+D结束,该命令的格式如下:

wall [message]

1.4压缩解压命令

(1)gzip/gunzip

gzip命令用于压縮文件,获得.gz格式的压缩包,压缩后不保存源文件。若同时列出多个文件,则每个文件会被单独压缩。gzip命令的格式如下:

gzip [选项] 文件

使用命令gzip -s file.gz可以解压.gz格式的压缩包,但Linux系统还提供了gunzip命令,该命令也用于解压.gz格式的压缩包,其命令格式如下:

gunzip [选项] 压缩包包名

(2)zip/unzip

zip命令用于压缩文件或目录,获得.zip格式的压缩包,压缩时会保留源文件。该命令的格式如下:

zip [-r] [压缩后文件名称] 文件或目录

zip命令的选项-r表示压缩的是一个目录。

与zip对应的解压命令为unzip,该命令的格式如下:

unzip [选项] 压缩包包名

(3)bzip2

bzip命令用于创建和管理(包括解压缩).bz2格式的压缩包,该命令的格式如下:

bzip [选项] 文件

bzip命令对应的解压命令为bunzip2,bunzip2的命令格式如下:

bunzip 压缩包名

(4)tar

tar命令用于打包多个目录或文件,该命令通常与压缩命令一起使用,其命令格式如下:

tar [选项] 目录

二、Linux常用开发工具

GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言编译器,其初衷是实现基于GNU操作系统的编译。GCC编译器由原来的只能处理C语言文件,扩展为支持Fortran、Pascal、 Java、Objective-C等多种编程语言,现已被大多数类UNIX操作系统采纳为标准的编译器,GCC同样适用于Windows操作系统。

1.GCC编译流程

GCC的编译过程分为4个步骤,分别是预处理、编译、汇编和链接。此处将以名为hello.c的C语言文件为例,对GCC的编译流程进行分析讲解。hello.c文件中的代码具体如下:

# include<stdio.h>
int main()
{
    printf("hello ct7!\n");
    return 0;
}

(1)预处理

预处理阶段主要处理源代码中以#开头的预编译指令和一些注释信息,处理规则如下:

  • 删除代码中的#define,展开所有宏定义。
  • 处理条件编译指令,如#if、#ifdef、#undef等。
  • 将由#include包含的文件插入预编译指令对应的位置,若文件中包含其他文件,同样进行替换。
  • 删除代码中的注释。
  • 添加行号和文件标识。
  • 保留#pragma编译器指令。

预处理所用选项为-E,对hello.c文件进行预处理的命令如下:

[ct7 @localhost ~]$ gcc -E hello.c -o hello.i

其中-o选项的功能是指定文件的文件名,以下各步骤中选项-o的功能与此处相同。经过此步骤之后,会生成一个名为hello.i的文件,此时若查看hello.i文件中的内容,会发现#include一行被头文件stdio.h的内容替换。若源文件中有宏定义、注释、条件编译指令等信息,编译器也会按照上文所述处理规则对其进行处理。

(2)编译

在编译阶段,GCC会对经过预处理的文件进行语法、词法和语义分析,确定代码实际要做的工作,若检查无误,则声称相应的汇编文件。编译所有选项为-S,操作方法如下:

[ct7 @localhost ~]$ gcc -S hello.i -o hello.s

经过此步骤之后,会生成一个名为hello. s的文件。

(3)汇编

该过程将编译后生成的汇编代码转换为机器可以执行的命令,即二进制指令,毎一个汇编语句几乎都会对应一条机器指令。汇编所用选项为-o,操作方法如下:

[ct7 @localhost ~]$ gcc -c hello.s -o hello.o

此时hello.o文件中的内容为机器码。

(4)链接

链接的过程是组装各个目标文件的过程,在这个过程中会解决符号依赖和库依赖关系,最终生成可执行文件。操作方法如下:

$ gcc hello.o -o hello

经过以上4个步骤,最终生成了可执行文件hello。当然在实际使用中,我们通常直接使用gcc命令编译出可执行文件即可。

GCC可以将単个文件编译成可执行文件,也可以编译链接多个文件,生成可执行文件。一般情况下我们不关心编译过程,只关心编译结果,此处只是通过编译步骤中对应的命令讲解了编译的流程。下面将结合实例,就单文件编译和多文件编译分别做出讲解。

2. 单文件编译

以上文给出的hello.c文件为例进行单文件编译,将该文件编译为可执行文件的最简单的方法是在命令行输入如下命令:

$ gcc hello.c

编译过程中,GCC编译器会先将源文件编译为目标文件,再将目标文件链接到可执行文件,之后删除目标文件。编译完成之后,当前目录会生成一个默认名为a.out的目标文件。此时在命令行输入可执行文件名,就会执行该程序并打印执行结果。文件执行命令及执行结果如下:

$ ./a.out

使用gcc命令生成的所有可执行文件的默认名称都是a.out。若想指定可执行文件的名字,可以使用-o选项,假设将编译后生成的可执行文件命名为hello,则在命令行输入的命令如下:

$ gcc hello.c -o hello

3. 多文件编译

当源程序较复杂时,可以将一个源程序分别写在多个文件中,如此便可以独立编译每个文件。下面我们将一个实现整数相加功能的程序分别写在三个文件中,以此来介绍GCC中多文件编译的方法。

假设这三个文件分別为:_ add. h 、_ add.c和_main. c,其中的代码分别如下: (1) _add.h——头文件,加法函数声明

int _add(int a,int b);

(2)_add.c——加法函数定义

#include "_add.h"
int _add(int a,int b)
{
    int c=a+b;
    return c;
}

(3)_main.c——主函数文件

#include<stdio.h>
#include "_add.h"
int main()\
{
    int a=10;
    int b=5;
    int c=_add(a,b);
    printf("c=%d\n",c);
    return 0;
}

则使用gcc编译多个文件的指令如下:

[ct7 @localhost ~]$ gcc _main.c _add.c -o _main

其中_main为生成的可执行文件。执行文件 _main,其结果如下:

[ct7 @localhost ~]$ ./_main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值