专栏首页BAT的乌托邦【小家运维】达到Linux第三阶段的常用命令笔记记录---PartⅠ

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

相关阅读

【小家运维】达到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] [-p port] [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 -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格式的文件

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【小家Spring】资源访问利器---Spring使用ResourceLoader接口便捷的获取资源(ResourcePatternResolver、ResourceLoaderAware)

    关于Spring Framework中资源的访问,上篇已经讲解了org.springframework.core.io.Resource接口,它有非常多的实现类...

    BAT的乌托邦
  • 【小家运维】达到Linux第三阶段的常用命令笔记记录---Part Ⅱ

    Linux是一个多用户多任务的操作系统,任何一个要使用系统资源,都需要先向管理员申请一个帐号,然后以这个帐号的身份登录进系统。

    BAT的乌托邦
  • 【小家Spring】聊聊Spring中的格式化:Formatter、AnnotationFormatterFactory、DateFormatter以及@DateTimeFormat...

    Converter只完成了数据类型的转换,却不负责输入输出数据的格式化工作,日期时间、货币等虽都以字符串形式存在,却有不同的格式。

    BAT的乌托邦
  • Linux文件和目录管理相关命令(一)

    从今天起小编将为大家带来一系列的Linux文件和目录管理的相关命令,正在做Linux运维工程师的小伙伴,来看一看希望对你有帮助哦~

    小小科
  • Web-第十九天 Linux学习【悟空教程】

    UNIX操作系统是商业版,需要收费,价格比Microsoft Windows正版要贵一些。不过UNIX有免费版的,例如:NetBSD等类似UNIX版本。

    奋斗蒙
  • 你真的了解Linux系统吗?

    现在很多公司项目部署都使用的是 Linux 服务器,互联网公司更是如此。对于大一些的互联网公司,系统可能会非常复杂,本地无法启动,一般都会采用专门的开发机给开发...

    谭庆波
  • Linux笔记1

    章鱼喵
  • Linux 需要的常用操作,你只差这篇文章

    Linux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境。Linux是由Linus Torvalds(林纳斯·托...

    好好学java
  • 前端应该会的23个linux常用命令

    Linux ls 命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。

    null仔
  • 史上最全Linux命令科普 | 常见命令的名称是怎么来的?

    1 目录缩写 缩写 | 全称 | 说明 --- | --- | --- | /bin | BINaries | 二进制可执行命令 /dev | DEVices...

    小小科

扫码关注云+社区

领取腾讯云代金券