Linux

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指令,把内存数据写入磁盘,防止数据丢失

用户登录和注销

  1. 登录时尽量少的登录root用户
  2. 通过 su - [用户名],su,切换用户和root用户
  3. 在提示符下输入logout即可注销用户 和 exit 一样,通过远程登录才有效

默认安装完成之后我们是用当前用户权限的进入linux系统的,但是很多操作我们是需要用到root账户权限才可以操作

# 通过这种方法输入当前用户密码就可以进到root用户。
sudo -i
# 如果你是第一次使用root账户,那我们首先要重设置root用户的密码
sudo passwd root
# 切换root用户
su - 用户名
# mac 要加上sudo
sudo su - 用户名 
# 退出root
exit

用户管理

  1. linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
  2. 每一个用户至少属于一个组,可以属于多个组
  3. 用户可以切换组
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

用户组

  1. 类似于角色,系统可以对有共性的多个用户进行统一管理
  2. 组的信息都放在文件里
  3. 创建用户时不指定组,则用户组就是用户名,相当于新建了一个组
# 新增组
groupadd [组名]
# 删除组
groupdel [组名]
# 添加用户时指定组
useradd -g [用户组] [用户名]
# 修改用户组
usermod -g [用户组] [用户名]

案例

# 删武当派 添加 武当少林,添加张无极到武当,修改到少林
groupdel wudangpai
groupadd wudangpai
groupadd shaolin
useradd -g wudangpai zwj
usermod -g shaolin zwj
  • 用户和组的相关文件
  1. /etc/passwd 文件,
    • 用户配置文件(用户信息)
    • 每行含义- 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登陆Shell种类
    •     root:x:0:0:root:/root:/bin/bash
      
    •     zwj:x:1004:1005::/home/zwj:/bin/bash
      
    •     x是密码,加密了  
      
    • id zwjuid=1004(zwj) gid=1005(shaolin) groups=1005(shaolin)
  2. /etc/group
    • 组配置文件(组信息)
    • 行含义: 组名:口令:组标识号:组内用户列表
    •    wudangpai:x:1004:
      
    •    shaolin:x:1005:
      
  3. /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的依赖关系问题。其特点如下:

  1. 自动解决依赖关系
  2. 可以对RPM进行分组,并基于组进行安装操作
  3. 引入仓库概念,支持多个仓库。仓库用来存放所有的rpm包,仓库可以是本地的,也可以是统一的网络仓库。仓库的配置文件保存在/etc/yum.repos.d目录下,可能存在多个配置文件。配置文件逆序 以.repo结尾。
  4. 配置简单
  5. [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指令,把内存数据写入磁盘,防止数据丢失

用户登录和注销

  1. 登录时尽量少的登录root用户
  2. 通过 su - [用户名],su,切换用户和root用户
  3. 在提示符下输入logout即可注销用户 和 exit 一样,通过远程登录才有效

用户管理

  1. linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
  2. 每一个用户至少属于一个组,可以属于多个组
  3. 用户可以切换组
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

用户组

  1. 类似于角色,系统可以对有共性的多个用户进行统一管理
  2. 组的信息都放在文件里
  3. 创建用户时不指定组,则用户组就是用户名,相当于新建了一个组
# 新增组
groupadd [组名]
# 删除组
groupdel [组名]
# 添加用户时指定组
useradd -g [用户组] [用户名]
# 修改用户组
usermod -g [用户组] [用户名]

案例

# 删武当派 添加 武当少林,添加张无极到武当,修改到少林
groupdel wudangpai
groupadd wudangpai
groupadd shaolin
useradd -g wudangpai zwj
usermod -g shaolin zwj
  • 用户和组的相关文件
  1. /etc/passwd 文件,
    • 用户配置文件(用户信息)
    • 每行含义- 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登陆Shell种类
    •     root:x:0:0:root:/root:/bin/bash
      
    •     zwj:x:1004:1005::/home/zwj:/bin/bash
      
    •     x是密码,加密了  
      
    • id zwjuid=1004(zwj) gid=1005(shaolin) groups=1005(shaolin)
  2. /etc/group
    • 组配置文件(组信息)
    • 行含义: 组名:口令:组标识号:组内用户列表
    •    wudangpai:x:1004:
      
    •    shaolin:x:1005:
      
  3. /etc/shadow
    • 口令配置文件(密码和登陆信息,是加密的),用户密码是存到这里的
    • 行含义- 登陆名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
    • zwj:!!:18245:0:99999:7:::

修改帐号

修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。

实用指令

指定运行级别

设计者把Linux设置了7个运行级别
0. 0: 关机

  1. 1: 单用户(找回丢失密码)
  2. 2: 多用户无网络服务 用的较少
  3. 3: 多用户有网络服务 用的最多
  4. 4: 保留
  5. 5: 图形界面 有图形界面就是5
  6. 6: 重启
    系统的运行级别配置文件是/etc/inittab
    切换到指定运行级别
init [0123456]

如何找回root密码,如果我们不小心忘记root密码,怎么找回
思路: 进入到单用户模式,然后修改root密码。因为进入单用户模式,root不需要密码就可以登陆

# 在引导时输入回车 -> 输入e -> 选中(编辑内核)输入e -> 输入1 -> 回车 -> b. 这时会进入到 单用户模式 
passwd root

实用指令 英文全称与中文解释

  1. uname [Unix name / Print operating system name] 打印操作系统名称
  2. df [display free disk space] 显示剩余磁盘空间
  3. du [display disk usage statistics] 硬盘使用率
  4. ps [process status] 进程状态
  5. man [Manual] 手册,可以用这个命令查询其他命令的用法。
  6. pwd [Print working directory] 打印当前目录。
  7. ls [list directory contents] 列出目录下的文件。 -h[human]表示人类读
  8. cd [Change directory] 切换目录
  9. mkdir [Make directory] 建立目录
  10. rmdir [Remove directory] 移除目录
  11. touch [change file access and modification times] 更改文件访问和修改时间; 可用于新建文件,如果文件存在,就是更改时间
  12. cp [copy files] 复制文件 . -r 递归 -f 强制不提示; Linux用 \cp强制
  13. rm [Remove file] 删除文件 -r 递归 -f 强制不提示
  14. mv [Move file] 移动文件 ,如果在一个文件夹下,相当于重命名
  15. cat [concatenate and print files] 连接并打印文件 -n输出行号 一般和 -n一起用 cat -n [filename],也可以用管道符 | more
  16. more 一次加载,分页显示
  17. less 一次加载一页,和more相反
  18. > 重定向指令 ls -la > a.txt(覆盖写); 如果文件不存在就创建, 存在就覆盖
  19. >> 追加指令 cat 04file.sh -> a.txt(在后面追加,不覆盖写,追加写)
  20. echo 输出内容到控制台, 多用于输出环境变量和文本内容
  21. head 默认查看文件前10行内容,可以通过 -n 设置 head -5 a.txt
  22. tail 显示文件的末尾部分,默认后10行, 可以通过 -n 设置 tail -5 a.txt, tail -f fialename 循环读取 (实时跟踪该文档更新内容,常用)
  23. ln,link [make links]软链接(也叫符号链接) ls -s [源文件] [软链接名] 和 homebrew 链接类似,
  24. unlink [remove directory entries]删除软链接 和 rm 是一个命令
  25. history 查看已经执行过的指令,也可以再次执行已经执行过的指令,!编号
  26. date [display or set date and time] 显示或设置时间. date [参数] [+格式] 格式前的+不能丢
    1. date => Mon Dec 16 11:33:06 CST 2019
    2. date "+%Y-%m-%d" => 2019-12-16 #格式是否加引号 不影响结果
    3. date "+%Y-%m-%d %H:%M:%S" => 2019-12-16 11:36:29
    4. date -s "2019-1-1 11:11:11" #设置当前系统时间
  27. cal [displays a calendar and the date] 显示日历和日期
    1. cal 显示当前月日历
    2. cal [year number] 显示哪一年的日历(一整年)
  28. find [walk a file hierarchy] 遍历文件层次结构. find [目录] [条件 -user/name/size] [内容]
    1. find . -user "liangze"
    2. find . -name "*.md"
    3. find . -size -20M
    4. find . -name '*.md' –ls
  29. which 在用户路径中找到程序文件 -a列出找到的可执行文件的所有实例(而不是每个实例的第一个)如:which -a pod
  30. whereis 只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息
  31. locate sudo /usr/libexec/locate.updatedb 可能得先执行这条命令
    • locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
  32. grep [General Regular Expression Parser]正则分析;用于过滤查找, 通常和管道符一起用 grep [选项 -n(显示匹配行及行号) -i(忽略大小写)] [查找内容 pattern] 源文件 如:grep -n "3" a.txt,grep -ni "hello" a.txt
  33. |管道符 表示将前一个命令的处理结果输出传递给后面的命令处理
    1. cat a.txt | grep -ni "3"
    2. echo "hello world" | grep -i "Hello"
  34. gzip/gunzip [compression/decompression tool using Lempel-Ziv coding (LZ77)] 压缩; 文件经它压缩过后,其名称后面会多出".gz"的扩展名。 只能.gz ; gzip [参数] [文件或者目录]
    1. gzip a.txt, 不保留原始文件
    2. gunzip a.txt.gz 不保留原来的a.txt.gz
  35. zip/unzip 压缩/解压缩 zip [选项 -r递归] [name.zip] [文件或者文件夹], unzip [选项 -d指定解压目录] [name.zip]
    1. zip -r package.zip ZipDir, 生成了一个package.zip
    2. unzip -d ./unzipdir package.zip
    3. rm -rf unzipdir ZipDir
  36. tar [manipulate tape archives]操纵归档 也叫打解包 tar [选项] [name] [文件s(空格隔开) 文件夹], tar [选项] [name.tar.gz], tar [选项] [name.tar.gz] -C [目录,必需存在]
    1. -z 打包同时压缩
    2. -c 产生.tar打包文件
    3. -v 显示详细信息
    4. -f 指定压缩后的文件名
    5. -x 解压缩
    6. tar -zcvf mytar.tar.gz 04file.sh a.txt => mytar.tar.gz
    7. tar -zxvf mytar.tar.gz -C ./tar

组管理

  1. 每个用户至少属于一个组,组的信息放在/etc/group里面,用户配置信息放在/etc/passwd里面.详细见06关机重启用户

  2. 每个文件有所有者,所在组,和其他组的概念, 这三个信息都可以改变

    1. 一般来说文件的创建者就是所有者
    2. 除去所有者和所在组,就是其他组
  3. 组的相关指令, 在添加用户时可以指定组,同样的用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]
  1. 权限解释
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
  1. 第一个字母表示文件类型: -表示普通文件;d目录; l软链接; b块文件,硬盘

  2. 2-4个字母表示,文件所有者的权限

  3. 5-7,表示文件所在组用户的权限

  4. 8-10,表示文件其它组用户的权限

  5. 下面一个数字,如果是文件,表示硬链接的数,如果是目录则是子目录的个数, 文件一般为1

  6. liangze.表示文件所有者

  7. staff, 表示文件所在组

  8. 512,840.表示文件大小 可以通过 -h转成人类友好的格式

  9. Dec 16 21:42 ,表示文件最后更新时间

  10. rwx权限详解 作用到文件

    1. r [read 阅读]; 可以读取,查看
    2. w [write 写]; 可以修改,但是不代码可以删除该文件,删除一个文件的前提条件是对该文件所在目录有写权限
    3. x [execute 执行]; 可以执行
  11. rwx权限详解 作用到目录

    1. r [read 阅读]; 可以读取,ls 查看目录内容
    2. w [write 写]; 可以修改,目录内创建+删除+重命名目录
    3. x [execute 执行]; 可以进入该目录
  12. 权限的数字表示

    1. r = 4
    2. w = 2
    3. x = 1
    4. 两两组合 可以有 r-x = 5; rwx = 7; rw- = 6;
    5. 设成 0 = ---
  13. 修改权限

    1. 第一种方式: +-= 变更权限;u:所有者, g:所有组, o:其他人, a:所有人(ugo总合)
    chmod u=rwx,g=rx,o=x [filename];
    chmod o+w [filename];
    chmod a-x [filename];
    
    1. 第二种方式: 通过数字变更权限 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分区:

  1. 最多支持四个主分区
  2. 系统只能安装在主分区
  3. 扩展分区要占一个主分区
  4. MBR最大只支持2TB,但拥有最好的兼容性

gtp分区

  1. 支持无限多个主分区(但操作系统可能限制,比如windows下最多128个)
  2. 最大支持18EB的大容量(EB = 1024PB, PB=1024TB

Linux分区

  1. linux来说无论有几个分区,分给哪一个目录使用,它归根结底只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
  2. Linux采用了一种叫"载入"的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。。这时要载入一个分区,将使它的存储空间在一个目录下获得
  3. 磁盘 ====[mount unmount]==== > Linux文件系统

硬盘

  1. IDE, 驱动器标识符为 "hdx~", hd表明分区所在设备的类型,这里指IDE硬盘。x为盘号(a为基本盘,b为从属盘,c为辅助盘,d为辅助从属盘),~代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。
// 例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区
// hdb2表示第二个IDE硬盘上的第二个主分区或扩展分区
  1. SCSI(ssd),"sdx~", SCSI硬盘是用sd来表示分区所在设备的类型的,其余和IDE硬盘表示方法一样

磁盘情况查询

# 查看系统磁盘
df -h
# 查指定目录的磁盘占用情况
du -ach /opt | grep total `-s 指定目录占用大小汇总 -h带计量单位 -a含文件  --max-depth=1 子目录深度 -c列出明细的同时,增加汇总值`