目录
初始Linux操作系统
Linux背景:
开源 :
发行版本:
编辑 OS概念,定位:
使用 XShell 远程登录 Linux
Linux相关知识
文件是什么?
路径分隔符
(.) 和 (. .)
Linux中整个文件的目录储存结构
绝对路径和相对路径
用户家目录
终止异常
Linux基础指令
查看当前用户:who am i
获取帮助信息
man指令(Linux的指令手册)
help指令
文件目录类
pwd指令
ls指令
cd 指令
touch指令
mkdir 指令 & rmdir和rm指令
tree指令
cp指令
mv指令
cat指令
more指令
less指令
headl指令
tail指令
history指令
时间日期类
date指令
cal指令
搜索查找类
find指令
which指令
grep指令
压缩与解压缩
zip指令
unzip指令
(未完待续)
·1991年10月5日,赫尔辛基大学的一名研究生Linus Benedict Torvalds在一个Usenet新闻组(comp.os.minix)中宣布他编制出了一种类似UNIX的小操作系统,叫Linux。新的操作系统是受到另一个UNIX的小操作系统——Minix的启发,该系统是由一名叫Andrew S Tanenbaum的教师开发的。读者也许猜想所发布的这个系统应该是Linux的0.01版本,实际上不是这样。真正的Linux 0.01版本并没有被发布,原因是0.01版本不实用。Linus仅仅在第一个Linux的FTP站点(ftp://nic.funet.fi)上提供过这个版本的的源代码。
·Torvalds于10月5日发布的这个Linux版本被称为0.02版,它能够运行GNU Bourne Again Shell(bash)和GNU的C编译程序(gcc)以及为数不多的其它语言。Torvalds绝对没有想到他设想的一种能够针对高级业余爱好者和黑客们的操作系统已经产生,这就是人们所称的Linux。
·Linux发布时的版本是0.02,后来又有0.03版,然后又跳到0.10版。因为世界各地越来越多的程序员都开始开发Linux,它已经达到0.95版。这就意味着正是公布1.0版本的时间已经为期不远了,正式的1.0版本是在1994年公布的!
Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。严格来讲,Linux只是操作系统内核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统, 它包括GUI组件和许多其他实用工具。
DebianDebian运行起来极其稳定,这使得它非常适合用于服务器。 debian这款操作系统无疑并不适合新手用户,而是适合系统管理员和高级用户。UbuntuUbuntu是Debian的一款衍生版,也是当今最受欢迎的免费操作系统。Ubuntu侧重于它在这个市场的应用,在服务器、云计算、甚至一些运行Ubuntu Linux的移动设备上很常见。Ubuntu是新手用户肯定爱不释手的一款操作系统。红帽企业级Linux这是第一款面向商业市场的Linux发行版。它有服务器版本,支持众多处理器架构,包括x86和x86_64。红帽公司通过课程红帽认证系统管理员/红帽认证工程师(RHCSA/RHCE),对系统管理员进行培训和认证。CentOSCentOS是一款企业级Linux发行版,它使用红帽企业级Linux中的免费源代码重新构建而成。这款重构版完全去掉了注册商标以及Binary程序包方面一个非常细微的变化。有些人不想支付一大笔钱,又能领略红帽企业级Linux;对他们来说,CentOS值得一试。此外,CentOS的外观和行为似乎与母发行版红帽企业级Linux如出一辙。 CentOS使用YUM来管理软件包。Fedora小巧的Fedora适合那些人:想尝试最先进的技术,等不及程序的稳定版出来。其实,Fedora就是红帽公司的一个测试平台;产品在成为企业级发行版之前,在该平台上进行开发和测试。Fedora是一款非常好的发行版,有庞大的用户论坛,软件库中还有为数不少的软件包。Kali LinuxKali Linux是Debian的一款衍生版。Kali旨在用于渗透测试。Kali的前身是Backtrack。用于Debian的所有Binary软件包都可以安装到Kali Linux上,而Kali的魅力或威力就来自于此。此外,支持Debian的用户论坛为Kali加分不少。Kali随带许多的渗透测试工具,无论是Wifi、数据库还是其他任何工具,都设计成立马可以使用。Kali使用APT来管理软件包。毫无疑问,Kali Linux是一款渗透测试工具,或者是文明黑客(我不想谈论恶意黑客)青睐的操作系统。
使用 XShell 登陆主机
ssh [ip]
ip 为刚才看到的 ifconfig 结果. 如果网络畅通, 将会提示输入用户名密码. 输入即可正确登陆
文件 = 属性 + 内容
/ :是Linux下的路径分隔符!
\:是windows下的路径分隔符!
在任何目录下都会默认具有两个隐藏目录 . 和 …
(.):用它表示当前路径
(. .) :用它返回上一级路径
多叉树
绝对路径必须从根目录开始,按其他任何顺序的路径找到目标文件。
相对路径一般是从兄弟路径找到目标文件,一般存在路径的回退(. .)
windows的用户家目录
Linux中
对于root账号: 默认的家目录是:/root-----是超级管理员的账号!
对于普通用户:默认家目录是:/home/XXX,XXX是你新创建的用户名!
对于任何一个用户,首次登录的时候,默认当前的路径就是自己的家目录。
当指令失控疯狂的打印一些东西的时候,我们一直按住CTRL+c直到正常。
man[命令或配置文件]
演示:
[root@hcss-ecs-3e32 ~]# man pwd
手册分为8章
1 是普通的命令(常用)
2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件(常用)
5 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6 是给游戏留的,由各个游戏自己定义
7 是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8 是系统管理用的命令,这些命令只能由root使用
安装:
yum -y install man
help命令 获取shell内置命令的帮助信息
演示:
[root@hcss-ecs-3e32 ~]# help cd
提示:退出阅读,按q;清屏,输入clear
显示当前工作目录的绝对路径
演示:
[root@hcss-ecs-3e32 ~]# pwd
/root
语法:ls [选项][目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:
- a 列出目录下的所有文件,包括以 . 开头的隐含文件。
- d 将目录像文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
- i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件
- k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
- l 列出文件的详细信息。
- n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
- F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。(目录类型识别)
- r 对目录反向排序。
- t 以时间排序。
- s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
- R 列出所有子目录下的文件。(递归)
- 1 一行只输出一个文件。
演示(仅演示部分):
[root@hcss-ecs-3e32 ~]# ls
a.out big.txt code.c
[root@hcss-ecs-3e32 ~]# ls -a
. .bash_history .bashrc code.c .pki
.. .bash_logout big.txt .cshrc .ssh
a.out .bash_profile .cache .history .tcshrc
[root@hcss-ecs-3e32 ~]# ls -d
.
[root@hcss-ecs-3e32 ~]# ls -s
total 184
12 a.out 168 big.txt 4 code.c
cd + 路径
cd 绝对路径 | 切换路径 |
cd 相对路径 | 切换路径 |
cd ~ 或者 cd | 回到自己的家目录 |
cd - | 回到上一次目录 |
cd .. | 回到当前目录的上一级目录 |
cd -P | 跳转到实际物理路径,而非快捷方式路径 |
演示:
[root@hcss-ecs-3e32 ~]# cd
[root@hcss-ecs-3e32 ~]# cd -
/root
[root@hcss-ecs-3e32 ~]# cd ..
touch + 文件名
通常用来创建文件,也可以用来更改时间
演示:
[root@hcss-ecs-3e32 ~]# touch 001.c
[root@hcss-ecs-3e32 ~]# ll
total 184
-rw-r--r-- 1 root root 0 Nov 26 13:23 001.c //新建了001.c
[root@hcss-ecs-3e32 ~]# touch 001.c
[root@hcss-ecs-3e32 ~]# ll
total 184
-rw-r--r-- 1 root root 0 Nov 26 13:24 001.c //时间改变了
rmdir是一个与mkdir相对应的命令。mkdir是建立目录,而rmdir是删除目录。
语法:mkdir [dirName]
功能:创建一个目录
-p 递归创建多层目录
语法:rmdir [-p][dirName]
适用对象:具有当前目录操作权限的所有使用者
功能:删除空目录
-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。(-p:以递归的形式删除!)
rm命令可以同时删除文件或目录
语法:rm [-f-i-r-v][dirName/dir]
适用对象:所有使用者
功能:删除文件或目录
rm常用选项:
-f 即使文件属性为只读(即写保护),force:强制删除
-i 删除前逐一询问确认
-rf 递归并强制删除(非常强力,非常危险的指令,会导致网上所流传的笑话“删库跑路”
演示:
[root@hcss-ecs-3e32 ~]# mkdir a //创建a
[root@hcss-ecs-3e32 ~]# ll
total 188
-rw-r--r-- 1 root root 0 Nov 26 13:24 001.c
drwxr-xr-x 2 root root 4096 Nov 26 13:32 a
-rwxr-xr-x 1 root root 8360 Nov 18 12:45 a.out
-rw-r--r-- 1 root root 168894 Nov 23 19:58 big.txt
-rw-r--r-- 1 root root 72 Nov 18 12:43 code.c
[root@hcss-ecs-3e32 ~]# rmdir -p a //删除a
[root@hcss-ecs-3e32 ~]# ll
total 184
-rw-r--r-- 1 root root 0 Nov 26 13:24 001.c
-rwxr-xr-x 1 root root 8360 Nov 18 12:45 a.out
-rw-r--r-- 1 root root 168894 Nov 23 19:58 big.txt
-rw-r--r-- 1 root root 72 Nov 18 12:43 code.c
[root@hcss-ecs-3e32 ~]# rm -f 001.c //删除001.c
[root@hcss-ecs-3e32 ~]# ll
total 184
-rwxr-xr-x 1 root root 8360 Nov 18 12:45 a.out
-rw-r--r-- 1 root root 168894 Nov 23 19:58 big.txt
-rw-r--r-- 1 root root 72 Nov 18 12:43 code.c
[root@hcss-ecs-3e32 ~]# mkdir -p a/b/c //递归创建a(b(c))
[root@hcss-ecs-3e32 ~]# tree a
a
└── b
└── c
2 directories, 0 files
[root@hcss-ecs-3e32 ~]# rmdir -p a/b/c //递归删除a(b(c))
[root@hcss-ecs-3e32 ~]# ll
total 184
-rwxr-xr-x 1 root root 8360 Nov 18 12:45 a.out
-rw-r--r-- 1 root root 168894 Nov 23 19:58 big.txt
-rw-r--r-- 1 root root 72 Nov 18 12:43 code.c
以树状图的形式列出目录所包含的内容
安装:
yum -y install tree
功能:cp指令用来 复制 文件或目录,相当于windows下的复制操作
语法:cp [选项] 源文件或目录 目标文件或目录
选项:
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
演示:
[root@hcss-ecs-3e32 ~]# ll
total 184
-rwxr-xr-x 1 root root 8360 Nov 18 12:45 a.out
-rw-r--r-- 1 root root 168894 Nov 23 19:58 big.txt
-rw-r--r-- 1 root root 72 Nov 18 12:43 code.c
[root@hcss-ecs-3e32 ~]# mkdir 001.txt
[root@hcss-ecs-3e32 ~]# cp -r code.c 001.txt
[root@hcss-ecs-3e32 ~]# cd 001.txt
[root@hcss-ecs-3e32 001.txt]# ll
total 4
-rw-r--r-- 1 root root 72 Nov 26 14:11 code.c
功能:mv命令是move的缩写,用来移动文件或者对文件改名,经常用来备份文件或者目录,相当于windows下的剪切操作
语法:mv [选项] 源文件或目录 目标文件或目录
选项:
- f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
- i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
演示:
[root@hcss-ecs-3e32 001.txt]# tree
.
├── a
│ └── b
│ └── c
└── code.c
3 directories, 1 file
[root@hcss-ecs-3e32 001.txt]# mv -f code.c a
[root@hcss-ecs-3e32 001.txt]# tree
.
└── a
├── b
│ └── c
└── code.c
3 directories, 1 file
功能: 查看目标文件的内容
语法:cat [选项][文件] (tac 则为反向输出)
选项:
- -b 对非空输出行编号
- -n 对输出的所有行编号
- -s 不输出多行空行
演示:
[root@hcss-ecs-3e32 a]# cat code.c //普通输出内容
#include
int main()
{
printf("hello Linux\n");
return 0;
}
[root@hcss-ecs-3e32 a]# cat -n code.c //加上行数
1 #include
2
3 int main()
4 {
5 printf("hello Linux\n");
6 return 0;
7 }
[root@hcss-ecs-3e32 a]# tac code.c //反向输出
}
return 0;
printf("hello Linux\n");
{
int main()
#include
功能:文件内容分屏查看器,功能类似 cat
语法:more [选项][文件]
选项:-n 对输出的所有行编号
q 退出more
(多用less,少用more)
语法: less [参数] 文件功能 :less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件
操作 | 功能说明 |
---|---|
空白键 | 向下翻动一页 |
[pagedown] | 向下翻动一页 |
[pageup] | 向上翻动一页 |
/字串 | 向下搜寻『字串』的功能;n :向下查找;N :向上查找 |
?字串 | 向上搜寻『字串』的功能;n :向上查找;N :向下查找; |
q | 离开 less 这个程序 |
语法:head 文件 (功能描述:默认查看文件头10行内容)
选项:
-n<行数> 指定显示头部内容的行数
演示:
[root@hcss-ecs-3e32 ~]# head big.txt
hello Linux 1
hello Linux 2
hello Linux 3
hello Linux 4
hello Linux 5
hello Linux 6
hello Linux 7
hello Linux 8
hello Linux 9
hello Linux 10
功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
语法: tail[必要参数][选择参数][文件]
选项:-f 循环读取
-n<行数> 显示行数
演示:
[root@hcss-ecs-3e32 ~]# tail -10 big.txt
hello Linux 9991
hello Linux 9992
hello Linux 9993
hello Linux 9994
hello Linux 9995
hello Linux 9996
hello Linux 9997
hello Linux 9998
hello Linux 9999
hello Linux 10000
查看已经执行过历史命令
date 指定格式显示时间: date +%Y/%m/%d-%H:%M:%S
显示格式:
%H : 小时
%M : 分钟
%S : 秒
%X : 相当于 %H:%M:%S%d : 日
%m : 月份
%Y : 完整年份%F : 相当于 %Y-%m-%d
用法1:格式化时间显示date 用法:date [选项]... [+时间格式]
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″ //这样可以设置全部时间
用法2:时间戳时间->时间戳:date +%s // 显示当前时间戳
时间戳->时间:date -d@1508749502 // 将时间戳转换为系统默认格式的时间
演示:
[root@hcss-ecs-3e32 ~]# date +%Y/%m/%d-%H:%M:%S
2023/11/26-15:02:56
[root@hcss-ecs-3e32 ~]# date +%s
1700982266
[root@hcss-ecs-3e32 ~]# date +%Y/%m/%d-%H:%M:%S -d @0
1970/01/01-08:00:00
功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
命令格式: cal [参数][月份][年份]
选项:-3 显示系统前一个月,当前月,下一个月的月历
-j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y 显示当前年份的日历
演示;
[root@hcss-ecs-3e32 ~]# cal -y
2023
January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7 1 2 3 4 1 2 3 4
8 9 10 11 12 13 14 5 6 7 8 9 10 11 5 6 7 8 9 10 11
15 16 17 18 19 20 21 12 13 14 15 16 17 18 12 13 14 15 16 17 18
22 23 24 25 26 27 28 19 20 21 22 23 24 25 19 20 21 22 23 24 25
29 30 31 26 27 28 26 27 28 29 30 31
April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 1 2 3 4 5 6 1 2 3
2 3 4 5 6 7 8 7 8 9 10 11 12 13 4 5 6 7 8 9 10
9 10 11 12 13 14 15 14 15 16 17 18 19 20 11 12 13 14 15 16 17
16 17 18 19 20 21 22 21 22 23 24 25 26 27 18 19 20 21 22 23 24
23 24 25 26 27 28 29 28 29 30 31 25 26 27 28 29 30
30
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 1 2 3 4 5 1 2
2 3 4 5 6 7 8 6 7 8 9 10 11 12 3 4 5 6 7 8 9
9 10 11 12 13 14 15 13 14 15 16 17 18 19 10 11 12 13 14 15 16
16 17 18 19 20 21 22 20 21 22 23 24 25 26 17 18 19 20 21 22 23
23 24 25 26 27 28 29 27 28 29 30 31 24 25 26 27 28 29 30
30 31
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7 1 2 3 4 1 2
8 9 10 11 12 13 14 5 6 7 8 9 10 11 3 4 5 6 7 8 9
15 16 17 18 19 20 21 12 13 14 15 16 17 18 10 11 12 13 14 15 16
22 23 24 25 26 27 28 19 20 21 22 23 24 25 17 18 19 20 21 22 23
29 30 31 26 27 28 29 30 24 25 26 27 28 29 30
31
语法:
find [搜索范围] [选项]选项:
-name<查询方式> 按照指定的文件名查找模式查找文件
-user<用户名> 查找属于指定用户名所有文件
-size<文件大小> 按照指定的文件大小查找文件,单位为:
b —— 块(512 字节)
c —— 字节
w —— 字(2 字节)
k —— 千字节
M —— 兆字节
G —— 吉字节
不设置,默认是千字节。
演示:
//查找code.c
[root@hcss-ecs-3e32 ~]# find code.c
code.c
//找到root用户下,小于1MB的文件('-'是小于/'+'是 大于)
[root@hcss-ecs-3e32 ~]# find /root -size -1024
在PATH变量指定的路径中,判断系统命令是否存在,并搜索该命令在系统哪个位置。命令本身就是用语言写的程序工具指令,是保存在磁盘上的文件
语法:which 命令
演示:
[root@hcss-ecs-3e32 ~]# which tree
/usr/bin/tree
[root@hcss-ecs-3e32 ~]# which cat
/usr/bin/cat
功能: 在文件中搜索字符串,将找到的行打印出来
语法: grep [选项] 搜寻字符串 文件
选项:-i :忽略大小写的不同,所有大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行
演示:
[root@hcss-ecs-3e32 ~]# grep '999' -n big.txt
999:hello Linux 999
1999:hello Linux 1999
2999:hello Linux 2999
3999:hello Linux 3999
4999:hello Linux 4999
5999:hello Linux 5999
6999:hello Linux 6999
7999:hello Linux 7999
8999:hello Linux 8999
9990:hello Linux 9990
9991:hello Linux 9991
9992:hello Linux 9992
9993:hello Linux 9993
9994:hello Linux 9994
9995:hello Linux 9995
9996:hello Linux 9996
9997:hello Linux 9997
9998:hello Linux 9998
9999:hello Linux 9999
功能:将目录或文件压缩成zip格式
语法:zip 压缩文件.zip 目录或文件选项:
-r 递归处理,将指定目录下的所有文件和子目录一并处理
演示:
[root@hcss-ecs-3e32 ~]# zip big.zip big.txt
adding: big.txt (deflated 85%)
[root@hcss-ecs-3e32 ~]# ll
total 212
-rwxr-xr-x 1 root root 8360 Nov 18 12:45 a.out
-rw-r--r-- 1 root root 168894 Nov 23 19:58 big.txt
-rw-r--r-- 1 root root 25436 Nov 26 15:24 big.zip
-rw-r--r-- 1 root root 72 Nov 18 12:43 code.c
功能:将zip格式文件解压缩
语法:unzip 压缩文件.zip 目录或文件
选项:
-d<目录> 指定解压后文件的存放目录
演示:
[root@hcss-ecs-3e32 ~]# unzip big.zip -d a
Archive: big.zip
inflating: a/big.txt
[root@hcss-ecs-3e32 ~]# cd a
[root@hcss-ecs-3e32 a]# ll
total 168
-rw-r--r-- 1 root root 168894 Nov 23 19:58 big.txt