前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【小家运维】达到Linux第三阶段的常用命令笔记记录---PartⅠ

【小家运维】达到Linux第三阶段的常用命令笔记记录---PartⅠ

作者头像
YourBatman
发布2019-09-03 15:16:43
5970
发布2019-09-03 15:16:43
举报
文章被收录于专栏:BAT的乌托邦BAT的乌托邦
相关阅读

【小家运维】达到Linux第三阶段的常用命令笔记记录—PartⅠ

【小家运维】达到Linux第三阶段的常用命令笔记记录—Part Ⅱ

【小家运维】达到Linux第三阶段的常用命令笔记记录—Part Ⅲ

前言

Linux虽然在个人桌面领域处于弱势,被Windows绝对压制。但是在服务器领域、嵌入式领域(比如Android的内核也是Linux)几乎一骑绝尘,为实际上的统治者。

它免费、稳定、高效、开源等一系列特点在在市场上都得到了很明显的体现。

Linux的体系架构

一般来说著名的linux系统基本上分两大类:

  • RedHat系列:Redhat、Centos、Fedora等
  • Debian系列:Debian、Ubuntu等

Linux 的基石是 Unix 内核,其基于 Unix 的基本特点以及 POSIX 和单独的 UNIX 规范标准。看起来,该操作系统官方名字取自于 Linus,其中其操作系统名称的尾部的 “x” 和 Unix 系统相联系。

我不得不贴出最经典的一张图了:

内核:从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境

系统调用:是操作系统的最小功能单位。现在各种版本的Unix实现都提供了不同数量的系统调用,如Linux的不同版本提供了240-260个系统调用,FreeBSD大约提供了320个(reference:UNIX环境高级编程)。我们可以把系统调用看成是一种不能再化简的操作(类似于原子操作,但是不同概念)

Shell:是一个特殊的应用程序,俗称命令行,本质上是一个命令解释器,它下通系统调用,上通各种应用,通常充当着一种“胶水”的角色,来连接各个小功能程序,让不同程序能够以一个清晰的接口协同工作,从而增强各个程序的功能。同时,Shell是可编程的,它可以执行符合Shell语法的文本,这样的文本称为Shell脚本,通常短短的几行Shell脚本就可以实现一个非常大的功能,原因就是这些Shell语句通常都对系统调用做了一层封装。为了方便用户和系统交互,一般,一个Shell对应一个终端,终端是一个硬件设备,呈现给用户的是一个图形化窗口。我们可以通过这个窗口输入或者输出文本。这个文本直接传递给shell进行分析解释,然后执行。

总结一下,用户态的应用程序可以通过三种方式来访问内核态的资源:

1、系统调用(所以应用程序也是不经过shell,直接通过系统调用来访问内核资源的)

2、库函数

3、Shell脚本

Linux的学习阶段

本人结合平时阅读的一些文章,大概把Linux选手分为如下这些阶段:

  1. 第一阶段:会使用Linux下的基本操作命令。包括cd、文件命令(rm、mkdir、chmod、chown)编辑工具vim,用户管理(useradd、userdel、usermod等)
  2. 第二阶段:会在Linux安装一些软件。并且能修改一些配置,环境变量、网络配置、服务配置等等。能写简单的shell脚本
  3. 第三阶段:会在Linux进行相关的开发工作。比如Python开发、大数据开发等等
  4. 第四阶段:能写复杂的shell脚本,对服务器进行维护
  5. 第五阶段:能保护服务器进行安全设置。放置攻击。保证服务器的正常运行,能对Linux系统进行调优
  6. 第六阶段:深入理解Linux系统,深入内核。对内核有研究,能对Linux开源社区贡献对应代码

如题,很显然,本文做的相关笔记止步于第三阶段。并且绝大部分内容还是以命令/shell的讲解记录为主

Linux的学习不比编程,多实践就自然出真知了。

Linux的目录结构

在Linux的世界里,一切皆目录

重点目录介绍

  • /:根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的, 同时根目录也与开机/还原/系统修复等动作有关

根目录(/)所在分区应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。说白了,就是根目录和Windows的C盘一个样。

  • /bin:系统有很多放置执行档的目录,但/bin比较特殊。在/bin底下的指令可以被root与一般帐号所使用,主要有:cat,chmod(修改权限), chown, date, mv, mkdir, cp, bash等等常用的指令。
  • /sbin:Linux有非常多指令是用来设定系统环境的,这些指令只有root才能够利用来设定系统,其他使用者最多只能用来查询而已。里面包括了开机、修复、还原系统所需要的指令。 至于某些伺服器软体程式,一般则放置到**/usr/sbin/当中。至于本机自行安装的软体所产生的系统执行档(system binary),则放置到/usr/local/sbin/**当中了。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。
  • /boot:主要放置开机会使用到的档案
  • /dev:在Linux系统上,任何装置与周边设备都是以档案的型态存在于这个目录当中。比如u盘等一般都挂在这里。比要重要的档案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等 类似于windows的设备管理器
  • /etc:系统主要的配置几乎都放置在这个目录内,例如人员的帐号密码档、各种服务的启始档等等。 普通用户一般只能看,root用户才能修改此目录下的文件。 比较重要的档案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等 其下重要的目录有:/etc/init.d/ :所有服务的预设启动script都是放在这里的,例如要启动或者关闭iptables的话: /etc/init.d/iptables start、/etc/init.d/ iptables stop
  • /home:家目录。新建一个用户就会有一个家目录。~ :代表当前使用者的家目录,而 ~guest:则代表用户名为guest的家目录。
  • /lib:系统的函式库。比如一些驱动程序等等
  • /media:是媒体的英文,顾名思义,这个/media底下放置的就是可移除的装置
  • /mnt:**如果妳想要暂时挂载某些额外的装置,一般建议妳可以放置到这个目录中。**在古早时候,这个目录的用途与/media相同啦。 只是有了/media之后,这个目录就用来暂时挂载用了。
  • /opt:这个目录对我们平时就很重要了。一般我们的第三方软件都会放在这个目录里,比如我们java的源代码、jar包、打包脚本等等都放在这里。我们安装的软件:比如需要安装一个redis,也可以安装在这个目录里。
  • /root:root用户的家目录。
  • /srv:srv可以视为service的缩写,是一些网路服务启动之后,这些服务所需要取用的资料目录。 常见的服务例如WWW, FTP等等。
  • /tmp:暂时存放目录。比如一些日志文件、程序运行时的中间临时文件等等可放在这。这个目录所有用户都可以操作的
  • /var:/var就是在系统运作后才会渐渐占用硬盘容量的目录。因为/var目录主要针对常态性变动的文件,包括缓存(cache)、登录档(log file)以及某些软件运作所产生的文件、打印输出的日志文件、mysql的数据库文件等等 /var/cache/:应用程序本身运作过程中会产生的一些暂存档 /var/lib/: 程序本身执行的过程中,需要使用到的数据文件放置的目录。 /var/lock//var/log/非常重要。这是登录文件放置的目录。里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登入者的信息)等。 /var/mail/:放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中,通常这两个目录是互为链接文件。 /var/run/:某些程序或者是服务启动后,会将他们的PID放置在这个目录下 /var/spool/
  • /usr:usr不是user的缩写,其实usr是Unix Software Resource的缩写。也就是Unix操作系统软件资源所放置的目录,而不是用户的数据啦。 因为是所有系统默认的软件(distribution发布者提供的软件)都会放置到/usr底下,因此这个目录有点类似Windows 系统的C:\Windows\ + C:\Program files\这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。

/usr/bin/:绝大部分的用户可使用指令都放在这里。请注意到他与/bin的不同之处。(是否与开机过程有关)

/usr/lib/:如果你使用的是X86_64的Linux系统, 那可能会有/usr/lib64/目录产生

/usr/local/:管理员在本机自行安装自己下载的软件。建议安装到此目录。该目录下也是具有bin, etc, include, lib…的次级目录

/usr/sbin/:非系统正常运作所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon)

/usr/share/:放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文本文件

/usr/src/

一般原始码建议放置到这里,src有source的意思。至于核心原始码则建议放置到/usr/src/linux/目录下。

linux一切皆文件,因此大家需要行程一共公式,对应的文件放在对应的目录里吧

常用命令

man:帮助命令

man是manual的缩写,man命令用来提供在线帮助,通过man命令可以查看Linux中的命令帮助、配置文件帮助、编程帮助等信息。

man命令支持上下翻,搜索(输入斜线’/’加字符串),退出用q

ping和telnet

先说说ping和telnet命令(Linux和windows都有):

telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。windows默认也是不开启的,需要手动打开

ping通常是用来检查网络是否通畅。

telnet是用来探测指定ip是否开放指定端口。

Linux查看系统版本、内核信息
  • cat /etc/issue 或 cat /etc/centos-release 查看系统版本信息
  • uname -a 查看内核信息
  • 查看系统版本信息

备注:(使用命令时提示command not found,需要安装yum install redhat-lsb -y)

Linux中的SSHD服务

如果我们需要使用类似xshell工具远程登录到Linux中,那么需要远程的Linux启用了SSHD服务。SSHD服务一般都是随系统启动的/etc/init.d/sshd

检查服务是否启动:

[root@l-groupclass-server1.syc.dev.ali.qr ~]# service sshd status

已启动了显示如下:

openssh-daemon (pid  13151) is running...

没有安装SSHD服务:请自行先安装吧

sshd:unrecognized service

SSHD的默认端口号为22,可以通过修改 /etc/ssh/sshd_config文件,修改默认端口,比如我修改成了如下,然后重启服务servcie sshd restart即可

备注:修改此配置文件,该端口可以避免被端口扫描,规避风险。同时也可以禁止root登录等等配置。

SSH的工作机制

服务器启动的时候自己产生一个密钥(768bit公钥),本地的ssh客户端发送连接请求到ssh服务器,服务器检查连接点客户端发送的数据和IP地址,确认合法后发送密钥(768bits)给客户端,此时客户端将本地私钥(256bit)和服务器的公钥(768bit)结合成密钥对key(1024bit),发回给服务器端,建立连接通过key-pair数据传输。

SSH知识小结
  1. SSH是安全的加密协议,用于远程连接Linux服务器
  2. SSH的默认端口是22,安全协议版本是SSH2
  3. SSH服务器端主要包含2个服务功能:SSH连接和SFTP服务器
  4. SSH客户端包含ssh连接命令远程拷贝scp命令
SSH命令

SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

ssh命令用于远程登录上Linux主机。一般我们会配置成免密码的方式登录

常用格式:ssh -l login_name user@hostname

备注:ssh可以通过ssh 主机名的方式登录到远程机器。需要修改主机的hostname配置:

不指定用户,默认利用当前宿主用户的用户名登录

ssh 192.168.0.11

指定用户登录,若需要密码,加-p password参数即可

ssh root@192.168.0.11

若修改过端口,可以指定端口登录

ssh -p 12333 root@192.168.0.11

登录到远程主机后立刻执行某个命令(当然也可以执行脚本)

ssh omd@192.168.1.100 "ls /home/fangshixiang"
SSH为啥安全呢?

SSH之所以能够保证安全,原因在于它采用了公钥加密。

(1)远程主机收到用户的登录请求,把自己的公钥发给用户。

(2)用户使用这个公钥,将登录密码加密后,发送回来。

(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。

口令登录(用户名、密码登录)
公钥登录
远程主机的authorized_keys文件

远程主机会将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。

不使用上面的ssh-copy-id命令,改用下面的命令,这样也是okl的,只是比较麻烦:

$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
scp(ssh提供的功能支持)

scp在夸机器复制的时候为了提高数据的安全性,使用了ssh连接和加密方式,如果机器之间配置了ssh免密码登录,那在使用scp的时候密码都不用输入。

远程文件的安全(加密)拷贝

scp是加密远程拷贝,cp为本地拷贝。每次都是全量拷贝(效率不高,适合第一次),增量拷贝用rsync

命令格式:

scp 参数 目标路径

-P port 注意是大写的P, port是指定数据传输用到的端口号

-r 递归复制整个目录(复制目录一般都需要带上此参数)

scp -P52722 demo.txt fangshixiang@10.102.131.178:/home/fangshixiang

这样子就把我的机子的demo.txt文件拷贝到了远程机器10.102.131.178的指定目录下了。

交换给位置,就可以把远程服务器的文件copy到本地了:

scp -P52722 fangshixiang@10.102.131.178:/home/fangshixiang/nohup.out ./
rsync

rsync是可以实现增量备份的工具。配合任务计划,rsync能实现定时或间隔同步,配合inotify或sersync,可以实现触发式的实时同步。

因为使用较少,具体参考:rsync(一):基本命令和用法

sudo和su

sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu默认为一次时长15分钟。

su : 切换到某某用户模式,提示输入密码时该密码为想要切换到的用户的密码,用法为su 账户名称。如果后面不加账户时系统默认为root账户,密码也为root的密码。没有时间限制。

备注:root切换到任何用户的时候,是不需要输入密码的

快捷命名:

sudo -i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout” 。

Linux下为用户配置免密码sudo权限(只有root用户才能操作)

我们也可以指定的用户组,来sudo -i免密码:

1、root的密码除了root本人知道外,不需被其他需要用到root权限用户知道,因为使用sudo时,要求输入的密码是『该位用户自己的密码』。 2、把所有可执行sudo指令的用户都规范在『/etc/sudoers』这个文件中,root可以很容易地掌控整个系统。(一般每个用户一行记录,当然可以按组来)

普通用户使用sudo 来执行只有root才能执行权限的命令,跟用root用户执行是不一样的,因为这时候他用的还是普通用户的环境变量。用su -成root的用户还是有些环境变量是和root登陆是不一样的。另外,它们的uid也是不一样,只有euid是相同的。

sudo /bin/bash : 这个命令也会切换到root的bash下,但不能完全拥有root的所有环境变量,比如PATH,可以拥有root用户的权限。这个命令和 sudo -s 是等同的。

sudo su : 这个命令,也是登录到了root,但是并没有切换root的环境变量,比如PATH。

sudo su - : 这个命令,纯粹的切换到root环境下,可以这样理解,先是切换到了root身份,然后又以root身份执行了 su - ,这个时候跟使用root登录没有什么区别。这个结果貌似跟sudo -i 的效果是一样的,但是也有不同,sudo 只是临时拥有了root的权限,而su则是使用root账号登录了linux系统。

  • sudo su - 约等于 sudo -i
  • sudo -s 完全等于 sudo /bin/bash 约等于 sudo su
  • sudo 终究被一个"临时权限的帽子"扣住,不能等价于纯粹的登录到系统里

相比于su切换身份须要用户的password,常常性的是须要root的password,sudo仅仅是须要自己的password,就能够以其它用户的身份来运行命令。常常是以root的身份运行命令。所以sudo相对来说安全很多,毕竟root的密码可不是随便能让人知道的。

sudo的运行有这样一个流程:

1).当用户运行sudo时,系统于/etc/sudoers文件里查找该用户是否有运行sudo的权限;

2).若用户具有可运行sudo的权限。那么让用户输入用户自己的password,注意这里输入的是用户自己的password。

3).假设password正确。变開始进行sudo后面的命令,root运行sudo是不须要输入password的,切换到的身份与运行者身份同样的时候。也不须要输入password。

区别总结:

了解完su和sudo,是不是发现sudo有太多的优点了。su方式切换是须要输入目标用户的password。而sudo仅仅须要输入自己的password,所以sudo能够保护目标用户的password不外流的。当帮root管理系统的时候,su是直接将root全部权利交给用户。而sudo能够更好分工,仅仅要配置好/etc/sudoers,这样sudo能够保护系统更安全,并且分工明白,有条不紊。

关机重启相关命令:

reboot、shutdown、poweroff、halt、init、sync

reboot

ROOT权限用户下输入reboot命令就可以看到The system is going down for reboot NOW的提示,目前就重启VPS。

reboot命令重启动系统时是删除所有的进程,而不是平稳地终止它们。因此,使用reboot命令可以快速地关闭系统,但如果还有其它用户在该系统上工作时,就会引起数据的丢失。所以使用reboot命令的场合主要是在单用户模式。

last reboot可以查看最近一次reboot的时间

shutdown

这个命令可以用来重启也可以用来关机操作。参数相对较多,本文只介绍常用的。

shutdown命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。

该命令的一般格式: shutdown 选项 警告信息

    • k 并不真正关机而只是发出警告信息给所有用户
    • r 关机后立即重新启动
    • c 取消一个已经运行的shutdown(这个比较重要咯)

shutdown -h 2:30 ‘halt’:2点30分关机,注意以本机时间为准

shutdown –r +10:系统10分钟后关机并马上重新启动

shutdown –h now:系统马上关机(不重新启动)

shutdown -c :#取消之前的shutdown命令

该命令只能由超级用户使用

halt

是最简单的关机命令,其实际上是调用shutdown -h命令。halt执行时,杀死应用进程,文件系统写操作完成后就会停止内核。

halt 立刻关机

poweroff

poweroff 立刻关机

init

是所有进程的祖先,其进程号始终为1。init用于切换系统的运行级别,切换的工作是立即完成的。init 0命令用于立即将系统运行级别切换为0,即关机;init 6命令用于将系统运行级别切换为6,即重新启动

sync

一般在关机前可手动调用。表示:将数据同步写入到磁盘

在我们执行关机、重启命令时候一般都建议先执行此命令。

exit和logout

对于Linux中的命令而言,每当其执行完成后,都会返回一个整数,这个整数就是程序退出状态(exit status),可以在shell中使用echo $?来查看上一个命令的退出状态。退出状态为0表示程序执行成功,否则执行失败。(比如我们判断上一条命令执行成功了,才继续往下执行)

在shell脚本中,可以使用exit n来退出当前脚本,并且指定退出码为n。若没有指定退出码,则以脚本执行的最后一条命令的退出状态作为当前脚本的退出状态,即exit $?

在命令行中,可以使用exit来退出当前shell,或者使用logout命令。

注意:

1、退出当前shell并不是关机,只是关闭了与系统的交互接口,Linux仍然正常运行。

2、logout命令在运行级别为图形界面的时候,是无效的

创建目录 mkdir

在Linux系统中,mkdir命令用来创建一个目录或一个级联目录。

-m:为目录指定访问权限,与chmod类似。

-p:如果目录已经存在**,则不会有错误提示**。若父目录不存在,将会创建父目录。该选项常用于创建级联目录。

mkdir命令不加任何选项默认在当前目录下创建目录,目录的默认权限为777。如果目录已经存在将会提示错误

一次性创建多个目录

mkdir cep dod testlog

可以一次性创建多个文件夹

删除目录 rmdir

rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的

注意,rm -r dir 命令可以代替rmdir,但是很危险,万一它突然就不是空的咧?

注意:删除某目录时必须具有对父目录的写权限

-p 递归删除目录dirname, 当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。

-v --verbose  显示指令执行过程

改名了很少被使用了,一般使用更为强大的rm命令

创建文件 touch

touch 文件名

若该文件名文件已存在你,不加参数的情况下会什么都不做

拷贝 cp

这个是使用频率最多的命令,负责把一个源文件复制到目标文件(夹)下。

复制到文件夹下,则文件名保持不变,复制到文件中,则文件名变更。如果目标文件已经存在或目标文件夹中含有同名文件,则复制之后目标文件或目标文件夹中的同名文件会被覆盖。

cp 源文件1 源文件2 目标文件夹 或 cp 文件 目标文件夹*,这样可以一次性复制多个文件到目标文件夹里面

cp -r 源文件夹 目标文件夹。这个也是使用频率很高的命令,只需要记住复制文件夹一定要加“-r”参数,否则会出现“cp: omitting directory”错误。

cp -s 源文件 目标文件:也可以用ln命令实现同样的功能。当一个文件路径太深(如下述的a/b/c/d/e/orginalFile.txt),访问起来十分不方便时,就会创建这个文件的软链接,使之访问起来更方便些。软链接就相当于windows上的快捷方式。

cp -l 源文件 目标文件:也可以用ln命令实现同样的功能。有时候,为了某种原因,需要创建一个硬链接

软连接和硬链接的区别,这里不解释了。记得自己理解哦

删除文件(夹) rm

rm 选项… 目录… 删除指定的<文件>(即解除链接)

-d --directory 删除可能仍有数据的目录 (只限超级用户)

-f --force 略过不存在的文件,不显示任何信息

-r/R --recursive 同时删除该目录下的所有目录层(一般删除文件夹带上)

rm *.rb:删除所有以.rb结尾的文件

移动文件 mv 重命名也用此命令

mv 选项 源文件或目录 目标文件或目录

-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;

-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!

mv test.log test1.txt:相当于修改文件名

cat more less head tail

cat 是一次性显示整个文件的内容,还可以将多个文件连接起来显示,它常与重定向符号配合使用,适用于文件内容少的情况;

cat file1 file2 > file 这是它的特殊能力 cat file1 file2 表示一次性显示两个文件的内容

cat -n a.txt:-n参数,会在输出前面加上行号 效果等同于 nl a.txt

more和less一般用于显示文件内容超过一屏的内容,并且提供翻页的功能。more比cat强大,提供分页显示的功能,

less比more更强大,提供翻页,跳转,查找等命令。而且more和less都支持:用空格显示下一页,按键b显示上一页。

more

+num 从第num行开始显示;

我们查看一个内容较大的文件时,要用到more的动作指令,比如ctrl+f(或空格键) 是向下显示一屏,ctrl+b是返回上一屏;

常用命令:

Enter 向下n行 一般慢慢滚动这样用

Ctrl+f / 空格键 向下滚动一屏

Ctrl+b 返回上一屏

:f 输出文件名和当前行的行号;

集合管道符使用

比如我们列一个目录下的文件,由于内容太多,我们应该学会用more来分页显示。这得和管道 | 结合起来,比如:

 ls -l /etc |more 

more默认会显示文件百分比。而less需要加参数-m / -M

less

less几乎可以完全代替more命令,并且功能更加强大。

-M 显法读取文件的百分比、行号及总行数;

-p pattern 搜索pattern;比如在/etc/profile搜索单词MAIL,就用 less -p MAIL /etc/profile

less中的命令

Enter 向下移动一行;

y 向上移动一行;

空格键 / b 向下滚动一屏;

b 向上滚动一屏;

w 可以指定显示哪行开始显示,是从指定数字的下一行显示;比如指定的是6,那就从第7行显示;

g 跳到第一行;

G 跳到最后一行;

/pattern 搜索pattern ,比如 /MAIL表示在文件中搜索MAIL单词;

v 调用vi编辑器;

q 退出less

head

head 是显示一个文件的内容的前多少行; 用法比较简单

head -n 行数值 文件名;

比如我们显示/etc/profile的前10行内容,应该是:

 head -n 10 /etc/profile 
tail(非常有用)

tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案内容。

tail -n 行数值 文件名;

比如我们显示/etc/profile的最后5行内容,应该是:

tail -n 5 /etc/profile 

备注:最后一条命令tail非常有用,尤其在监控日志文件时,可以在屏幕上一直显示新增的日志信息。

-f 该参数用于监视File文件增长。(监控日志需要加上此参数) 默认显示10行

-n Number:从 Number 行位置读取指定文件。(使用较多)

tail -f -n100 README
二进制显示文件 od

od 文件名,就会以二进制显示内容。全是0和1 使用较少

>和>>指令

重定向命令其实用得不少

> 是重定向到一个文件(会覆盖原有的内容),>>是追加内容到文件。两个命令都是如果文件不存在则创建文件。

查看命令历史 history

可以按一下上\下方向键,命令行就会显示相对于当前命令的上一条或下一条历史记录.但如果太多了,那就得使用history了

history n n为数字,列出最近的n条命令 n不指定,默认值为200条

所有命令记录在这里:~/.bash_history

使用! 执行历史命令。

  • ! number 执行第几条命令
  • ! command 从最近的命令查到以command开头的命令执行
  • !! 执行上一条
查看系统时间、日期 date、cal

直接输出date、cal能看到系统当前时间、日期、日历等等

格式化输出:date +%Y-%m-%d 输出为: 2018-12-28

cal 2018 :会把2018年12个月的日历都打印出来

cal 12 2018:这查看的是2018年12月指定月的日历

搜索查找 find、locate、grep、whereis、which

先说两个最轻量级的查找whereis、which。

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

which 查看可执行文件的位置

whereis 查看文件的位置

locate 配 合数据库查看文件位置

find 实际搜寻硬盘查询文件名称

find

-name 文件名查找

-user 文件所属查找

-size 文件大小查找 +大于 -小于

find /usr -name a.txt 在目录/usr下查找名字叫a.txt的文件

find /usr -user root 查找目录下文件所属为root的目录和文件

find /usr -size +20M /usr目录下所有大于20M的文件

多参数可以联合使用

locate

使用locate数据库快速查找,无需遍历整个文件系统,所以效率还是蛮高的。需要定期更新locate数据库;第一次执行时,updatedb创建locate数据库。执行前,可先执行一遍updatedb命令。。。

缺点:centos系统要使用此命令,请先安装:

yum -y install mlocate

然后执行updatedb

locate命令要比find -name快得多

grep

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

常用参数:

-w或–word-regexp 只显示全字符合的列。

-c或–count 计算符合范本样式的列数。

–color :将匹配到的内容以颜色高亮显示。 这个还挺好用的

# 若有如下文本
db.username=xbk_classroom
slave.db.username=xbk_classroom
slave1.db.username=xbk_classroom
user.ribbon.listOfServers=http://10.102.131.176:9090
isolation.db.username=xbk_classroom

grep user -c    结果为:5   效果同grep -c user
grep user -wc   结果为:1(完整匹配,所以经常使用)  grep -wc user

pattern正则表达式主要参数:

\: 忽略正则表达式中特殊字符的原有含义。

^:匹配正则表达式的开始行。

$: 匹配正则表达式的结束行。

<:从匹配正则表达 式的行开始。

:到匹配正则表达式的行结束。

:单个字符,如A即A符合要求 。

- :范围,如A-Z,即A、B、C一直到Z都符合要求 。

。:所有的单个字符。

* :所有字符,长度可以为0。

使用案例:

grep ‘test’ d* #显示所有以d开头的[文件中]包含 test的行。
grep ‘[a-z]\{5\}’ aa #显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
grep man * #会匹配 ‘Batman’、’manic’、’man’等,
grep ‘\<man’ * #匹配’manic’和’man’,但不是’Batman’,
grep ‘\<man\>’ #只匹配’man’,而不是’Batman’或’manic’等其他的字符串。

‘^’:指匹配的字符串在行首,
‘$’:指匹配的字符串在行 尾,


grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep -n pattern files  即可显示行号信息

我常用的:grep -A(后面N行) -B(前面N行) -C(前后N行)

过滤符。将前一个命令的结果,通过管道符进行过滤

| 管道命令,将前面命令的处理结果传递给后一个处理

cat a.txt | grep -ni hello 把a.txt的文件内容传递给grep过滤,grep过滤出所有hello字段,-n表示显示行号,-i表示不区分大小写

也可以直接使用:

grep -n aaa /home/a.txt --在home文件下的a.txt查找含有aaa字符的行数(区分大小写匹配aaa)

统计出现的次数 |wc -l

如:

grep -n You README |wc -l

输出: 这样只会输出一个总次数数字了

6
压缩与解压

习惯上以.tar后缀代表tar包,用xxx.tar.gz或.tgz代表gzip压缩过的tar文件,用.tar.bz2代表bzip2压缩过的tar文件。

tar

打包:将一大堆文件或目录变成一个总的文件【tar命令】

压缩:将一个大的文件通过一些压缩算法变成一个小文件【gzip,bzip2等】

只是打包动作,相当于归档处理,不做压缩;解压也一样,只是把归档文件释放出来。

tar [主选项+辅选项] 文件们或目录

主选项:【一条命令以下5个参数只能有一个

-c: --create 新建一个压缩文档,即打包

-x: --extract,–get解压文件(解压的时候使用)

-t: --list,查看压缩文档里的所有内容

-r:–append 向压缩文档里追加文件

-u:–update 更新原压缩包中的文件

辅助选项(可多个):

-v:显示操作过程!这个参数很常用

-f:使用文档名,注意,在f之后要立即接文档名,不要再加其他参数!

-z:是否同时具有gzip的属性?即是否需要用gzip压缩或解压?一般格式为xxx.tar.gz或xx.tgz

-j:是否同时具有bzip2的属性?即是否需要用bzip2压缩或解压?一般格式为xx.tar.bz2

常用组合为:

将img1和img2两个文件夹打包成img.tar,仅打包不压缩

tar -cvf img.tar img1 img2

将img1和img2两个文件夹打包成img.tar.gz,打包后,以gzip压缩

tar -zcvf img.tar.gz img1 img2

解压:tar -tf img.tar这个不解压直接查看

tar -xvf file.tar //解压 tar包

gzip、gunzip、zip、unzip

gzip 是linux中常见的压缩/解压工具,最常见的使用对象是*.gz格式的文件

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年01月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 相关阅读
  • 前言
  • Linux的体系架构
  • Linux的学习阶段
  • Linux的目录结构
  • 常用命令
    • man:帮助命令
      • ping和telnet
        • Linux查看系统版本、内核信息
          • Linux中的SSHD服务
            • SSH命令
              • scp(ssh提供的功能支持)
                • rsync
                  • sudo和su
                    • 关机重启相关命令:
                      • exit和logout
                        • 创建目录 mkdir
                          • 删除目录 rmdir
                            • 创建文件 touch
                              • 拷贝 cp
                                • 删除文件(夹) rm
                                  • 移动文件 mv 重命名也用此命令
                                    • cat more less head tail
                                      • less
                                        • head
                                          • tail(非常有用)
                                            • 二进制显示文件 od
                                              • >和>>指令
                                                • 查看命令历史 history
                                                  • 查看系统时间、日期 date、cal
                                                    • 搜索查找 find、locate、grep、whereis、which
                                                      • grep
                                                        • 统计出现的次数 |wc -l
                                                          • 压缩与解压
                                                          领券
                                                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档