Linux 学习笔记

Linux

使用了CentOS 6.8系统

主要使用了Ubuntu 20.10系统

Oracle VM Virtual Box

Linux

CentOS 6.8

CentOS 7

Ubuntu 20.10

安装系统,配置系统

  • 下载镜像iso文件
  • 安装系统
  • 配置系统分区, 一个主分区三个配置分区

文件目录系统

有且只有一个根目录 /

目录都是预先规划好的

远程操作

先将VirtualBox 的网络设置改为桥接,这样就可以使用本地同网域ip访问

可用工具:

  • XShell (远程操作)
  • XFtp5 (远程上传下载)
  • MobaXterm (多功能)

Ubuntu 需要先安装ssh服务

可以通过以下指令确认是否安装

1
ssh localhost

显示ssh: connect to host localhost port 22: Connection refused就是没有安装

通过以下指令安装

1
sudo apt-get install openssh-server

默认会自动启动

通过ps -e | grep ssh查看,或者service ssh status

之后可以在/etc/ssh/sshd_config下修改配置

参考:

Ubuntu 安装 ssh 服务

使用ssh操作22号端口即可

文件管理就用sftp一样访问22号端口

vi vim

vi 是文本编辑器, vim是vi的增强版本

vim的三种常见模式:

  • 正常模式
    • 进入文档起初就是正常模式
    • 可以使用快捷键
  • 插入模式
    • 使用 i , I , o , O , a , A , r , R 进入
    • 可以输入内容
  • 命令行模式
    • 提供相关指令, 完成存盘, 读取, 替换, 离开 vim 编辑器, 显示行号等

快捷键

正常模式:

  • yy复制当前行, 5yy复制当前以及当前行下的一共5行
  • dd删除当前行, 5dd删除当前以及当前行下的一共5行
  • p黏贴
  • G 到文档末行, gg 到文档首行
  • u 撤销未保存的操作
  • 行号 然后按G / gg, 将光标移动到指定行

命令模式:

  • / sss , 在当前文件中搜索sss, 正常模式下输入n就是查找下一个匹配的关键字
  • set nu 开启行号, set nonu 关闭行号显示

开机重启注销

  • shutdown
    • shutdown -h now 表示立即关机
    • shutdown -h 1 1分钟后关机
    • shutdown -r now 立即重启
  • halt 直接使用, 和关机效果一样
  • reboot 重启
  • sync 同步, 把内存数据保存到磁盘上
    • 每次关机重启前都应该先执行此指令

用户登录注销

最好不要以管理员账户直接登录

通过普通用户输入su指令可以切换到管理员

  • logout /exit注销, 就关闭了远程连接
    • 在图形界面(运行级别)是无效的

用户管理

  • 组对应权限, 每个组有各自的home目录
  • Linux是个多用户管理系统, 任何一个要使用系统资源的用户都需要先向管理员申请账号, 然后以对应账户登录系统

添加用户: (需要root权限)

  • useradd [选项] 用户名

    • /home目录下面可以查看用户存放的位置

    • ubuntu 下 新建用户需要使用 -m 选项才会创建home下目录

  • 默认自动为新用户创建了一个用户组

  • -d指定目录

    • useradd -d <directory> <username>指定home目录
  • passwd <username>指定密码

  • useradd -g <groupname> <username>创建用户的时候指定组, 不指定默认创建与用户名相同的组

删除用户:

  • userdel <username> 这样会保留home目录
  • userdel -r <username>包括home目录也会被删除
  • 一般不删除home目录

查询用户信息:

  • id <username>
  • 如果无此用户, 返回无此用户
  • uid – 用户id
  • gid – 组id
  • groups – 组

切换用户:

  • su - <username>切换用户
  • exit退回原来的用户
  • whoami查看当前是什么用户

用户组:

  • groupadd <groupname>创建组

  • groupdel <groupname>删除组

  • usermod -g <groupname> <username>切换用户的组

  • /etc/passed用户配置文件(用户信息)

  • /etc/group组信息配置文件

  • /etc/shadow口令信息配置文件

实用指令

指定运行级别

系统运行级别配置文件: /etc/inittab, CentOS7以后以及弃用

  • 0: 关机
  • 1: 单用户, 找回丢失密码
  • 2: 多用户无网络
  • 3: 多用户有网络, 用的做多
  • 4: 保留
  • 5: 图形级别
  • 6: 重启

命令: init <0-6>

面试题:

如何找回丢失的root密码?

进入单用户模式, 然后修改root密码, 因为进入单用户模式不需要root密码

此处使用CentOS 6.8

帮助指令

  • man <ls> 查看ls指令怎么使用
  • help <cd> 查看cd的功能

文件目录类指令

  • pwd当前绝对路径
  • ls
  • cd
  • mkdir
  • rm, -r代表所有文件, -f代表强制不提示
  • rmdir 只能删除空目录, 有内容需要使用rm -rf <dir>
  • touch <filename> 创建空文件, 可以跟着同时创建多个文件
  • cp <options> <file source> <destination dir>拷贝, -r代表递归拷贝, \cp强制覆盖并且不提示
  • mv <old filename> <new filename>重命名
  • mv <old dir> <new dir>
  • cat 预览, -n显示行号
  • more 以全屏方式按页显示文件内容
    • 空格下一页
    • ctri + B上一页
    • Enter下一行
  • less按需加载文件, 快捷键与more差不多, 但是more直接加载好了所有文件内容
  • > 输出重定向, 覆盖写入文件
  • >> 追加
  • echo
  • head默认查看文件开头十行, -n自定义具体几行
  • tail默认显示文件后10行, -f 实时追踪文件更新
  • ln -s <link dir> <link name>软连接指令, 类似快捷方式, 但是cd进去使用pwd查看目录仍然是软连接的目录
  • history查看历史指令, 可以加数字, 代表查看之前多少个指令
    • !<number>代表执行历史编号为178的指令

时间日期类指令

  • date指令, 显示当前时间
    • date "+%Y %M %D %H %M %S"查看年月日时分秒
    • date -s <time>设置时间
  • cal以日历方式显示时间, 后面加年份可以显示全年日历

搜索查询指令

find

  • find <dir> <options> <description>按照特定指令查找
  • 比如find /home -name a.txt

locate

通过建立locate的数据库实现快速查找

  • updatedb创建locate数据库
  • locate <string>

grep

  • grep <options> <string> <source file>
  • 案例:
    • cat hello.txt |grep -ni yes在cat预览中找出yes关键词出现的地方-n显示行号, -i不区分大小写

压缩解压指令

gzip/gunzip

  • gzip <filename>压缩, 压缩完不保留源文件
  • gunzip <filename>.gz解压gz文件

zip/unzip

  • zip <options> <filename>
  • -d <dir>指定解压到指定目录
  • -r递归压缩, 压缩目录

tar

  • 打包指令, 最后打包的文件是tar.gz
  • -c打包成tar文件
  • -v显示详细信息
  • -f指定压缩后的文件名
  • -z打包同时压缩
  • tar -zcvf a.tar.gz al.txt a2.txt将多个文件打包压缩成a.tar.gz, 也可以操作整个目录
  • tar -zxvf a.tar.gz解压到当前目录
  • tar -zxvf <filename> <dir> 解压到指定目录, 前提是该目录事先存在

组管理和权限管理

LInux中每个用户都必须有一个组

每个文件都有所有者, 所在组, 其他组

所有者

一般文件的创建者就是文件的所有者

  • ls -ahlh是human的意思, 可以显示组信息
  • chown <username> <filename>change owner改变文件的所有者
    • 组不会跟着改变, 所以所有者不一定对应所在组
    • -R修改目录下所有文件
  • chgrp <group name> <filename>change group 修改文件所在组
  • usermod -g <groupname> <username>切换用户的组
  • usermod -d <dir> <username>切换用户登录的初始目录

权限管理

使用ls -ahl查看

1
-rw-r--r-- 1 root root 0 Dec 21 16:28 ok.txt

权限字符每一位所代表含义不一样

  1. -文件类型, (d, -, l, c, b)
  2. rw-所有者权限User
    • r, read
    • w, write
    • e, excute
  3. r--文件所在组的用户的权限Group
  4. r--文件其他组的用户的权限Other
  5. 1如果是文件, 表示硬链接的个数, 如果是目录表示该目录的子目录个数

之后依次是:

  • 所有者
  • 所在组
  • 文件大小
    • 目录是4096
  • 时间
  • 文件名

修改权限

例子:

1
chmod u=rwx,g=rx,o=rx abc

分别设置了所有者, 组用户, 其他组用户的权限

给用户和组用户添加或者删除权限

1
chmod u-x,g+w abc

给所有用户添加权限

1
chmod a+r abc

使用数字变更权限

规则: r=4, w=2, x=1, 其实就是二进制

例子: rwx=4+2+1=7

chmod u=rwx,g=rx,o=x <file/dirname> 相当于chmod 751 <file/dir name>

任务调度

定时调用脚本或者代码

  • crontab <options>

每一分钟就执行一次:

1
*/1**** ls -l /etc/ >> /tmp/to.txt

五个占位符说明:

第一个* : 一个小时中的第几分钟

第二个* : 一个小时中的第几小时

第三个* : 一个月当中的第几天

第四个* : 一年中的第几个月

第五个* : 一周中的星期几

-可以代表时间范围

,代表不连续的时间

*代表任何时间

*/n代表每隔多久执行一次

  • crontab -r终止任务调度
  • crontab -l列出当前有那些任务调度
  • service crond restart重启任务调度

磁盘分区

分区基础:

  1. mbr分区
    1. 最多支持4个主分区
    2. 系统只能安装在主分区
    3. 扩展分区要占一个主分区
    4. MBR最大支持2TB, 拥有最好兼容性
  2. gtp分区
    1. 无限主分区, 但操作系统可能限制, windows最多128
    2. 最大18EB
    3. windows7 64以后支持gtb

windows下的分区:

  • 系统盘就是主分区
  • 其他磁盘就是扩展分区, 也就是逻辑分区

Linux分区:

  • 归根结底只有一个根目录/, 每个分区都是用来组成文件系统的一部分
  • linux采用”载入/挂载, mount/umount”的处理方式, 将分区和目录联系起来

Linux 硬盘分IDE硬盘和SCSI硬盘:

  • IDE硬盘标识符为”hdx“, hd表示设备类型, x为盘号(a为基本盘, b为从属盘, c为辅助硬盘, d为辅助从属盘) ““代表分区, 前四个分区用数字1-4表示, 5开始为逻辑分区

  • SCSI硬盘为”sdx~”

  • lsblk -f查看系统分区和挂载的情况

为linux增加硬盘

  • 添加硬盘
  • 分区
    • fdisk <disk root>命令分区
  • 格式化
    • mkfs -t ext4 /dev/sdb1
  • 挂载
    • mount <disk root> <dir for disk>
    • umount取消挂载
  • 设置永久挂载, 重启不重置
    • 修改挂载文件
    • vim /etc/fstab/

磁盘情况查询

1
df -ach --max-depth=1
  • df -h带计量单位
  • - c 列出明细同时, 增加汇总值
  • - a含文件
  • --maxdepth=1深度为1

统计home目录下文件个数

1
ls -l /home | grep "^-" | wc -l 

网络配置

指定固定ip地址

  • 编辑/etc/sysconfig/network-scripts/ifcfg-eth0

CentOS 6.8 才适用

进程管理

  • 每个执行的程序都成为一个进程

  • 每个进程都对应一个父进程, 父进程可以复制多个子进程

  • 每个进程都可能以两种方式存在, 前台和后台, 前台就是用户可以在屏幕上看到可以操作的, 后台就是指实际在操作但是屏幕上看不到的进程

  • 系统服务一般都是后台进程, 常驻到关机结束

基本指令:

  • ps 查看进程
    • -a显示当前终端所有进程信息
    • -u以用户格式显示进程信息
    • -x 显示后台进x程运行的参数
    • -e 显示所有进程
    • -f 全格式
1
ps -aux | grep sshd

终止进程

基本语法:

  • kill <options> <process number>
  • killall <process name>
  • -9 强制

树状图展示进程

pstree <options>

  • -p 展示PID
  • -u 用户ID

服务管理

服务本质就是进程, 但是是后台运行的, 通常都监听某一个端口, 等待其他进程的请求

  • service <service name> <start|stop|restart|reload|status>

CentOS7.0 后使用systemctl

可以使用windows telnet 检查那个端口在监听

–end–

Author: klenq
Link: https://klenq.github.io/2021/12/06/Linux学习笔记/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.