本次linux教程分为4个部分。本次linux教程分为4个部分。涉及到的知识点有很多。对于初学者来说应该会有很大帮助的。

这次总结的内容大部分是我的老师(贺老师)总结的一个笔记。而后我参考教材《linux教程(第四版)》进行了又一次的整理。


第 1 章 Linux系统概述

1.2 操作系统的功能

Linux系统把计算机系统中的硬件资源和软件资源结合到了一起,从而提供丰富的功能,包括:控制硬件,管理资源,提供用户接口,处理输入、输出,监控系统,通信。

其中用户接口中,最重要的是命令行接口。

[root@heqiuyu ~]# uname -a //打印系统信息
Linux heqiuyu 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

在Unix/Linux系统中, 通常将命令解释程序成为shell,各种Linux环境中都安装了多种shell,默认的是bash,常见的shell有,Bourne shell(sh), C shell(csh),Bourne Again shell(bash),ksh,zsh

#是超级用户root 的提示符,普通用户提示符是$

1.3 Linux系统的历史、现状和特点

1984年,曾经是Bill Gates哈佛大学同学的Richard Stallman组织开发了一个完全基于自由软件体系计划GNU(GNU is Not UNIX.的递归缩写),并且拟定了一份通用公共许可证(General Public License,GPL)

Linux 的主要应用有服务器领域、嵌入式、云计算
Linux的主要特点
  • 与UNIX系统兼容
  • 自由软件和源码公开
  • 性能高和安全性强
  • 便于定制和再开发
  • 互操作性强
  • 多任务操作系统
发型版本
RedHat

Red Hat(红帽)公司(NYSE:RHT)是一家开源解决方案供应商,也是标准普尔500指数成员。总部位于美国北卡罗来纳州的罗利市,截止2015年3月3日,共有80多个分公司。红帽公司为诸多重要IT技术如操作系统、存储、中间件、虚拟化和云计算提供关键任务的软件与服务。红帽的开放源码模式提供跨物理、虚拟和云端环境的企业运算解决方案,以帮助企业降低成本并提升效能、稳定性与安全性。红帽公司同时也为全球客户或通过领先合作伙伴为客户提供技术支持、培训和咨询服务。

Debian

广义的Debian是指一个致力于创建自由操作系统的合作组织及其作品,由于Debian项目众多内核分支中以Linux宏内核为主,而且 Debian开发者 所创建的操作系统中绝大部分基础工具来自于GNU工程 ,因此 “Debian” 常指Debian GNU/Linux。

Ubuntu

Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu 是基于Debian GNU/Linux,支持x86、amd64(即x64)和ppc架构,由全球化的专业开发团队(Canonical Ltd)打造的。

Centos 该版本国内互联网公司使用最多

CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。

Kali 黑客专用的Liux版本

Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。由Offensive Security Ltd维护和资助。最先由Offensive Security的Mati Aharoni和Devon Kearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行版 。
Kali Linux预装了许多渗透测试软件,包括nmap 、Wireshark 、John the Ripper ,以及Aircrack-ng.[2] 用户可通过硬盘、live CD或live USB运行Kali Linux。Kali Linux既有32位和64位的镜像。可用于x86 指令集。

1.6 虚拟机安装Linux系统

目前,Linux系统主要采用两种桌面系统环境是KDE和GNOME,对于专业人员可以直接越过桌面环境,直接学习命令行。
对于windows环境,大家可以通过安装虚拟软件的方式安装Linux环境,即在windows安装VMware Workstation 或者 Virtual Box .

vmware workstation网卡模式

对于vmware workstation 使用中,网卡有三种使用方式非常有需要了解:
VMware Workstation 里有以下几种网卡模式:

  1. birdged:桥接模式

  VMware Workstation 上的虚拟机就像是网络上的一台独立主机,可以访问网络上任何一台机器,有自己独立的 IP,甚至可以通过 gateway,route 访问其他网络上的机器。

  2. NAT:地址转换模式

  VMware Workstation 上的虚拟机可以与主机共享一个 IP

  3. host-only:主机模式

  VMware Workstation 上的只能与主机通讯(就相当于两台机器通过双绞线互联)
  
  
  

1.7 windows访问Linux命令行的客户端软件

putty

PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。较早的版本仅支持Windows平台,在最近的版本中开始支持各类Unix平台,并打算移植至Mac OS X上。除了官方版本外,有许多第三方的团体或个人将PuTTY移植到其他平台上,像是以Symbian为基础的移动电话。PuTTY为一开放源代码软件,主要由Simon Tatham维护,使用MIT licence授权。随着Linux在服务器端应用的普及,Linux系统管理越来越依赖于远程。在各种远程登录工具中,Putty是出色的工具之一。Putty是一个免费的、Windows x86平台下的Telnet、SSH和rlogin客户端,但是功能丝毫不逊色于商业的Telnet类工具。

xshell

Xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。

SecureCRT

SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件。
SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的理想工具。通过使用内含的VCP命令行程序可以进行加密文件的传输。

作为过来人,三个软件我均有使用,对于网络工程师配置网络设备建议使用SecureCRT,对于专门使用Linux的人来说,建议使用xshell.putty属于轻量级工具,占用空间非常小,也值得推荐。

第 2 章 Linux 常用命令

2.1 使用命令

通过xshell客户端连接至linux命令行

root@ubuntu17:~# ssh 10.10.XXX.XXX
Last login: Sun Apr 29 22:27:45 2018 from 10.10.XXX.XXX
[root@heqiuyu ~]# 

对于bash,命令的一般格式是:

命令名 [选项] [参数1] [参数2]

如果一个命令太长,一行放不下,要在第一行行尾输入 ,并按回车键,这个时候shell 会返回一个大于号 >作为提示符,表示该命令尚未结束

[root@heqiuyu ~]# echo "Last login: Sun Apr 29 22:27:45 2018 from 10.10.xxx.xxx,Last login: Sun Apr 29 22:27:45 2018 from 10.10.xxx.xxx \
> Last login: Sun Apr 29 22:27:45 2018 from 10.10.xxx.xxx"
Last login: Sun Apr 29 22:27:45 2018 from 10.10.xxx.xxx,Last login: Sun Apr 29 22:27:45 2018 from 10.10.xxx.xxx Last login: Sun Apr 29 22:27:45 2018 from 10.10.xxx.xxx

以cp 命令为例,cp 复制文件

[root@heqiuyu ~]# cp -i 1 2 
cp 是命令复制, -i 是选项,表面交互式复制,1,2 是参数,1代表源文件,2代表目标文件,这条命令是复制1文件一个副本2
cp

我们接触的第一个命令是cp(每个命令我都会标明)

date

我们接触的第二个命令是date,显示或者修改日期和时间
不加任何参数,输出当前的日期和时间

[root@heqiuyu ~]# date 
2018年 04月 29日 星期日 23:07:22 PDT

[root@heqiuyu ~]# date +"%Y-%m-%d"  格式化输出
2018-04-29

以下是具体选项

  • -%H 小时(以00-23来表示)。
  • %I 小时(以01-12来表示)。
  • %K 小时(以0-23来表示)。
  • %l 小时(以0-12来表示)。
  • %M 分钟(以00-59来表示)。
  • %P AM或PM。
  • %r 时间(含时分秒,小时以12小时AM/PM来表示)。
  • %s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
  • %S 秒(以本地的惯用法来表示)。
  • %T 时间(含时分秒,小时以24小时制来表示)。
  • %X 时间(以本地的惯用法来表示)。
  • %Z 市区。
  • %a 星期的缩写。
  • %A 星期的完整名称。
  • %b 月份英文名的缩写。
  • %B 月份的完整英文名称。
  • %c 日期与时间。只输入date指令也会显示同样的结果。
  • %d 日期(以01-31来表示)。
  • %D 日期(含年月日)。
  • %j 该年中的第几天。
  • %m 月份(以01-12来表示)。
  • %U 该年中的周数。
  • %w 该周的天数,0代表周日,1代表周一,异词类推。
  • %x 日期(以本地的惯用法来表示)。
  • %y 年份(以00-99来表示)。
  • %Y 年份(以四位数来表示)。
  • %n 在显示时,插入新的一行。
  • %t 在显示时,插入tab。
  • MM 月份(必要)
  • DD 日期(必要)
  • hh 小时(必要)
  • mm 分钟(必要)
  • ss 秒(选择性)

2.2 简单命令

who

这是我们接触的第三个命令,列出正在系统登陆的用户

whoami

这是我们接触的第四个命令,列出当前用户身份

[root@heqiuyu ~]# who
root     pts/0        2018-04-29 22:59 (10.10.9.190)
heqiuyu  pts/1        2018-04-26 01:39 (10.10.9.190)
root     pts/2        2018-04-28 05:34 (10.10.9.190)
[root@heqiuyu ~]# whoami
root
echo

这是我们接触的第五个命令,输出到屏幕里面

[root@heqiuyu ~]# echo "name"
name
cal

这是我们接触的第六个命令,日历命令,默认不加参数,可以单独加年或者 月、年
如下:

[root@heqiuyu ~]# cal   //不加参数
      四月 2018     
日 一 二 三 四 五 六
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30


[root@heqiuyu ~]# cal 2018  //年参数
                               2018                               

        一月                   二月                   三月        
日 一 二 三 四 五 六   日 一 二 三 四 五 六   日 一 二 三 四 五 六
    1  2  3  4  5  6                1  2  3                1  2  3
 7  8  9 10 11 12 13    4  5  6  7  8  9 10    4  5  6  7  8  9 10
14 15 16 17 18 19 20   11 12 13 14 15 16 17   11 12 13 14 15 16 17
21 22 23 24 25 26 27   18 19 20 21 22 23 24   18 19 20 21 22 23 24
28 29 30 31            25 26 27 28            25 26 27 28 29 30 31

        四月                   五月                   六月        
日 一 二 三 四 五 六   日 一 二 三 四 五 六   日 一 二 三 四 五 六
 1  2  3  4  5  6  7          1  2  3  4  5                   1  2
 8  9 10 11 12 13 14    6  7  8  9 10 11 12    3  4  5  6  7  8  9
15 16 17 18 19 20 21   13 14 15 16 17 18 19   10 11 12 13 14 15 16
22 23 24 25 26 27 28   20 21 22 23 24 25 26   17 18 19 20 21 22 23
29 30                  27 28 29 30 31         24 25 26 27 28 29 30

        七月                   八月                   九月        
日 一 二 三 四 五 六   日 一 二 三 四 五 六   日 一 二 三 四 五 六
 1  2  3  4  5  6  7             1  2  3  4                      1
 8  9 10 11 12 13 14    5  6  7  8  9 10 11    2  3  4  5  6  7  8
15 16 17 18 19 20 21   12 13 14 15 16 17 18    9 10 11 12 13 14 15
22 23 24 25 26 27 28   19 20 21 22 23 24 25   16 17 18 19 20 21 22
29 30 31               26 27 28 29 30 31      23 24 25 26 27 28 29
                                              30
        十月                  十一月                 十二月       
日 一 二 三 四 五 六   日 一 二 三 四 五 六   日 一 二 三 四 五 六
    1  2  3  4  5  6                1  2  3                      1
 7  8  9 10 11 12 13    4  5  6  7  8  9 10    2  3  4  5  6  7  8
14 15 16 17 18 19 20   11 12 13 14 15 16 17    9 10 11 12 13 14 15
21 22 23 24 25 26 27   18 19 20 21 22 23 24   16 17 18 19 20 21 22
28 29 30 31            25 26 27 28 29 30      23 24 25 26 27 28 29
                                              30 31

[root@heqiuyu ~]# cal 04 2018  //月年参数
      四月 2018     
日 一 二 三 四 五 六
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

clear

这是我们接触的第七个命令,清空屏幕信息,等同于ctrl+l

passwd 修改密码

这是我们接触的第八个命令,Linux 的帐号信息保存在了/etc/passwd文件中

[root@heqiuyu ~]# head -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

每一行一共七列,分别是帐号,密码,用户id,组id,家目录,帐号描述,shell版本
修改密码:
[root@heqiuyu ~]# passwd 
Changing password for user root. 修改root 的密码
New password:   //密码是不显示到屏幕的
BAD PASSWORD: is too simple
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@heqiuyu ~]# 

2.3 文件概念和文件类型

Linux的文件系统其实就是目录和文件,就类似于windows的资源管理器,但是在Linux当中没有cde盘符的概念,Linux最上层就是 /,即根目录

下面我们看一下根目录下面有什么内容

[root@heqiuyu ~]# ls /
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var

/etc 是linux系统的配置文件的文件夹
/root 是超级用户的家目录
/home是普通用户的家目录

[root@heqiuyu ~]# ls -al
total 268
dr-xr-x---. 26 root    root     4096 4月  29 22:27 .
dr-xr-xr-x. 22 root    root     4096 4月  16 01:00 ..
-rw-r--r--.  1 root    root        6 4月  26 01:52 11
-rw-r--r--.  1 root    root        8 4月  24 05:04 111.sh
-rw-r--r--.  1 root    root       32 4月  24 05:07 112.sh
-rw-r--r--.  1 root    root        0 4月  26 01:55 12
-rw-r--r--.  1 root    root      114 4月  24 04:54 1.sh
-rwxr-xr-x.  1 root    root       34 4月  24 04:23 2.sh
drwxr-xr-x.  2 root    root     4096 4月  26 05:12 456
drwxr-xr-x.  2 root    root     4096 4月  24 04:51 array
-rw-------.  1 root    root    13577 4月  29 22:59 .bash_history
-rw-r--r--.  1 root    root       18 5月  20 2009 .bash_logout
-rw-r--r--.  1 root    root      176 5月  20 2009 .bash_profile
-rw-r--r--.  1 root    root      176 9月  22 2004 .bashrc
drwxr-xr-x.  2 root    root     4096 4月  18 00:41 c
drwxr-xr-x.  3 root    root     4096 4月   3 12:33 .cache
-rw-r--r--.  1 root    root       20 4月  26 02:05 canshu.sh
-rw-r--r--.  1 root    root        0 4月  26 01:52 ccc
drwxr-xr-x.  4 root    root     4096 4月   3 12:29 .config
-rw-r--r--.  1 root    root      100 9月  22 2004 .cshrc
-rw-r--r--.  1 tcpdump tcpdump   472 4月  23 20:08 data
drwx------.  3 root    root     4096 4月   3 12:29 .dbus
drwxr-xr-x.  2 root    root     4096 4月   3 12:29 Desktop
ls

这是我们接触的第9个命令,列出文件和目录

  • -a 列出所有的文件
  • -l 长格式显示
  • .开始的文件是隐藏文件,第一列中drwxr-xr-x.,d代表目录directory,-表示文本文件,l代表链接文件

2.4文件操作命令

cat

这是我们接触的第10个命令,显示文件内容,主要参数有

  • -n 输出行号
  • -b 输出所有非空行
[root@heqiuyu ~]# cat for2.sh  //显示for2.sh
#!/bin/bash
for i in 100 300 500 1000
do
echo $i 
done
[root@heqiuyu ~]# cat for2.sh for3.sh  //显示文件for2.sh for3.sh的内容
#!/bin/bash
for i in 100 300 500 1000
do
echo $i 
done
#!/bin/bash
read a b
for i in `seq $a $b`
do
echo `expr $i \* 10`
done
[root@heqiuyu ~]# cat for2.sh > for22.sh  把for2.sh 写入for22.sh
[root@heqiuyu ~]# 
more

这是我们接触的第11个命令,分屏显示文件内容
空格键,显示下一屏内容
回车显示下一行
q,退出

less

这是我们接触的第12个命令,分屏显示文件内容,但是可以向上翻页,ctr+f 向前翻页
ctrl+b 向后翻页

[root@heqiuyu ~]# dmesg | less



Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 2.6.32-696.el6.x86_64 (mockbuild@c1bm.rdu2.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) ) #1 SMP Tue Mar 21 19:29:05 UTC 2017
Command line: ro root=UUID=859c615d-1f0c-42e6-903b-9847813ed071 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_
Linux version 2.6.32-696.el6.x86_64 (mockbuild@c1bm.rdu2.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) ) #1 SMP Tue Mar 21 19:29:05 UTC 2017
Command line: ro root=UUID=859c615d-1f0c-42e6-903b-9847813ed071 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
KERNEL supported cpus:
  Intel GenuineIntel
  AMD AuthenticAMD
  Centaur CentaurHauls
Disabled fast string operations
BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000009ec00 (usable)
 BIOS-e820: 000000000009ec00 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 000000007fee0000 (usable)
 BIOS-e820: 000000007fee0000 - 000000007feff000 (ACPI data
 
head

这是我们接触的第13个命令,显示文件开头的前多少行,默认10行,参数 -n

[root@heqiuyu ~]# cat /etc/passwd | head -5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
tail

这是我们接触的第14个命令,显示文件结尾的后多少行,默认10行,参数 -n

典型例子
输出一个文件的4行到8行,| 代表的是管道符号

[root@heqiuyu ~]# seq 10 | head -8 | tail -4 
5
6
7
8
touch

这是我们接触的第15个命令,创建空文件或者修改文件的时间戳
参数-a 修改创建时间,-m 改名修改时间

典型例子
创建1.2.3..10 等是个文件

[root@heqiuyu 10]# touch {1..10}.txt
[root@heqiuyu 10]# ls -al
total 8
drwxr-xr-x.  2 root root 4096 4月  30 00:25 .
dr-xr-x---. 27 root root 4096 4月  30 00:25 ..
-rw-r--r--.  1 root root    0 4月  30 00:25 10.txt
-rw-r--r--.  1 root root    0 4月  30 00:25 1.txt
-rw-r--r--.  1 root root    0 4月  30 00:25 2.txt
-rw-r--r--.  1 root root    0 4月  30 00:25 3.txt
-rw-r--r--.  1 root root    0 4月  30 00:25 4.txt
-rw-r--r--.  1 root root    0 4月  30 00:25 5.txt
-rw-r--r--.  1 root root    0 4月  30 00:25 6.txt
-rw-r--r--.  1 root root    0 4月  30 00:25 7.txt
-rw-r--r--.  1 root root    0 4月  30 00:25 8.txt
-rw-r--r--.  1 root root    0 4月  30 00:25 9.txt
grep

这是我们接触的第16个命令,linux三剑客之一,非常重要,查找字符串
参数

  • c 字符匹配的行数
  • i 不区分大小写
  • v 反向查找,输出不包含字符的行
  • A 匹配后输出行数
  • B 匹配前输出行数
  • C 上下文行数

输出一个文件的4行到8行

[root@heqiuyu ~]# seq 10 | head -8 | tail -4 
5
6
7
8

[root@heqiuyu 10]# seq  10 | grep 5 -A 3
5
6
7
8

[root@heqiuyu 10]# seq  10 | grep  8 -B 3
5
6
7
8

[root@heqiuyu 10]# seq  10 | grep 7 -C 2
5
6
7
8
9

sort

这是我们接触的第17个命令,对文件各行进行排序
参数

  • -d 按照字典目录排序
  • -r 逆向排序
  • -f 忽略大小写
uniq

这是我们接触的第17个命令,去除重复行

-c 计数

[root@heqiuyu ~]# last | awk '{print $1 " \t " $3}' | uniq -c 
      6 root      10.10.xxx.xxx
      1 heqiuyu      10.10.xxx.xx
      8 root     10.10.xxx.xx
      1 heqiuyu      10.10.xxx.xx
      1 root      10.10.xxx.xx
      1 reboot      boot
     13 root      10.10.xxx.xx
      1 heqiuyu      10.10.xxx.xx
      4 root      10.10.xxx.xx
      2 root      10.10.xxx.xx
      2 root      10.10.xxx.xx
      3 root      :0.0
      1 root      :0
      1 reboot      boot
      1       
      1 wtmp      Tue
common

这是我们接触的第18个命令,比较文件的内容

diff

这是我们接触的第19个命令,比较文件的内容

最后修改:2018 年 05 月 17 日 03 : 17 PM
生活需要一些仪式感,比如手冲一杯咖啡:)