Linux介绍
Linux是一个性能稳定、功能强大、效率高、安全且内核开
源的操作系统。其内核由当时还是芬兰赫尔辛基大学学生的林
纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds)于1991
年10月5日首次发布。
Linux特性
内核开源
: Linux是开源软件,用户可以查看、修改和分发
内核源代码,这促进了协作和共享。多用户和多任务
: Linux支持多用户同时登录,每个用户可
以执行多个任务,而不会相互干扰。稳定性和可靠性
: Linux系统通常非常稳定,能够长时间运
行而不需要重新启动,这对服务器和关键任务的系统很重
要。多平台支持
: Linux可以运行在各种硬件平台上,从嵌入式
设备到个人计算机、服务器和大型主机。网络功能
: Linux内置了强大的网络功能,支持各种网络协
议,是服务器和网络设备的常用操作系统。安全性
: Linux提供了强大的安全特性,包括权限管理、用
户身份验证、防火墙和加密,以保护系统免受恶意攻击。
Linux发行版
Linux
内核是免费开源的,这就代表了任何人都可以获得并修改内核,并且自行集成在内核之上,封装系统级程序,组合在一起称之为Linux
发行版:
红帽企业版 Linux
:RHEL是全世界内使用最广泛的 Linux系统。它具有极强的性能与稳定性,是众多生成环境中使用的(收费的)系统。
Fedora
:由红帽公司发布的桌面版系统套件,用户可以免费体验到最新的技术或工具,这些技术或工具在成熟后会被加入到RHEL系统中,因此 Fedora也成为RHEL系统的试验版本。
CentOS
:通过把RHEL系统重新编译并发布给用户免费使用的 Linux系统,具有广泛的使用人群。
Deepin
:中国发行,对优秀的开源成品进行集成和配置。
Debian
:稳定性、安全性强,提供了免费的基础支持,在国外拥有很高的认可度和使用率。
Ubuntu
:是一款派生自Debian的操作系统,对新款硬件具有极强的兼容能力。Ubuntu与Fedora都是极其出色的 Linux桌面系统,而且 Ubuntu也可用于服务器领域。
Linux系统目录结构
Linux的目录结构是一个树型结构,Linux没有盘符这个概念,只有一个顶级目录也就是
根目录
:/,所有文件都在它下面:
/bin
:
bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。
/boot
:
这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev
:
dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
/etc
:
etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home
:
用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
/lib
:
lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found
:
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media
:
linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
/mnt
:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
/opt
:
opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc
:
proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:/proc/sys/net/ipv4/icmp_echo_ignore_all
/root
:
该目录为系统管理员,也称作超级权限者的用户主目录。/sbin
:
s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。/selinux
:
这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。/srv
:
该目录存放一些服务启动之后需要提取的数据。/sys
:
这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。/tmp
:
tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。/usr
:
usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。/usr/bin
:
系统用户使用的应用程序。/usr/sbin
:
超级用户使用的比较高级的管理程序和系统守护程序。/usr/src
:
内核源代码默认的放置目录。/var
:
var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。/run
:
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
Linux基本命令
Linux命令的使用格式为:
命令 -选项 参数
常用命令
:
ls 命令
:用于显示指定工作目录下的内容
常用选项: -l 以长格式显示文件和目录信息,包括权限、所有者、大 小、创建时间等
-a 显示所有文件及目录(包括隐藏文件与目录)cd 命令
:用于切换目录(change directory)
例如: cd /data 切换到/data目录下
cd … 切换到父目录
cd 切换到当前用户的Home目录pwd命令
:显示当前工作目录(print working directory)mkdir命令
:创建目录(make directoriy)
-p选项:父目录不存在情况下先生成父目录 (parents)cp命令
:复制文件或目录-r
递归处理,将指定目录下的文件与子目录一并拷贝
(recursive)mv命令
:移动文件或目录、文件或目录改名(move)rm命令
:删除文件、目录
-r 同时删除该目录下的所有文件(recursive)
-f 强制删除文件或目录(force)
cat命令
:显示文本文件内容 (catenate)
显示文本文件的内容
:cat [选项] 文件名称[,…]
选项
:-n #输出行号more命令
进行文件内容的合并
:cat [选项] 文件名1 文件名2 …> 合并后的文件名
通过键盘输入文本内容
: cat > 文本内容保存的文件名
more [选项] 文件名
“回车键”显示下一行
“空格键”显示下一屏
"q"退出touch命令
:touch 文件名[,可以创建多个文件]
创建完文件后,可以对该文件进行编辑,编辑方法:
vi
文件名
输入a
,进入编辑模式,编辑文本;
写入并退出,先按Esc键,输入【:wq】
。
退出不保存:q!
- ln [选项] 源文件或目录 链接文件或目录
软链接(-s)
:别名“符号链接”,本身几乎不占用空间。相当于“快捷方式”,可以通过软链接方便的访问文件或目录。
硬链接
:与源文件占有的空间相同,不能给目录创建硬链接。grep
查找命令
eg: 在当前目录下创建一个名为mycp的软链接。ln -s /bin/cp mycp
然后,使用创建好的mycp软链接进行拷贝操作:
./mycp a.txt a2.txt
例如:查找出当前目录下文件名(或目录名)中含有’y’的文件或目录
ls | grep 'y'
其中,竖线|为“管道符”,“管道符”的作用是将前面命令的执行结果作为后面命令的源。
find
命令
例如:从根目录下查找文件扩展名为txt的文件find / -name *.txt
tar
压缩和解压缩命令
-c 建立一个压缩文件的参数指令(create)
-x 解开一个压缩文件的参数指令(extract)
-z 是否需要用 gzip 压缩
-f 使用文档名,在 f 之后要立即接文档名(file)
-v 压缩的过程中显示文件(verbose)
例如:将当面目录下的test3目录压缩为mytest.tar.gz压缩文件tar -cvzf mytest.tar.gz test3
解压缩命令
:
tar [选项] 待解压缩的文件
选项解释: x :用来解压缩
例如:将mytest.tar.gz解压缩到当前目录tar -xzvf mytest.tar.gz
将mytest.tar.gz压缩文件解压缩到/root/test目录中
tar -xzvf mytest.tar.gz -C /root/test
Shell脚本
Shell
这个单词的原意是“外壳”
,跟kernel(内核)
相对应,比喻内核外面的一层,即用户跟内核交互的对话界面。
Shell基本知识
- Shell解释器
使用解释器的语法: #!解释器- Shell的变量类型
(1)环境变量: Shell环境下已经存在的一些系统变量,例如:PWD、UID、PATH。#!/bin/bash echo "Hello,Shell,欢迎学习Shell,您现在的工作目录是:" echo "当前的工作目录是:$PWD"
(2)自定义变量:变量名=变量值
#!/bin/bash country="中国" # 自定义变量等号两边不能加空格 echo $country
(3)预定义变量:$0 当前执行的shell脚本的程序名
$1 $2 … $n 代表第一个、第二个…第n个位置参数的值$# 传递的位置参数的个数
$* 所有位置参数的值
$? 返回上一条命令是否执行成功,成功为0,失败为非0。
#!/bin/bash echo "执行当前脚本的程序名是$0" echo "当前脚本接收的位置参数的个数是:$#" echo "第1个位置参数的值是$1,第5个位置参数的值是$5" echo "所有位置参数的值是:$*" echo "上一条命令执行成功了吗?$?"
- Shell脚本执行方式
方式一:直接通过脚本文件的位置执行 (必须添加x执行权限)
方式二:sh 脚本文件位置
方式三:source 脚本文件位置
Shell的程序流程控制
- if条件判断语法:
if [ 判断条件表达式 ]
then
测试通过执行此处脚本
else
测试未通过,在此执行脚本
fi
注意
:文件判断的常用选项:
-d 是否为目录
-f 是否为文件
-e 是否存在例一: #!/bin/bash echo "请输入要判断的文件" read name # 接收键盘输入,并将输入的结果保存在name变量中 if [ -d $name ] # 判断是否为目录 then echo "this is a directory!" else echo "sorry,this isn't directory!" fi
- for循环语句
for 循环变量 in 表达式
do
循环内容
done#!/bin/bash for v in `ls` do echo $v done
- while循环语句
while [ 判断条件表达式 ]
do
循环内容
done例 #!/bin/bash num=1 result=0 while [ $num -le 100 ] do result=`expr $num + $result` num=`expr $num + 1` done echo $result >> sum.txt echo "计算完成"
注意
:Shell中的反撇号``,相当于$()命令替换
expr
是expression表达式的缩写,它是一个用于执行运算或字符串操作的命令
Linux用户管理
Linux操作系统是一个多用户操作系统,它允许多用户同时登录到系统上并使用资源。系统会根据账户来区分每个用户的文件,进程,任务和工作环境,使得每个用户工作都不受干扰。
Linux用户的分类
- 超级用户root:权限最大,限制最小,uid=0
- 普通用户:用来完成日常工作的用户,uid:500-60000
- 系统用户:为了能够让那些后台进程或服务类进程以非管理员的身份运行的用户,不能登录服务器。uid:1-499
Linux用户组的分类
- 普通用户组:可以加入多个用户
- 系统组:一般加入一些系统用户
- 私有组:创建用户时,若没有指明所属组,则会定义一个私有用户组,名 称与用户名相同,当把其他用户加入到私有组,私有组就变成了普通用户组。
相关配置文件
- 保存用户信息的文件:/etc/passwd
- 保存用户密码的文件:/etc/shadow
- 保存用户组的文件:/etc/group
- 保存用户组密码的文件:/etc/gshadow
- 用户配置文件:/etc/default/useradd
用户管理
添加用户
useradd [选项] 用户名
选项: -c 备注
-d home目录
-s shell程序
-g 用户的主组(初始组)
-G 用户的附加组
-u 新用户的id
新创建的用户必须设置密码,才能进行登录,设置(更改)密码的命令:
passwd 用户名
删除用户
userdel [选项] 用户名
选项:-r 删除用户账号的同时删除目录
-f 强制删除修改用户
usermod [选项] 用户名
选项:-u 用户id
-g 用户的主组
-G 用户的附加组
用户组管理
- 创建用户组
groupadd [选项] 用户组名
选项:
-g :用来显式指定新建组的组id。- 将用户添加到组中
gpasswd -a 用户名 组名
- 将用户从指定组中删除
gpasswd -d 用户名 组名
- 查看用户所在的全部组
groups [用户名]
- 修改组
groupmod [选项] 组名
选项: -g 用来修改组id
-n 用来修改组名- 删除组
groupdel 组名
Linux文件权限
三种基本权限
- r 读权限(read)
- w 写权限(write)
- x 执行权限 (execute)
权限位置解释
- chmod修改文件权限命令(change mode)
参数:-R 下面的文件和子目录做相同权限操作(Recursive递归的)
例如:chmod u+x a.txt
注意
:
u:文件所属用户
g:文件所属的组
o:其他用户
a:所有用户
- 除了文件权限外,Linux还提供了chown和chgrp命令,用于管理文件的所有者和所属组。
- chown更改文件的所有者
chown [新所有者] 文件名- 更改文件所有者和所属组为指定用户和组
chown user1:group1 filename- chgrp命令更改文件的所属组
chgrp [新所属组] 文件名