Linux的基本指令

前言:

在说基本指令前我们先要了解Linux如何创捷一个用户

Linux与windows都有一个特点:多用户操作系统,即一台Linux可以被多用户操作系统

adduser

adduser 用户名

用来创建用户

每⼀次新建⼀个用户都会在/home目录下为新用户创建新的工作作目录,⽬录以新用户名称命名

但对于root用户,root用户在安装操作系统的时候,就已经内置了工作目录: /root

此时我们可以在home目录下找到创建的user1

passwd

passwd 用户名

修改用户的密码,如果直接passwd,则默认修改root用户的密码

需要输入两次密码,此外在输入时不会显示你输入了多少位数.

ssh

ssh 用户名@ip

当我们创建用户后,可以在另一台linux下登录该用户,从而实现一台Linux被多用户操作.

输入后系统会弹出一个让你输入密码的页面(如下xhell的)

此时我们便登录上user1用户上了

我们在user1上不可以访问root目录,因为root属于超级管理员,而user1属于普通用户

userdel

userdel -r 用户名

加上-r的原因是要递归删除该用户下的全部目录与子文件.

此时home目录下的用户user1则被删除.


ls命令

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

功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息.

常用选项:

  • -a列出目录下的所有文件,包括以 . 开头的隐含文件
  • -d将目录像文件⼀样显示,而不是显示其下的文件。如:ls ‒d 指定目录
  • -l列出文件的详细信息

相关示例

对于普通的ls,其演示如下

显示zhang目录下的所有文件

在linux中,目录==文件夹, 一个文件是由内容与属性构成,ls就是对文件的属性进行操作,文件名就是文件的其中一个属性.

加上-l,会显示该目录下文件的详细信息

对于上图,当一个为 - 时,代表其为普通文件

如果为d时,代表其为一个目录.

如果为c时,代表一个字符文件,键盘,显示器,终端都是字符文件

如果为b时,代表块文件,磁盘

-a,会显示目录下的隐藏文件

对于上图,.代表是当前目录,..代表上级目录

此外,当我们想隐藏一个文件时,可以在文件名前加上.

-d,目录也属于一个文件,因此我们也可以查看一个目录的信息,

选项也可以结合使用

pwd命令

用法:pwd

功能:显示当前所在的目录

相关示例:

/root/zhang 是当前目录,相对于根目录下的位置.

cd命令

用法:cd 目录名

功能:改变工作目录。将当前工作目录改变到指定的目录下

任何一个linux用户,用特定的用户名登录时,默认在家目录下.

在进行讲解cd命令前我们先要了解下面的知识

  • Linux系统中,磁盘上的文件和目录被组成⼀棵目录树,每个节点都是目录或文件.其中普通文件一定是目录树的叶子节点,目录可能是叶子(空目录),也可能是路上节点.
  • 理解路径存在的意义:树状组织方式,都是为了保证快速定位查找到指定的文件,而定位文件就需要具有唯⼀性的方案来进行定位文件。其中任何⼀个节点,都只有⼀个父节点,所以,从根目录开始,定位指定文件,路径具有唯⼀性.如下
  • 绝对路径:一般从/开始,不依赖其他目录的定位文件的方式.例如:上图/root/zhang就是绝对路径
  • 相对路径:相对于当前用户所处目录,定位文件的路径方式.如下,../li 是在当前目录下相对于li目录的位置
  • 绝对路径⼀般不会随着用户的路径变化而丧失唯⼀性,一般在特定服务的配置文件中经常被使用,相对路径 因为它的便捷性,一般在命令行中使用较多

linux的相关目录图

示例:

返回上一级目录

绝对路径定位目录或者文件

相对路径定位目录/文件

快捷返回家目录

通过cd ~

快速返回上一次所在的目录

通过cd -

stat命令

stat 文件名

查看一个文件的状态

相关示例

对于下面三给时间

Access(访问时间):指文件数据最后一次被读取的时间.

Modify:文件内容最后一次被修改的时间

Change:文件属性最后一次被修改的时间

注:当内容被改变时,属性也会随之发生变化,因为其内容的内存会增大或减小,此外如果正常访问文件Access时间变更不会带动Change时间变更,但如果使用touch更改Access时间,change时间会更随变化.

touch命令

语法: touch [选项]... 文件...(可选中多个文件)
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建⼀个不存在的文件.

常用选项:

  • -a : 改变access time
  • -c : 改变modification time

示例

对于普通touch的使用

可以用touch创建普通文件

对于-a的使用

可以修改文件的Access time,但是由于主动修改,文件属性发生变化,从而导致Change time时间发生变化

对于-c的使用

注意:Linux中是不看后缀的符号的,但是Linux所用的一些工具需要看后缀

tree命令

在使用前,我们需要对其进行提前下载,通过下方指令

复制代码
yum install -y tree

语法:tree

功能:以树状图形式显示当前目录的结构

示例:

tree以当前目录为根,以树状图形显示其下文件与目录

也可以指定相关的目录

mkdir命令

语法:mkdir [选项] dirname...(可选中多个文件/目录)

功能:创建一个名为dirname的目录

常用选项:

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

示例:

创建一个目录,一个文件ll下如果开头为d则为目录文件


如果想多层目录创建需要加上 -p的选项

不加-p选项

加-p选项

rmdir命令(不常用)

rmdir是⼀个与mkdir相对应的命令,mkdir是建立目录,而rmdir是删除命令

语法: rmdir 选项 目录名(可选中多个目录)

功能:删除空目录

适用对象:具有当前目录操作权限的使用者

常用选项:

-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录⼀起删除

示例

remdir


remdir -p

指定路径中有不为空的路径,便⽆法删除

rm命令

语法: rm 选项 目录/文件(可选中多个文件/目录)

功能:删除文件或目录

适用对象:所有使用者

常用选项

  • -f即使文件属性为只读(即写保护),亦直接删除
  • -i删除前逐⼀询问确认
  • -r(recursion)删除目录及其下所有文件,即递归删除

示例:

删除普通文件

删除目录-r

我们发现在输入命令后,其会一直询问是否删除,此时我们可以加上-f便可直接删除

alias命令

用法alias 别名='命令'

功能:设置命令的别名

举例:

对于ls -l为什么可以省略为ll,就是系统使用了alias给ll为ls -l起了别名,我们可以直接打alias来查看

起别名如下,但这个别名只有系统这一次时生效当关闭在打开后,系统会自动将该别名删除

此外,命令的本质是文件,命令==可执行程序.

命令存于/usr/bin中,我们可以通过ll /usr/bin找到ls命令来看其的本质

我们可以看到他们实际上都是一个文件

man命令

man命令的使用需要提前下载

复制代码
yum install -y man-pages

不同linux平台的下载方式不同,这里主要是centos7的下载方式
用法: man [选项] 命令

功能:查询相关指令的用法

常用选项:

  • -k 根据关键字搜索联机帮助
  • num 只在第num章节查找
  • -a 将所有章节的都显示出来,比如man printf它缺省从第⼀章开始搜索,找到就停止,用a选 项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕

示例:

复制代码
man man

下方的1-9是man命令的目录,这里主要说明前三种目录的作用

  • 1是普通的命令
  • 2是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调⽤这个函数,需要加什么头文件)
  • 3是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件

man命令默认从第一个目录开始寻找,直到找到第一个,我们以printf命令为例子

复制代码
man printf

该printf是linux的命令,并不是c中的命令,两者只是名字相同,没有任何关联

如果我们想查找C中的printf命令,需要带上相关的目录,即为man -num的用法

复制代码
man 3 printf

cp命令

用法:cp [选项] 源文件或目录 (可选中多个文件/目录)目标文件或目录

功能:复制文件或目录

注:如同时指定两个以上的⽂件或目录,且最后的目的地是⼀个已经存在的目录,则它会把前面指定 的所有文件或目录复制到此目录中

常用选项

  • -f 强行复制文件或目录,不论目的文件或目录是否已经存在(当目标文件或目录存在时,使系统不去询问是否复制,直接执行)
  • -i 覆盖文件之前先询问用户(系统中的cp实际是通过alias为cp -i设置的别名
  • -r 递归处理,将指定目录下的文件与子目录⼀并处理。若源文件或目录的形态,不属于目录或符号链接,则⼀律视为普通文件处理.(即复制目录时需要加上

示例:

  • 复制普通文件到目录
  • 复制普通文件到不存在的文件下 ,此时目标文件并不存在,此时该目标文件即为新文件的文件名
  • 复制目录到不存在的目录下,复制目录需要借助-r,其本质也是借助一层层的递归完成的

此时我们发现复制目录,如若不存在也是直接复制一份到该目录

  • 复制目录到已经存在的目录下

mv命令

语法:mv [选项] 源文件或目录(可选中多个文件/目录)目标文件或目录

功能:可以用来移动文件或者将文件改名

常用选项:

  • -f :force强制的意思,如果⽬标文件已经存在,不会询问而直接覆盖
  • -i :若目标文件已经存在时,就会询问是否覆盖

举例:

修改名称,当第⼆个参数类型是文件时,mv命令完成文件重命名

修改文件名称

修改目录名称


移动文件当第⼆个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中

echo命令

语法:echo '文本'

功能:用于在文件中输出文本或变量值

常用选项:

  • -n 不换行 默认情况下,echo 会在输出后添加换行符,使用 -n 可以禁止换行

举例:

此处明明在终端输出,为什么要说是在文件中输出的呢,因为终端实际上也是一个文件,是**存在于/dev/pts/用户名中,**可以通过下方实验证明终端也是文件

此时这个0就是我们现在所对应的终端文件,向该文件中输入内容会在终端中打开.

此外,我们也可以通过下方实验来证明

如果我们打开两个同一账号的系统,每登录一个就会多出一个文件

向1输入时,会在另一台机器终端上打印出


在linux中一切皆文件,包括我们所了解的键盘与显示器,在运行时,系统会默认打开stdout,stdin,stderr

如何理解我们所写的程序运行时系统帮我们打开呢?

系统在调用我们的main函数前会先调用三者打开相关文件,随后才调用我们的main函数

为什么要帮我们打开这些文件?

方便操作,因为我们所写程序本质上是为了看输出结果,如果不去打开,需要我们主动去写这些打开文件的操作.

怎么不打开其他文件?

因为打开这三个文件,已经够我们做基础操作了,如果需要可以我们自行打开其他文件.

cat命令

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

功能:显示目标文件的内容

常用选项:

  • -b 对非空输出行编号,空行不做编号
  • -n 对输出的所有行编号
  • -s 不输出多行空行

举例:

加上-n后,对每一行都进行编号

加上-b后,对于空行不做编号处理

加上-s后,如果空行过多则只输出一个空行

重定向符

> 输出重定向

>> 输出追加符

< 输入重定向

输出重定向

我们在echo一个字符串后默认会输出在终端上,如果我们想让其更改输出的位置需要用上输出重定向符号,如下:

此时我们发现echo输出的内容到2.txt中了,此外输出重定向还有着其他功能

  • 如果后续文件不存在则新建文件
  • 如果文件内有内容则会先清空,后写入

因此我们也可以通过该功能来清空一个文件的内容

因为我们可以得知,输出重定向实际就是以w的形式处理文件

输出追加符

如果我们想要在一个文件后面追加一些内容,不给前面内容清空 ,我们便可以采用**输出追加符>>**来为文件后面追加内容,如下:

输出追加符是以a的形式处理文件

输入重定向

如果我们直接输入一个cat不带任何文件,那么终端会将我们的键盘当作输入文件,键盘打入什么便会输出什么,因此我们可以得知cat本质是向终端输入内容

所以,我们将2.txt给cat则会在终端上输出2.txt的内容

more命令(不常用)

语法:more [选项] [文件名]

功能:more命令,功能类似cat

常用选项:

  • -n指定输出行数

举例

cpp 复制代码
more temp.txt

此时会输出一页内容(cat是一口气输出完文件中的内容)

回车是向下翻一行,空格是翻一页,不能通过上下键翻阅,q退出文件

less命令

语法: less [参数] 文件

功能:less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件

选项:

  • -i忽略搜索时的大小写
  • -N显示每行的行号

需要在文件内部使用

  • /字符串:向下搜索"字符串"的功能
  • ?字符串:向上搜索"字符串"的功能
  • n:重复前⼀个搜索(与/或?有关)
  • N:反向重复前⼀个搜索(与/或?有关)

举例:

cpp 复制代码
less temp.txt

回车是向下翻一行,空格是翻一页,能通过上下键翻阅,q退出文件,此外文件不会一股脑打开,只会打开该页,如果需要后续内容,往下翻的同时系统会自动打开接下来内容.

在内部输入相关的指令,会进行其相应的操作

会向上查找带有6的数

head命令

语法: head [参数] [文件]

功能: head用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。

选项:

-n 显示的行数

举例:

加上-n,n可以为任何数,下图为显示开头的5行信息

tail命令

语法: tail [参数] [文件]

功能:用于显示指定文件末尾内容,不指定文件时,作为输入信息进⾏处理。常⽤查看日志文件。

选项:

  • -f 实时监控文件内容的变化(输出后10行后,进入死循环,每当文件出现新的变化,将其继续打印出来)
  • -n 显示的行数

举例

加上-n,n可以为任何数,下图为显示最后的5行信息

如果我们想在这100个数中获取到50-69我们应该如何操作呢?

法一:

法二:需要借助 |(管道)来帮助我们

date命令

用法: date [OPTION]... [+FORMAT]

相关格式选项

使用者可以设定欲显示的格式,格式设定为**⼀个加号后接数个标记,如:date +%Y:%m:%d**

  • %H:小时
  • %M:分钟
  • %S:秒
  • %X:相当于%H:%M:%S
  • %d:日
  • %m:月份
  • %Y:完整年份
  • %F:相当于%Y-%m-%d

举例:

如果不带任何的选项,输出的就是系统的格式

带上相关的选项

注意的是在+号必须要带上,选项中间的符号可以随意添加

除了上述显示时间的功能,还可以通过date修改时间

  • date -s//设置当前时间,只有root权限才能设置,其他只能查看。
  • date -s20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
  • date -s 01:01:01 //设置具体时间,不会对⽇期做更改
  • date -s"01:01:01 2008-05-23″ //这样可以设置全部时间
  • date -s "01:01:01 20080523″ //这样可以设置全部时间
  • date -s "2008-05-23 01:01:01″ //这样可以设置全部时间
  • date -s "20080523 01:01:01″ //这样可以设置全部时间

时间戳

Unix时间戳是从1970年1⽉1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒

时间戳可以转化为当地的相应时间,从而解决了世界各国因时差而导致的问题.

此外,用户在出现问题时,可以通过时间戳来查用户相关的日志,从而可以发现在什么时间出现的问题

时间->时间戳:date +%s

时间戳->时间:date -d@1508749502

举例:

Cal命令(基本上没用)

命令格式: cal 参数 [年份]

功能:用于查看日历等时间信息,如只有⼀个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份

常用选项:

  • -3显示系统当年前⼀个月,当前月,下⼀个月的月历
  • -j显示在当年中的第几天(⼀年日期按天算,从1月1号算起,默认显示当前月在⼀年中的天数)
  • -y显示当前年份的日历

举例:

单一个cal

cal -y

cal -j

cal -3

find命令

语法: find pathname -options

功能:用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)

常用选项

  • -name 按照文件名查找文件

举例:

查找根目录下后缀是txt的文件

在根目录下查找ls,他会在根目录下一个个的找,直到全部遍历完后为止

相关推荐
zincsweet10 小时前
自制 Linux 库文件:从编译.o 到部署.a/.so 的完整流程
linux
手可摘星辰的少年10 小时前
使用QEMU启动自编译Linux内核并挂载ext4实验盘
linux
.柒宇.10 小时前
RHEL 10.1 从零部署 Ollama + Gemma4:e4b + Hermes Agent
linux·ai·aigc·agent·hermes agent
小猫咪0110 小时前
Linux 用户和用户组管理:useradd、passwd、sudo 实战
linux
kyle~10 小时前
ROS2 --- RMW(ROS Middleware Interface)
linux·c++·机器人·ros2
betazhou10 小时前
电科金仓数据库V9版本Linux版本安装体验
linux·数据库·python·kingbase·电科金仓
qq_4107321710 小时前
嵌入式开发-memcpy与memmove 技术详解
java·linux·开发语言·嵌入式硬件
cui_ruicheng10 小时前
Linux网络编程(八):基于TCP实现CommandServer
linux·服务器·网络·tcp/ip
夹芯饼干11 小时前
Linux第十三周配置网络
linux·运维·服务器