前言:
在说基本指令前我们先要了解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,他会在根目录下一个个的找,直到全部遍历完后为止



































