所有的指令不要强制记忆,选项要多多查一下,多多练习使用即可。
一、Linux简单介绍
Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。严格来讲, Linux只是操作系统内核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统,它包括GUI组件和许多其他实用工具。
linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多企业级的项目(c/c++/php/python/java/go)都会部署到Linux/unix系统上。 目前市面上常见的操作系统有Linux、Windows、iOS、Android等。
linux在服务器领域的应用是最强的。因为linux免费、稳定、高效等特点在这里得到了很好的体现,尤其在一些高端领域(C++/Java等)尤为广泛。 同时在嵌入式领域、个人桌面领域、大数据/云计算也有广泛的应用。
Linux安装:Linux可以采用虚拟机或云服务器的方式来运行,并用Xshell远程登录。网上教程很多,在此省略。
1.1.Linux的目录结构
不同于Windows,linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/” ,然后在此目录下再创建其他的目录。这些目录的名字是不可以更改的。
目录结构和命令行对Linux的学习非常重要,因为在实际生产中是没有图形化界面的,只有一个控制台窗口,如果对目录结构不熟悉很容易蒙圈。
Linux下一切皆是文件,对于硬件,Linux也会映射成文件来进行管理。
1.2.常见的具体目录结构
/bin
是binary的缩写,这个目录下存放着Linux下最经常使用的命令。
/sbin
s就是super user的意思,这个目录下存放的是权限比较高的指令,也就是系统管理员(root)使用的指令。
/root
该目录为系统管理员,也称作超级权限者(root)的用户主目录。
/lib
系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/etc
所有的系统管理所需要的配置文件和子目录,安装的所有程序的配置文件默认放在这个目录下面。
/usr
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。
/boot
存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
/tmp
用来存放一些临时文件。
/dev
类似于windows的设备管理器,把所有的硬件用文件的形式存储
/media
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别I后,linux会把识别的设备挂载到这个目录下.
/mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。
/opt
这是给主机额外安装软件所存放的目录。可以将安装文件放在这个目录中,便于程序的管理。默认为空。
/usr/local
这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。
/var
这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。
1.3.路径
在Linux下目录用分割符/ 分隔开来,就像Windows下用\ 将文件夹分割开来。
同时,Linux下也存在绝对路径和相对路径,任何一个目录都有从根目录开始的唯一的绝对路径,而相对路径是有多个的。
1.4.空文件的大小
空文件也是占用磁盘空间的,文件由文件内容和文件属性(文件大小,文件名称等)组成,对于一个空文件,文件属性是存在的,所以这个空文件也会占用磁盘空间。 所以,即使一个文件的大小为0,它也是要占磁盘空间的。
二、常用的指令
whoami
语法: whoami 功能: 显示用户当前的身份。
ls
ls的作用是显示当前目录的文件和子目录。 语法: ls?选项?目录或文件 功能: 对于目录,该命令列出该目录下的所有子目录与文件;对于文件,该命令列出文件名以及其他信息。 常用选项:
- -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
每个目录下默认存在两个隐含文件 . 和 . . ( . 代表当前目录 . . 代表上级目录)。
- -d 将目录像文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
- -l 列出文件的详细信息。
ls -l可以简写为ll
- -n 用数字的 UID,GID 代替名称。
UID和GID相当于用户和所属组的身份信息,就像身份证一样,在系统中是唯一的。
- -F 在每个文件名后附上一个字符以说明该文件的类型,(“*”表示可执行的普通文件,“/”表示目录,“@”表示符号链接,“|”表示FIFOs,“=”表示套接字sockets)
- -t 以时间排序。
在t前面加r即可实现正序排序
-
-s 在文件名前输出该文件的大小。 -
-R 列出所有子目录下的文件。 -
-1 一行只输出一个文件。
pwd
语法: pwd
功能:显示用户当前从根目录开始的所在目录
cd
语法:cd 目录名 功能:改变工作目录。将当前工作目录改变到指定的目录下。
目录名可以按照绝对路径或者相对路径来写,例如:
cd .. : 返回上一级目录
/home/hjl/9.24_test : 绝对路径
cd ../9.25_test/ : 相对路径
cd ~:进入用户家目录(主工作目录)
cd -:返回最近访问目录
普通用户的家目录(主工作目录)默认为 /home/xxx,root用户的家目录(主工作目录)默认为 /root。
touch
该命令只能用来创建普通的文本文件,其中文件的后缀与文件的属性无关,但为了符合人的习惯还是应该加上文件后缀,比如.c .txt 等。
语法: touch?选项?文件 功能: touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。
常用选项:
其中stat命令可以显示文件或文件系统的详细信息。 Access:表示最后一次访问(仅仅是访问,没有改动)文件的时间 modify:表示最后一次修改文件的时间 change:表示最后一次对文件属性改变的时间,包括权限,大小,属性等等。
- -c 或 --no-create 不建立任何文档。
- -d 使用指定的日期时间,而非现在的时间。
- -f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
- -m 或 --time=mtime 或–time=modify 只更改变动时间。
- -r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
- -t 使用指定的日期时间,而非现在的时间。
mkdir
该命令可以用来创建目录 语法: mkdir?选项?dirname 功能: 在当前目录下创建一个名为“dirname”的目录。
常用选项:
- -p dirname可以是一个路径名称,此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以递归建立多个目录。
rmdir
rmdir是一个与mkdir相对应的指令,mkdir是建立目录,而rmdir是删除目录。这个命令只能删除空目录。
语法: rmdir?选项?dirname 功能: 删除空目录。 常用选项:
- -p 当子目录被删除后如果父目录也变成空目录的话,就连同父目录一起删除。
rm
rm可以删除所有目录和文件。对于目录一般加上-r才能删除。
语法: rm?选项?dirname 功能: 删除文件或目录。 常用选项:
rm -rf /则是从根目录下不询问式递归删除所有文件和目录,这是一条删库跑路的指令,一定要慎用。
man
man命令可以在man手册中查看具体的命令用法。 语法: man?选项?指令 功能: 查看指令的使用规则等。 常用选项:
- -k 根据关键字搜索联机帮助
- num 只在第num章节找
- -a 将所有章节的都显示出来
man手册是英文的,还有中文的手册cman,man和cman都需要自己安装。
手册分为8章:
- 普通的命令
- 系统调用(内核提供的函数),如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
- 库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
- 特殊文件设备文件
- 文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
- 是给游戏留的,由各个游戏自己定义
- 杂项。是附件还有一些变量,比如向environ这种全局变量在这里就有说明
- 系统管理命令(通常仅限于root用户),这些命令只能由root使用,如ifconfi
cp
cp指令可以将文件或目录拷贝到另一个地方。 语法: cp?选项?源文件或目录?目标文件或目录 功能: 复制文件或目录。 常用选项:
-
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在 -
-i 或 --interactive 如果文件已经存在,则拷贝覆盖文件之前先询问用户 -
-r或-R递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
当拷贝的文件为多个或者全部时,可以用到通配符进行拷贝。
通配符是一种特殊语句,主要有星号 (*)和问号 (?),用来模糊搜索文件。 当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。
mv
mv类似于剪切功能,讲一个文件或目录移动到另一个目录中。 语法: mv?选项?源文件或目录?目标文件或目录 功能: (1)当第二个参数是不存在的名称时,mv指令完成文件重命名或目录重命名。
(2)当第二个参数是已存在目录名称时,mv指令将文件移动置该目录中。
echo
这个指令可以将字符串显示到显示器或者重定向输入到文件中。 语法: echo 字符或字符串
另外,在后面加上 >(格式化追加)文件名 或者 >>(在文件末尾追加) 文件名 可以将字符或字符串写入文件中:
cat
cat命令可以将文件的内容显示到显示器中。 语法: cat?选项?文件 功能: 查看目标文件的内容。 常用选项:
- -b 对非空输出行编号。
- -s 不输出多行空行,只会保留一行空行
tac
tac与cat相反,tac可以方向查看文件的内容。 语法: cat?文件 功能: 反向查看目标文件的内容。
注意: cat指令会将目标文件内容全部打印到屏幕上。若是目标文件内容过多,则会导致刷屏(直到将文件内容全部打印到屏幕上)。因此cat和tac指令一般仅适用于查看内容较少的文件。
more
cat适合查看内容较少的文件,而more适合查看内容较多的文件,因为它不会一下子全部显示出来,而是可以进行翻页。 语法: more?文件 功能: 查看目标文件的内容。 常用选项:
more指令只能通过按回车键进行下翻操作,无法进行上翻操作,并且more指令在查看之前会先加载整个文件。
less
相比于more,less指令可以同时支持上翻和下翻操作。
语法: less?选项?文件 功能: 既有查看目标文件的内容的功能,又有搜索功能。
less指令可以通过按上下键进行上翻和下翻操作,并且less指令在查看之前不会加载整个文件。
常用选项: -N:在每一行前面都显示行号 -m:显示读取文件的百分比 -M:显示读取文件的百分比、当前页面的行号和总行数
翻页和查找操作:
- u:向前滚动半页
- d:向后滚动半页
- b:向前翻一页
- f:向后翻一页
- k:向前滚动一行
- j:向后滚动一行
- g:移动到第一行
- G:移动到最后一行
- 回车 向后滚动一行
- 空格 向后翻一页
- 上/下键 向前/向后滚动一行
- h:显示 less 的帮助文档
- /字符串 向下搜索“字符串”的功能。
- ?字符串 向上搜索“字符串”的功能。
- n 重复前一个搜索(与/或?有关)。
- N 反向重复前一个搜索(与/或?有关)。
- v 进入编辑模式,可编辑当前文件
head
从头开始查看指定行数的文本。 语法: head?选项?文件 功能: 用于显示文件的开头至标准输出中,默认head指令打印其相应文件的开头10行。 选项:
- -n<行数> 显示的行数
tail
从尾开始查看指定行数的文本。 语法: tail?选项?文件 功能: 用于显示文件的末尾至标准输出中,默认tail指令打印其相应文件的末尾10行。 选项:
- -n<行数> 显示的行数
提取中间的行数:
| 叫做管道,作用是将前面head -5010 file.txt 的输出写到管道中,再将管道中的数据拿出来执行tail -10 ,这样就可以输出前5010行的后10行了。
date
date 指定格式显示时间: date +%Y:%m:%d
1.在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下
- %H : 小时(00…23)
- %M : 分钟(00…59)
- %S : 秒(00…61)
- %X : 相当于 %H:%M:%S
- %d : 日 (01…31)
- %m : 月份 (01…12)
- %Y : 完整年份 (0000…9999)
- %F : 相当于 %Y-%m-%d
2.在设定时间方面
- date -s //设置当前时间,只有root权限才能设置,其他只能查看。
- date -s 20080523 //设置成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″ //这样可以设置全部时间
3.时间戳
- date +%s 显示当前时间的时间戳。
- date -d @时间戳 将时间戳转换为时间。
cal
cal指令可以用于显示公历(阳历)日历。 语法: cal?选项?月份?年份 功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1~9999),如有两个参数,则表示月份和年份。
常用选项:
- -y 显示当前年份的日历
find
语法: find?路径?选项?… 功能: 用于在文件树中查找文件,并作出相应的处理(可能访问磁盘->效率比较低)。
路径不写默认为当前路径 常用选项:
- -name 按照文件名查找文件。
- -size 按照文件大小查找文件。-50M 小于50M +50M 大于50M
- -ctime 按最新修改的时间查找 -5位最近五天
- -type 根据文件类型查找
which
查找某一条命令所在的路径。 语法: which?指令 功能: 用于查找某一指令的程序文件所在路径。 命令实际上也是一个可执行程序,它所在的目录可以不用让执行这些命令时加路径,直接使用命令即可。
其中,alias的作用是起别名,ls是ls --color=auto 的别名
因此如果把我们自己写的可执行程序放到这个目录下,也可以使用名字直接执行:
grep
grep是文本行过滤工具,它在过滤时以行为基本单位。将符合条件的行显示出来。 语法: grep?选项?搜寻字符串?文件 功能: 在文件中搜索字符串,将找到的行打印出来。
常用选项:
- -i :忽略大小写的不同,所以大小写视为相同
- -n :顺便输出行号
- -v :反向选择,显示出没有 ‘搜寻字符串’ 内容的那一行
zip压缩和unzip解压
zip指令用于打包压缩目录或文件。 语法: zip?选项?压缩文件 .zip?待打包目录或文件 功能: 将目录或文件打包压缩成zip格式。 常用选项:
- -r 递归处理,将指定目录下的所有文件和子目录一并处理。
打包压缩目录的时候要加通配符/* ,要不然并不会打包压缩目录下的文件,只是打包压缩目录。
语法: unzip?压缩文件.zip?选项?目录 功能: 将压缩文件解压到指定目录当中。
如果要解压到指定目录必须带上-d选项:
tar
tar指令也可以用来打包压缩和解压文件,并且还可以实现不解开压缩包,直接查看里面内容的操作,以及只打包不压缩等操作。
语法: tar?选项?压缩文件?… 功能: 打包/解包,不解开压缩包,直接查看里面内容。
常用选项:
- -c 建立一个压缩文件的参数指令(create的意思)。
- -x 解开一个压缩文件的参数指令。
- -t 查看tarfile里面的文件。
- -z 是否同时具有gzip属性?即是否需要用gzip压缩?
- -j 是否同时具有bzip2属性?即是否需要用bzip2压缩?
- -v 压缩的过程中显示文件(常用)。
- -f 使用档名,请留意,在f之后要立即接档名,不要再加参数。
- -C 解压到指定目录。
bc
bc相当于Linux下的计算器 语法: bc进入计算器 输入表达式 按回车进行计算 Ctrl+C退出计算 功能: 进行运算。
uname
语法: uname?选项 功能: 用于获取电脑和操作系统的相关信息。可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
常用选项:
- -a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
- -r 输出电脑和操作系统相关信息。内核版本+CPU架构
file
语法: file 功能: 查看文件的更多属性信息。
clear
语法:clear 功能:清空屏幕。
三、高频使用的按键(热键)
- [Tab]按键—具有『命令补全』和『档案补齐』的功能
- [Ctrl]-c按键—让当前的程序『停掉』
- [Ctrl]-d按键—退出当前命令行。相当于exit
- 上下按键。上下按键在Linux当中存储的是历史命令,通过按上下键我们可以查看我们最近敲的命令。也可以使用history指令查看历史命令。
四、关机和重启命令
关机语法: shutdown?选项 重启语法:reboot 选项 常见选项:
- -h 将系统的服务停掉后,立即关机。
- -r 将系统的服务停掉之后就重新启动。
- -t sec 经过sec秒后关机。
注: 所有关机指令只能由root用户执行。所有的指令必须要在开机的情况下输入,所以没有开机命令。
五、扩展命令
- 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last。
- 文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln。
- 系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab。
- 网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、nslookup。
- 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who。
- 其他命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。
六、shell命令以及运行原理
Linux内核(kernel)有两种理解:
- 广义上的操作系统:shell+kernel+配套的软件(应用、驱动等)
- 狭义上的操作系统:指的就是内核,是纯粹的操作系统部分。
我们很难直接使用内核,因为学习成本太大,所以在内核外嵌套了一个“外壳程序”,帮助我们和内核进行交互,同时也可以保护内核。
Linux使用shell命令行界面,而在Windows下则使用图形化界面,这两者都是内核外的“外壳程序”,相当于用户和操作系统之间的媒介。
从技术角度, Shell的最简单定义:命令行解释器(command Interpreter)主要包含:将使用者的命令翻译给内核(kernel)处理。同时,将核心的处理结果翻译给使用者。 对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
简单来讲,shell相当于内核的一层“外壳程序”,主要的功能是对我们的指令进行解析,解析指令完成后发给Linux内核。内核运行出结果后通过shell输出给用户。如果我们输入的命令是错误的或者不存在的,那么就不会将解析指令发给Linux内核。
所以,shell相当于用户和操作系统之间的媒介,用来和用户交互,提升用户的操作体验。同时用来保护操作系统。
Shell运行原理:
- 创建子进程,让子进程进行命令行解释。
- 子进程出现任何问题,都不影响父进程Shell。
另外, Shell只是所有外壳程序的统称,在centos 7当中的外壳程序名叫bash。bash相当于Shell的子集。
|