Linxu内核 它是图灵完备的
- Ubuntu CentOS RedHat
- Ubuntu 社区产物,1个月1个版本,6个月一个稳定版 LTS
- CentOS 有公司背景,稳定,更新非常缓慢
- Windows NT内核,用于window系统
- XNU系统内核,用于mac os系统
- Linux Server Ubuntu Server 不安装桌面,命令行工具,有不同的版本。
- windows server可选不安桌桌面,不安装就用PowerShell
Linux目录结构
graph TB
/-->bin
/-->boot
/-->dev
/-->etc
/-->home
/-->lib
/-->proc
/-->usr
/-->va
/-->...
目录 | 说明 |
---|---|
bin | 存放二进制可执行文件(ls,cat,mkdir等) |
boot | 存放用于系统引导时使用的各种文件 |
dev | 用于存放设备文件,如打印机 |
etc | 存放系统配置文件,如hosts |
home | 存放所有用户文件的根目录 |
lib | 存放跟文件系统中的程序运行所需要的共享库及内核模块 |
mnt | 系统管理员安装临时文件系统的安装点 |
opt | 额外安装的可选应用程序包所放置的位置 |
proc | 虚拟文件系统,存放当前内存的映射 |
root | 超级用户目录,普通用户无法进入,黑客可提权 |
sbin | 存放二进制可执行文件,只有root才能访问 |
tmp | 用于存放各种临时文件 |
usr | 用于存放系统应用程序,比较重要的目录/usr/local 本地管理员软件安装目录 |
var | 用于存放运行时需要改变数据的文件 |
较为重要的目录,不要自己在根目录下创建任何目录
目录 | 说明 |
---|---|
etc | 存放系统配置文件,如hosts |
/usr/local | 我们自己安装的程序 必须安装在此,潜规则,换运维了?? |
var | 存放数据库的目录 |
关机&重启命令
#
shutdown
shutdown -h now; # 表示立即关机
shutdown -h 1; # 表示1分钟分关机
shutdown -r now; # 立即重启
# 直接使用,效果等价于关机
halt
# 重启系统
reboot
# 把内存的数据同步到磁盘,看不到交互效果
syn
注意细节:
当我们关机或者重启时,都应该先执行一下sync指令,把内存数据写入磁盘,防止数据丢失
用户登录和注销
- 登录时尽量少的登录root用户
- 通过 su - [用户名],su,切换用户和root用户
- 在提示符下输入
logout
即可注销用户 和exit
一样,通过远程登录才有效
默认安装完成之后我们是用当前用户权限的进入linux系统的,但是很多操作我们是需要用到root账户权限才可以操作
# 通过这种方法输入当前用户密码就可以进到root用户。
sudo -i
# 如果你是第一次使用root账户,那我们首先要重设置root用户的密码
sudo passwd root
# 切换root用户
su - 用户名
# mac 要加上sudo
sudo su - 用户名
# 退出root
exit
用户管理
- linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
- 每一个用户至少属于一个组,可以属于多个组
- 用户可以切换组
root -> group1 [root组]
xiaoming -> group2
xiaohong -> group3
家目录 Home
目录下有各个创建的用户对应的家目录,当用户登陆时,会自动的进入到自己的家目录. 简写~
, /home
目录对应Mac
的 /Users
添加用户
# 当创建成功后,会自动的创建和用户同名的家目录
useradd [用户名]
# 也可以给新创建的用户指定家目录
useradd -d [指定目录] [用户名]
# 给用户设置密码
passwd [用户名]
# 设置完成后 可以通过 ssh登录
删除用户
得用root用户来删
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
# 实际开发中不会删家目录,尽量保存
userdel [用户名] # 保留家目录
userdel -r [用户名] # 删家目录
查询用户信息
id [用户名]
# 用户id号 所在组id号 组名称
# uid=0(root) gid=0(root) groups=0(root)
# id: xm: no such user
切换用户
useradd zf; passwd zf;(123)
su - zf; # 高权限 到低权限不需要输入密码
# 想回退到root用户
exit
# 切换到root
su
su - root
# 查看当前用户
whoami
who i am
用户组
- 类似于角色,系统可以对有共性的多个用户进行统一管理
- 组的信息都放在文件里
- 创建用户时不指定组,则用户组就是用户名,相当于新建了一个组
# 新增组
groupadd [组名]
# 删除组
groupdel [组名]
# 添加用户时指定组
useradd -g [用户组] [用户名]
# 修改用户组
usermod -g [用户组] [用户名]
案例
# 删武当派 添加 武当少林,添加张无极到武当,修改到少林
groupdel wudangpai
groupadd wudangpai
groupadd shaolin
useradd -g wudangpai zwj
usermod -g shaolin zwj
- 用户和组的相关文件
- /etc/passwd 文件,
- 用户配置文件(用户信息)
- 每行含义- 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登陆Shell种类
-
root:x:0:0:root:/root:/bin/bash
-
zwj:x:1004:1005::/home/zwj:/bin/bash
-
x是密码,加密了
id zwj
uid=1004(zwj) gid=1005(shaolin) groups=1005(shaolin)
- /etc/group
- 组配置文件(组信息)
- 行含义: 组名:口令:组标识号:组内用户列表
-
wudangpai:x:1004:
-
shaolin:x:1005:
- /etc/shadow
- 口令配置文件(密码和登陆信息,是加密的),用户密码是存到这里的
- 行含义- 登陆名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
- zwj:!!:18245:0:99999:7:::
修改帐号
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
根目录 /
采用级层式的树状目录,在此结构中最上层的是根目录,然后在此目录下再创建其他目录
在Linex世界里,一切皆文件。
大致目录结构
/ 根目录
/dev 管理设备的目录
/media 当有U盘插入时,在这管理, Mac没有
/bin 常用的指令 二进制文件存放 Binary的缩写
cp, cat, ed
/lib 动态库 Mac没有
/sbin super bin的意思
/home [重点]存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目 录名是以用户的账号命名的
/root [重点] 该目录为系统管理员,也称作超级权限者的用户主目录 Mac没有
/etc [重点]所有的系统管理所需要的配置文件和子目录 xx.conf
/usr [重点]这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录上,类 似于windows下的progream files目录
/local [重点]这是别一个给主机额外安装软件所安装的目录,一般是通过编译源码方 式安装的程序
/tmp 临时目录
/opt 这是给主机额外安装软件所摆放的目录
/var [重点]这个目录中存放着在不断扩充的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件
YUM(Yellowdog Updater Modified)
是一个RPM的前端程序,主要目的是设计用来解决RPM的依赖关系问题。其特点如下:
- 自动解决依赖关系
- 可以对RPM进行分组,并基于组进行安装操作
- 引入仓库概念,支持多个仓库。仓库用来存放所有的rpm包,仓库可以是本地的,也可以是统一的网络仓库。仓库的配置文件保存在
/etc/yum.repos.d
目录下,可能存在多个配置文件。配置文件逆序 以.repo
结尾。- name=CentOS-$releasever
- baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
- enabled=1
- gpgcheck=0,防止被修改
- gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7
- 配置简单
- [base]
常用命令
- 安装,删除,更新操作
yum install [name] yum remove [name] yum update [name]
- 查询操作
yum search [keyword] # 列出全部,安装的,最近的,软件更新 yum list (all | installed | recent | updates) yum inof [name] # 潮汛哪个rpm软件包含目标文件 yum whatprovides [file name]
- 清缓存
yum clean all yum makecache yum repolist
关机&重启命令
#
shutdown
shutdown -h now; # 表示立即关机
shutdown -h 1; # 表示1分钟分关机
shutdown -r now; # 立即重启
# 直接使用,效果等价于关机
halt
# 重启系统
reboot
# 把内存的数据同步到磁盘,看不到交互效果
syn
注意细节:
当我们关机或者重启时,都应该先执行一下sync指令,把内存数据写入磁盘,防止数据丢失
用户登录和注销
- 登录时尽量少的登录root用户
- 通过 su - [用户名],su,切换用户和root用户
- 在提示符下输入
logout
即可注销用户 和exit
一样,通过远程登录才有效
用户管理
- linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
- 每一个用户至少属于一个组,可以属于多个组
- 用户可以切换组
root -> group1 [root组]
xiaoming -> group2
xiaohong -> group3
家目录 Home
目录下有各个创建的用户对应的家目录,当用户登陆时,会自动的进入到自己的家目录. 简写~
, /home
目录对应Mac
的 /Users
添加用户
# 当创建成功后,会自动的创建和用户同名的家目录
useradd [用户名]
# 也可以给新创建的用户指定家目录
useradd -d [指定目录] [用户名]
# 给用户设置密码
passwd [用户名]
# 设置完成后 可以通过 ssh登录
删除用户
得用root用户来删
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
# 实际开发中不会删家目录,尽量保存
userdel [用户名] # 保留家目录
userdel -r [用户名] # 删家目录
查询用户信息
id [用户名]
# 用户id号 所在组id号 组名称
# uid=0(root) gid=0(root) groups=0(root)
# id: xm: no such user
切换用户
useradd zf; passwd zf;(123)
su - zf; # 高权限 到低权限不需要输入密码
# 想回退到root用户
exit
# 切换到root
su
su - root
# 查看当前用户
whoami
who i am
用户组
- 类似于角色,系统可以对有共性的多个用户进行统一管理
- 组的信息都放在文件里
- 创建用户时不指定组,则用户组就是用户名,相当于新建了一个组
# 新增组
groupadd [组名]
# 删除组
groupdel [组名]
# 添加用户时指定组
useradd -g [用户组] [用户名]
# 修改用户组
usermod -g [用户组] [用户名]
案例
# 删武当派 添加 武当少林,添加张无极到武当,修改到少林
groupdel wudangpai
groupadd wudangpai
groupadd shaolin
useradd -g wudangpai zwj
usermod -g shaolin zwj
- 用户和组的相关文件
- /etc/passwd 文件,
- 用户配置文件(用户信息)
- 每行含义- 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登陆Shell种类
-
root:x:0:0:root:/root:/bin/bash
-
zwj:x:1004:1005::/home/zwj:/bin/bash
-
x是密码,加密了
id zwj
uid=1004(zwj) gid=1005(shaolin) groups=1005(shaolin)
- /etc/group
- 组配置文件(组信息)
- 行含义: 组名:口令:组标识号:组内用户列表
-
wudangpai:x:1004:
-
shaolin:x:1005:
- /etc/shadow
- 口令配置文件(密码和登陆信息,是加密的),用户密码是存到这里的
- 行含义- 登陆名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
- zwj:!!:18245:0:99999:7:::
修改帐号
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
实用指令
指定运行级别
设计者把Linux设置了7个运行级别
0. 0: 关机
- 1: 单用户(找回丢失密码)
- 2: 多用户无网络服务 用的较少
- 3: 多用户有网络服务 用的最多
- 4: 保留
- 5: 图形界面 有图形界面就是5
- 6: 重启
系统的运行级别配置文件是/etc/inittab
切换到指定运行级别
init [0123456]
如何找回root密码,如果我们不小心忘记root密码,怎么找回
思路: 进入到单用户模式,然后修改root密码。因为进入单用户模式,root不需要密码就可以登陆
# 在引导时输入回车 -> 输入e -> 选中(编辑内核)输入e -> 输入1 -> 回车 -> b. 这时会进入到 单用户模式
passwd root
实用指令 英文全称与中文解释
- uname [Unix name / Print operating system name] 打印操作系统名称
- df [display free disk space] 显示剩余磁盘空间
- du [display disk usage statistics] 硬盘使用率
- ps [process status] 进程状态
- man [Manual] 手册,可以用这个命令查询其他命令的用法。
- pwd [Print working directory] 打印当前目录。
- ls [list directory contents] 列出目录下的文件。
-h
[human]表示人类读 - cd [Change directory] 切换目录
- mkdir [Make directory] 建立目录
- rmdir [Remove directory] 移除目录
- touch [change file access and modification times] 更改文件访问和修改时间; 可用于新建文件,如果文件存在,就是更改时间
- cp [copy files] 复制文件 . -r 递归 -f 强制不提示; Linux用 \cp强制
- rm [Remove file] 删除文件 -r 递归 -f 强制不提示
- mv [Move file] 移动文件 ,如果在一个文件夹下,相当于重命名
- cat [concatenate and print files] 连接并打印文件 -n输出行号 一般和 -n一起用 cat -n [filename],也可以用管道符 | more
- more 一次加载,分页显示
- less 一次加载一页,和more相反
>
重定向指令ls -la > a.txt
(覆盖写); 如果文件不存在就创建, 存在就覆盖>>
追加指令cat 04file.sh -> a.txt
(在后面追加,不覆盖写,追加写)- echo 输出内容到控制台, 多用于输出环境变量和文本内容
- head 默认查看文件前10行内容,可以通过 -n 设置
head -5 a.txt
- tail 显示文件的末尾部分,默认后10行, 可以通过 -n 设置
tail -5 a.txt
,tail -f fialename
循环读取 (实时跟踪该文档更新内容,常用) - ln,link [make links]软链接(也叫符号链接)
ls -s [源文件] [软链接名]
和 homebrew 链接类似, - unlink [remove directory entries]删除软链接 和
rm
是一个命令 - history 查看已经执行过的指令,也可以再次执行已经执行过的指令,
!编号
- date [display or set date and time] 显示或设置时间.
date [参数] [+格式]
格式前的+
不能丢date
=> Mon Dec 16 11:33:06 CST 2019date "+%Y-%m-%d"
=> 2019-12-16 #格式是否加引号 不影响结果date "+%Y-%m-%d %H:%M:%S"
=> 2019-12-16 11:36:29date -s "2019-1-1 11:11:11"
#设置当前系统时间
- cal [displays a calendar and the date] 显示日历和日期
cal
显示当前月日历cal [year number]
显示哪一年的日历(一整年)
- find [walk a file hierarchy] 遍历文件层次结构.
find [目录] [条件 -user/name/size] [内容]
find . -user "liangze"
find . -name "*.md"
find . -size -20M
find . -name '*.md' –ls
- which 在用户路径中找到程序文件
-a
列出找到的可执行文件的所有实例(而不是每个实例的第一个)如:which -a pod
- whereis 只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息
- locate
sudo /usr/libexec/locate.updatedb
可能得先执行这条命令- locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
- grep [General Regular Expression Parser]正则分析;用于过滤查找, 通常和管道符一起用
grep [选项 -n(显示匹配行及行号) -i(忽略大小写)] [查找内容 pattern] 源文件
如:grep -n "3" a.txt
,grep -ni "hello" a.txt
|
管道符 表示将前一个命令的处理结果输出传递给后面的命令处理cat a.txt | grep -ni "3"
echo "hello world" | grep -i "Hello"
- gzip/gunzip [compression/decompression tool using Lempel-Ziv coding (LZ77)] 压缩; 文件经它压缩过后,其名称后面会多出".gz"的扩展名。 只能
.gz
;gzip [参数] [文件或者目录]
gzip a.txt
, 不保留原始文件gunzip a.txt.gz
不保留原来的a.txt.gz
- zip/unzip 压缩/解压缩
zip [选项 -r递归] [name.zip] [文件或者文件夹]
,unzip [选项 -d指定解压目录] [name.zip]
zip -r package.zip ZipDir
, 生成了一个package.zip
unzip -d ./unzipdir package.zip
rm -rf unzipdir ZipDir
- tar [manipulate tape archives]操纵归档 也叫打解包
tar [选项] [name] [文件s(空格隔开) 文件夹]
,tar [选项] [name.tar.gz]
,tar [选项] [name.tar.gz] -C [目录,必需存在]
-z
打包同时压缩-c
产生.tar
打包文件-v
显示详细信息-f
指定压缩后的文件名-x
解压缩tar -zcvf mytar.tar.gz 04file.sh a.txt
=> mytar.tar.gztar -zxvf mytar.tar.gz -C ./tar
组管理
-
每个用户至少属于一个组,组的信息放在
/etc/group
里面,用户配置信息放在/etc/passwd
里面.详细见06关机重启用户 -
每个文件有所有者,所在组,和其他组的概念, 这三个信息都可以改变
- 一般来说文件的创建者就是所有者
- 除去所有者和所在组,就是其他组
-
组的相关指令, 在添加用户时可以指定组,同样的用root管理权限也可以改变某个用户所在组
# 查看文件所有者 可以通过
ls -lah[-h human] [filename]
# 添加组
groupadd [group name]
# 修改文件所有者 [change owner]
chown [-R 递归] [username:(可以加:groupname 一并切换)] [filename]
# 修改文件所在组 [change group]
chgrp [groupname] [filename]
# 改变用户所在组 [user modifier]
usermod -g [groupname] [username]
- 权限解释
ls -la
# drwxr-xr-x 16 liangze staff 512 Dec 16 21:42 .
# -rw-r--r-- 1 liangze staff 840 Dec 16 14:31 a.txt
-
第一个字母表示文件类型:
-
表示普通文件;d
目录;l
软链接;b
块文件,硬盘 -
2-4个字母表示,文件所有者的权限
-
5-7,表示文件所在组用户的权限
-
8-10,表示文件其它组用户的权限
-
下面一个数字,如果是文件,表示硬链接的数,如果是目录则是子目录的个数, 文件一般为1
-
liangze.表示文件所有者
-
staff, 表示文件所在组
-
512,840.表示文件大小 可以通过
-h
转成人类友好的格式 -
Dec 16 21:42 ,表示文件最后更新时间
-
rwx权限详解 作用到文件
- r [read 阅读]; 可以读取,查看
- w [write 写]; 可以修改,但是不代码可以删除该文件,删除一个文件的前提条件是对该文件所在目录有写权限
- x [execute 执行]; 可以执行
-
rwx权限详解 作用到目录
- r [read 阅读]; 可以读取,ls 查看目录内容
- w [write 写]; 可以修改,目录内创建+删除+重命名目录
- x [execute 执行]; 可以进入该目录
-
权限的数字表示
- r = 4
- w = 2
- x = 1
- 两两组合 可以有
r-x
= 5;rwx
= 7;rw-
= 6; - 设成 0 =
---
-
修改权限
- 第一种方式:
+
,-
,=
变更权限;u
:所有者,g
:所有组,o
:其他人,a
:所有人(ugo总合)
chmod u=rwx,g=rx,o=x [filename]; chmod o+w [filename]; chmod a-x [filename];
- 第二种方式: 通过数字变更权限
chmod u=rwx,g=rx,o=x [filename]
=chmod 751 [filename]
,750
=rwxr-x---
- 第一种方式:
注意细节
chmod
常和 -R
[递归] 一起用,
可以使用下面命令 让其他用户也可以执行root命令
sudo vi /etc/sudoers
root ALL = (ALL) ALL
# 添加
liangze ALL = (ALL) ALL
分区的基础知识
mbr分区:
- 最多支持四个主分区
- 系统只能安装在主分区
- 扩展分区要占一个主分区
- MBR最大只支持2TB,但拥有最好的兼容性
gtp分区
- 支持无限多个主分区(但操作系统可能限制,比如windows下最多128个)
- 最大支持18EB的大容量(EB = 1024PB, PB=1024TB
Linux分区
- linux来说无论有几个分区,分给哪一个目录使用,它归根结底只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
- Linux采用了一种叫"载入"的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。。这时要载入一个分区,将使它的存储空间在一个目录下获得
- 磁盘 ====[mount unmount]==== > Linux文件系统
硬盘
- IDE, 驱动器标识符为 "hdx~",
hd
表明分区所在设备的类型,这里指IDE硬盘。x
为盘号(a为基本盘,b为从属盘,c为辅助盘,d为辅助从属盘),~
代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。
// 例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区
// hdb2表示第二个IDE硬盘上的第二个主分区或扩展分区
- SCSI(ssd),"sdx~", SCSI硬盘是用
sd
来表示分区所在设备的类型的,其余和IDE硬盘表示方法一样
磁盘情况查询
# 查看系统磁盘
df -h
# 查指定目录的磁盘占用情况
du -ach /opt | grep total `-s 指定目录占用大小汇总 -h带计量单位 -a含文件 --max-depth=1 子目录深度 -c列出明细的同时,增加汇总值`