前言
- 配置Xshell登录远程服务器
- Linux的基本指令------man、cp、mv、alias&which、cat&more&less、head&tail、date、cal、find、grep、zip&tar、bc、uname
- Linux常用热键
一、配置Xshell登录远程服务器
以前我们登录使用指令:
bash
ssh 用户名@你的公网IP
其实可以不用指令登录,通过Xshell新建会话也可以登录。
配置步骤如下:
-
选择左上角的+号(新建)
-
在窗口配置你的公网IP,配置完成之后确定即可
-
配置成功之后:点击文件------》打开 就可以看到我们刚才新建的会话了
-
选择我们要登录的用户,点连接,第一次登录需要输入用户名(输入存在的用户名,并点击记住用户名)
-
现在就全部配置完成了,以后打开Xshell它就会弹出会话窗口,选择你要登录的会话即可
tip:今后我们学习一般都是使用普通账号登录了,不再使用root了,因为①root权限高没有什么报错,你的误操作他也不提示你;②你以后公司使用也一般是普通用户等。
二、Linux的基本指令
1、man指令
引入 :Linux的命令有很多参数,我们不可以全记住,我们可以通过man指令 查看联机手册获取帮助。
语法 : man [选项] 命令
常用选项:
- -k 根据关键字搜索联机帮助
- num 只在第num章节找
- -a 将与命令匹配的所有章节文档的都显示出来(缺省从第一章开始搜索,搜到就停止,按q它会继续往后面搜索,直到所有章节都搜索完)
tip:
- 左上角的命令(num)中的num表示命令在num号手册查到的
- man手册是有编号的,分为1~8章,我们做应用开发一般只用到1 ~3章(第3章是查库函数的,我们一般只有来查C语言的库函数。为什么一般只查C语言------①Linux操作系统本身是由C语言写的,所以它带C语言的标准文档;②man说是在线的,其实是有点离线)
- 如果man不能查2~8章的命令,我们就需要安装man
- 例如:查不到C语言库函数printf
- 安装man:在root账号下输入指令安装:install -y man-pages
- 当我们不太清楚man手册的使用时,也可以man man来查(man也是一条指令)
- 按q退出man手册
使用示例:
- 一般我们使用就不携带选项了,直接man后面跟命令即可
- man num 命令:在指定的num章下搜索命令,使用场景:例如printf即是Linux的一条基本指令在第1章也是C语言的库函数在第3章,如果我们直接man printf想查的是它作为C语言库函数的文档是查不到,查到的是它作为Linux命令的文档,因为man默认从第1章开始查,查到就停止,想查printf作为C语言库函数的文档,需要指定在第3章查找
2、cp指令
前置准备:在讲解cp指令之前,我们先了解几条指令
- echo 字符串:在显示器打印字符串
- echo 字符串 > 目标文件:输出重定向------把本来应该打印到显示器的内容,打印到目标文件中
- cat 文件:在显示器打印文件内容
- 示例:
有了前置准备,我们正式开始学习cp指令
语法: cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
常用选项:
- -i 或 --interactive 覆盖文件之前先询问用户
- -r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
- -f 或 --force 强行复制文件或目录(不要询问我), 不论目的文件或目录是否已经存在
- -R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
使用示例:
- 拷贝一个普通文件,可以拷贝到当前目录下,也可以拷贝到其他任意目录下。(注意:拷贝到同一目录下时,源文件名与目标文件必须不一样)
- 同一目录下的拷贝
- 不同目录下的拷贝
- 常识告诉我们不管是Linux还是Windows,同一个目录下,都不能存在同名文件(从应用角度解释:名字一样就不能标识该目录下的唯一性了)
- 拷贝一个目录:因为目录是递归定义的,所以不能直接拷贝目录,需要携带-r选项
- cp携带-i选项时,当目标文件不为空覆盖目标文件之前会先询问用户
- 复制多个文件到目录:如果你同时指定两个以上源文件或目录,并且目标是一个已经存在的目录,则 cp 会将前面指定的所有源文件复制到目标目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。(拷贝一个文件或目录是,目标文件或目录可以不存在)
3、mv指令
mv命令是move的缩写,可以用来移动文件或者将文件改名(move(rename)files),是Linux系统下常用的命令,经常用来备份文件或者目录。
语法: mv [选项] 源文件或目录 目标目录或文件名
功能: ①重命名文件或目录;②剪切文件或目录
常用选项:
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
使用示例:
- 重命名:mv 源文件或目录 新文件名或目录名(即不存在)
- 重命名文件
- 重命名目录
- 剪切:mv 源文件或目录 路径
- 剪切文件
- 剪切目录
- 剪切并重命名:mv 源文件或目录 路径+新文件名或目录名
- 剪切并重命名文件
- 总结:可以认为所有的mv行为都是剪切并重命名,没有指定新名字就默认使用你自己原来的名字,路径后跟了新名字就使用你新的名字。
4、alias&which指令
补充:
- 如何看待指令?
- 指令和可执行程序都是可以被执行的------指令就是可执行程序!
- 我们在执行指令之前我们应该先做什么?
- 先在系统中查找对应的指令,指令一定是在系统的某一个位置存在的(存在于/usr/bin/目录下)。
tip:
- 指令是在系统中特定的路径下存在的,一定是某种可执行程序------C/C++/Python/shell......
- 指令的本质就是可执行程序和我们自己写的代码编译好的程序,没有本质区别
总结:指令的本质就是文件------可执行文件,直接安装到了系统的某种路径下
alias&which指令:
alias给指令取别名。
- 语法: alias 别名='命令'
- tip: ①alias在shell会话中定义的别名只会在当前会话有效,即alias具有临时性;②单纯的alias可以查看当前定义的所有别名;③别名持久化:为了使别名在每次新的 shell 会话中自动加载,你需要将 alias 命令添加到你的 shell 配置文件中,如 .bashrc 或 .bash_profile(对于 Bash shell)。
which查看命令在哪(它用于查找并显示给定命令的完整路径。当你在终端输入一个命令时,操作系统会根据环境变量 PATH 来查找命令的可执行文件。which 命令正是用来显示这个搜索过程的结果。)
- 语法: which [选项] 命令
- 一般我们使用不携带选项
使用示例:
- 之前我们学过ls -l等价于ll,这个ll就是ls -l的别名
- 取别名演示(虽然指令可以取别名,但是学习阶段尽量少用,因为我们是目的学习指令)
5、cat&more&less指令
补充:
- Linux下一切皆文件,凡是具有读写方法(方法为空也可以)的都可以视为文件。 例如:显示器------显示器只负责写,不负责读,所以它的读方法为空;键盘------键盘只负责读,不负责写,所以它的写方法为空;普通文件------一般都具有读写方法
- echo 字符串:默认把字符串写入到显示器文件中(tip:echo指令默认带回车换行,如果不想换行可以使用printf指令)
- 输出重定向:
- echo 字符串 > 目标文件:输出重定向------把本来应该写入到显示器文件的内容,写入到了普通文件中,这种行为我们称之为输出重定向。
- 注意:向目标文件进行写入的时候,覆盖写入(即分为两步:①清空文件;②写入新内容)
- 清空目标文件:> 目标文件
- 追加重定向:
- echo 字符串 >> 目标文件:追加重定向------打开文件,向文件尾追加写入,不会清空文件
- 输入重定向:
- 单纯的cat指令,后面什么都不写,它默认从键盘文件读取内容
- cat < 目标文件:输入重定向------本来应该从键盘文件读取,现在不用从键盘文件读取,从指定的文件读取
- 无论是输出重定向还是追加重定向时,如果写入的目标文件不存在,它会默认帮你创建文件。(输入重定向不可以)
- 生成大文本文件的脚本:
$ cnt=1; while [ $cnt -le 100000 ]; do echo "Hello! $cnt"; let cnt++; done > large.txt
cat指令:
语法: cat [选项] [文件]
功能: 查看目标文件的内容
常用选项:
- -b 对非空输出行编号
- -n 对输出的所有行编号
- -s 不输出多行空行
tip:
- 区分echo&cat&ls
- echo:向显示器文件写入字符串
- cat:向显示器文件写入文件内容
- ls:向显示器文件写入文件属性
- cat不适合看大文本,适合看小文本
使用示例:
- 常用选项使用示例
- cat不适合看大文本,因为cat会将文件所有内容一下全打印,会造成刷屏,不方便我们查看
more指令:
语法: cat [选项] [文件]
功能: 查看大文本的内容
常用选项:
- -n 跳到文件的前 n 行,如 more -5 会显示文件的前 5 行
- q 退出more
tip:
- more打印占满一屏就停止,然后,你可以按空格键向下滚动一页,或者按回车键向下滚动一行
- more 只能向后单向滚动(tip:针对文件可以按b返回上一页,但对管道无用)
使用示例:
- more打印占满一屏就停止,按回车继续向下打印
- 可以通过/子串从文件当前位置向后定位子串这个关键字
less指令:
语法: less [选项] [文件]
功能: less与more类似,也可以查看大文本的内容,但使用less可以随意浏览文件,而more仅能向后单向滚动,而且less在查看之前不会加载整个文件
常用选项:
- -i 忽略搜索时的大小写
- -N 显示每行的行号
- /字符串:向下搜索"字符串"的功能
- ?字符串:向上搜索"字符串"的功能
- n:重复前一个搜索(与 / 或 ? 有关)
- N:反向重复前一个搜索(与 / 或 ? 有关)
- q:退出 less
tip:
- more VS less:
- 加载方式:more是一次性全部把文件加载,只是一部分一部分的显示,而less在查看之前不会全部加载,而是根据用户的需要动态的加载内容,因此less在查看大文件时的初始响应熟读通常比more快
- 翻页:more可以向下翻页、翻行,但不支持向上翻页、翻行。less不仅可以使用上下方向键逐行滚动内容,还可以使用pageup和pagedown或空格键进行上下翻页。
- 搜索:more只能向下搜索,而在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
- 阅读到文件结束时,less不会退出,而more会
- less提供了更多的功能和更好的用户体验,所以一般在查看大文本时我们使用less
- less工具也是对文件或其它输出进行分页显示的工具,应该说是Linux正统查看文件内容的工具,功能及其强大
6、head&tail指令
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾
head指令:
- 语法: head [选项] [文件]
- 功能: head用来来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行
- 选项:
- -n<行数> 指定显示的行数
tail指令:
- 语法: tail [选项] [文件]
- 功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
- 选项:
- -n<行数> 指定显示的行数(如果不指定 行数,则默认显示最后 10 行)
- -f 循环读取(实时跟踪文件的新增内容,类似于 tail -n 1 -f,常用于日志文件)
使用示例:
- head的使用示例:
- tail后指定文件,打印指定文件末尾内容:
- tail后不指定文件,管道的使用------假设你想查看某个命令的最后几行输出,可以将该命令的输出通过管道传递给 tail。例如我想查看d.txt文件中间行1000~1020内容。
-
临时文件法:
-
管道使用:
-
补充:管道
- | 是一种符号,后面会被系统解释称为管道文件(输入内存级)
- 管道有一个入口一个出口,管道是用来传输资源的
管道可以级联多个命令,所以可以支持流水线工作
7、date指令
在讲解date时间指令之前,我们先来了解一下日志:
平时我们生活中的日记就是日志记录着我们生活中的点点滴滴,其中时间最重要。
在计算机世界中时间也非常重要,因为时间他可以在我们出现问题时,可以根据产生问题的时间点------时间会记录下你对应的行为从而很好的复原(即从时间我们可以知道这个问题是什么原因导致的,是什么人导致的)
所以日志在计算机中很重要,程序运行到自己的每一个关键时候,都要自己打日志。
日志:时间+日志等级+日志具体信息+其他信息,日志信息以行位单位打印,写入到文件中,这个文件就是日志文件。
date 指定格式显示时间:date +%Y-%m-%d_%H:%M:%S
date用法:date [OPTION]... [+FORMAT]
- 在显示方面,使用者可以设定显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下:
- %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
- 在设定时间方面
- 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″ //这样可以设置全部时间
- 时间戳
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的的午夜)开始所经过的秒数,不考虑闰秒。
- 时间是人为定义的
- 时间存在时差,例如美国和中国
- 时间戳单调递增,方便范围查找
时间->时间戳:date +%s
时间戳->时间:date -d @1508749502
使用示例:
- date显示当前时间,但是它显示的格式我们看着不太习惯,所以我们可以自己设定显示的格式,格式设定为一个加号后接数个标记(tip:标记之间不以空格做分隔符,会把它当做两个参数。一般年月日的分隔符我们喜欢用-时分秒的分隔符我们喜欢用:)
- 时间与时间戳之间的相互转换
8、cal指令
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。"阳历"又名"太阳历",系以地球绕行太阳一周为一年,为西方各国所通用,故又名"西历"。
命令格式: cal [参数][月份][年份]
功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
常用选项:
- -3 显示系统前一个月,当前月,下一个月的月历
- -j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
- -y 显示当前年份的日历
使用示例:
- cal查看当前月的日历,cal year查看当前年的日历
- -3 显示系统前一个月,当前月,下一个月的月历
9、find指令
语法: find 路径 选项
功能: 用于在文件树中查找文件,并做出相应的处理(可能访问磁盘)
常用选项:
- -name 按照文件名查找文件
tip:
- Linux下find命令在目录结构中搜索文件,并执行指定的操作
- Linux下find命令提供了相当多的查找条件,功能很强大、由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下
- 即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限
- 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)
- 注意:普通用户只能在自己家目录下查找自己的文件,不在自己家目录中查找时可能会受权限约束,不让你查找(可以切换root),因为目录是一棵多叉树,它的查找时深度优先遍历方式。
- find&which&whereis
- find可以在自己的家目录下(指定路径)找任意的文件
- which只在系统指令所在路径下(/usr/bin/)找指令文件
- whereis在系统特定的路径下查找,即可以找到可执行程序,又可以找到手册,安装包压缩包等之类(介于find与which之间)
使用示例:
- find ~ -name 指定文件名:在家目录下查找所有与指定文件名相同的文件
- 普通用户只能在自己家目录下查找自己的文件,不在自己家目录中查找时可能会受权限约束,不让你查找(可以切换root),因为目录是一棵多叉树,它的查找时深度优先遍历方式
10、grep指令
语法: grep [选项] 搜索字符串 文件
功能: 行过滤工具------把文件打开,按行为单位把这个文件的内容读取到显示器文件中,不过有条件。即在文件中搜索子串,将找到的行打印出来。
常用选项:
- -i 忽略大小写的不同,即大小写视为相同
- -n 输出行号
- -v 反向选择,即显示出没有'搜索字符串'内容的那一行
使用示例:
- -n 输出行号
- -i 忽略大小写的不同,即大小写视为相同
- -v 反向选择,即显示出没有'搜索字符串'内容的那一行
- 与管道一起使用
- 多个文件过滤
11、zip&unzip和tar指令
什么是打包和压缩?
打包:如我们大学生每次回家就需要将所有东西打包到一个行李箱中;压缩:把东西放到行李箱中时,我们会尽量将其放得有规律,多放一些行李。
为什么要打包压缩?
- 能被打包压缩的,一定是一个整体,有多个文件组成的一个文件,不容易造成文件缺失
- 打包压缩,文件体积变小,下载时间变短 (储存占据空间变小)
打包和压缩的方案有很多种,这里我们就介绍zip和tar两种。
zip&unzip:
语法: zip 压缩文件.zip(打包和压缩之后的文件名) 目录或文件(即打包的文件)(unzip 压缩文件.zip -d 指定解压路径)
功能: 将目录或文件压缩成zip文件(unzip将zip压缩文件解压和解包)
常用选项:
- -r 递归处理,将指定目录下的所有文件和子目录一并处理
tar指令:
语法: tar [-cxtzjvf] 文件与目录 ... 参数
功能: 打包/解包,不打开它,直接看内容------Linux最常用!
常用选项:
- -c 建立一个压缩文件的参数指令(create的意思)
- -x 解开一个压缩文件的参数指令
- -t 查看tarfile里面的文件
- -z 是否同时具有gzip的属性?即是否需要用gzip压缩?
- -j 是否同时具有bzip2的属性?即是否需要用bzip2压缩?
- -v 压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
- -f 使用档名,请留意,在f之后要立即接档名!不要再加参数!
- -C 解压到指定目录
使用示例:
- 注意:zip默认打包和压缩普通文件,不能直接打包和压缩目录
- 错误示例:直接打包目录,解压之后只能得到一个空目录
- 正确示例:打包目录需要携带选项-r,并且可以同时打包多个文件
- 注意:当我们输入zip/unzip指令时,如果出现command not found,即OS没有安装zip/unzip,①以root方式登录;②su/su-+root密码------》yum install -y zip unzip
- tar的选项很多,我们一般记住以下三个组合即可:
- tar czf xxx.tgz 需要打包的目录和文件(.tar.gz可省略为.tgz,.tar打包后缀,.gz压缩后缀)------打包压缩
- tar tzf xxx.tgz------预览
- tar xzf xxx.tgz------解压与解包
- tar携带-C选项,解压到指定目录
12、bc指令
Linux中可以使用bc命令很方便进行浮点数运算,相当与计算器
使用示例:
- bc------》计算器------》quit退出
- echo "运算" | bc
13、uname -r指令
语法: uname [选项]
功能: uname用来获取电脑和操作系统的相关信息
补充说明: uname可显示Linux主机所用的操作系统的版本、硬件的名称等基本信息
常用选项:
- -a或--all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
- -r 输出体系结构
tip:x86_64==x64,x86==32
使用示例:
了解:
- free 查内存(-k以KB为单位,-m以MB为单位,-g以GB为单位)
- df -h 查磁盘
- lscpu 查CPU
14、常用热键
- [Tab]按键------具有命令补全和档案补齐的功能
- [Ctrl+c]按键------让当前的程序停掉
- [Ctrl+r]按键------历史命令搜索
- [Ctrl+d]按键------退出终端登录或退出用户(可以用于取代exit)
补充:
- nano:Linux下的记事本
- nano -- version:检测是否安装了nano
- yum install -y nano:在root用户下安装nano
- nano 文件名:打开文件,在记事本下编写
- ctrl+r搜索历史命令,决定了,Linux系统一定记录了历史命令!history指令可以查看历史命令。
- Linux会默认记录最新的1000条历史命令
15、关机
语法: shutdown [选项]
常用选项:
- -h : 将系统的服务停掉后,立即关机
- -r : 在将系统的服务停掉之后就重新启动
- -t sec : -t 后面加秒数,亦即『过几秒后关机』的意思
tip:Linux操作系统(服务器),永远不关机!
16、以下命令作为扩展:(后期遇到再讲)
- 安装和登录命令: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。