[自用] Linux学习整理

因为最近代码需要放在服务器山跑,而且之后自己学习或者工作也会用到Linux就打算了解入门一下。教材自己选的是B站一个upCodeSheep推荐的《Linux就该这么学》。文章内容是对书本上的个人整理。(因为个人感觉书有点过时而且不在VPS上,后续内容自己会浏览一些其他资料再整理增加)

入门命令

echo [字符串|$变量]
date [options] ["+form"]  # 例如 date "+%Y-%m-%d %H:%M:%S"
reboot  # only for root
poweroff  # only for root
wget [options] "url"  # 下载,-b后台,-P 指定目录,-t最大尝试次数,-c断点续传,-p 现在页面内所有资源,-r 递归下载
ps [options]  # -a显示所有进程,-u用户以及其他详细信息,-x显示没有控制终端的进程
top

# 系统状态检测命令
uname -a
uptime
history
sosreport

# 工作目录切换
pwd
cd
ls [options] [filename]  # -a 查看全部文件, -l查看文件的属性,大小等信息

# 文件文本编辑
cat [options] [filename]  # 适用于内容较少的纯文本文件 -n 显示行号
more [options] filename  # 适用于内容较多的纯文本文件
head [options] [filename]  # 查看文件前N行, -n 指定行数
tail [options] [filename]  # 查看纯文本稳当的后N行 -f 持续刷新
tr [原始字符] [目标字符]  # 替换纯文本文件中的字符
cut [opitons] filename  # 按列提取文本字符 -f 参数设置要看的具体列数,-d参数设置间隔符
diff [options] filename  # 比较文件的差异, -c参数显示具体的差异

# 文件目录管理命令
touch [options] [filename]  # 创建空白文件或者修改文件的时间 -a 仅修改读取时间, -m仅修改修改时间,-d同时修改读取和修改时间
mkdir
cp [options] 源文件 目标文件  # 复制文件和目录 -p 保留原始文件的属性, -r 目录的递归持续复制,-i 如果存在询问是否覆盖
mv [options] 源文件 [目标文件|目标文件名]  # 剪切或者重新命名
rm [options] filename  # 删除文件
file filename  # 查看文件的类型

# 打包压缩与搜索命令
tar [options] [filename]  # 打包压缩或者解压, -c 创建压缩文件, -x 解压文件, -t 查看压缩包内有哪些文件, -z 用Gzip压缩或解压, -j 用bzip2压缩或者解压, -v 现实压缩或解压的过程, -f 目标文件名, -p 保留原始的权限与属性, -P 使用绝对路径来压缩 -C 解压到指定目录
grep [options] [filename]  # 关键字搜索,-b 将可执行文件当做文本文件来搜索,-c 仅显示找到的行数,-i 忽略大小写, -n 显示行号, -v 反向选择
find [查找路径] 寻找条件 操作 # 查找文件, -name 名称匹配, -perm 匹配权限, -user 匹配所有者, -group 匹配所有组

管道符、重定向与环境变量

  • 管道符

    管道符命令A|命令B的作用就是将命令A的输出作为命令B的标准输入,

  • 输入和输出重定向

    在linux系统中有三种输入和输出,分别是标准输入(0表示从非键盘输入),标准输出(1表示输出到文件)和错误输出(2表述输出到文件)。

  • 命令行匹配符

    *  # 匹配零个或者多个字符
    ?  # 匹配任意单个字符
    [0-9]  # 匹配范围内的数字
      # 转义字符
    ''  # 转移作用域内的字符
    ""  # 变量依然生效
    ``  # 执行命令
    
  • 环境变量

    env查看环境变量。定义环境变量export VARIABLENAME = VALUEexport用来将变量提升为全局变量。

Vim编辑器与Shell命令

  • Vim编辑器

    Vim编辑器有三种模式:命令模式(光标移动、复制,删除,粘贴),输入模式(输入),末行模式(保存,退出,与设置编译环境)。一开始进入都是命令模式,输入a,i,o等键进入输入模式,输入:进入末行模式,esc退出输入模式或末行模式。

    命令模式命令:dd删除光标所在行,yy复制光标所在行,p将之前删除或复制的内容粘贴之光标之后,/从上到下检索字符串,?从下到上检索字符串,n定位到一下个检索字符串,N定位上一个检索字符串,u撤销上一部操作

    末行模式命令::w保存,:q退出,:q!强制退出,:set nu显示行号,:整数跳转到行数

  • shell

    编写shell脚本

    # !/bin/bash  # 脚本声明
    #  注释信息
    
    # 命令
    

    shell通过$number这种方式来接受相对应number的位置参数,$#统计一共有多少个参数,$*位置参数的值,$?判断上一条命令是否成功执行。

    参数判断 -d 测试是否为目录,-e测试路径是否存在, -f判断是否为文件,-r测试当前用户是否有读取权限,-w测试写入权限,-x测试执行权限。&&逻辑上的与,前一条命令成功才执行下调命令。||逻辑上的或,!逻辑上的否。

    字符串判断符号: -z是否为空,=是否相同

    条件语句

    if [condition];
    	then
    
    elif ;
    	then
    else
    
    fi
    
    # read -p "提示语句" variable 相当于C++的 input
    

    循环语句

    for 变量名 in 取值列表
    do
    
    done
    
    while 条件测试操作
    don
    
    done
    
  • 计划任务服务

    at(at 分钟 小时 日期 月份 星期 )一次性任务, cron(crontab -e [-u username]创建,-l查看,-r 删除)长期可循环任务。

用户和用户组

  • 添加用户
useradd -d /home/‘username’ -s /bin/bash 'username'
  • 修改用户密码
passwd 'username'
# -l 锁定用户禁止登录, -u 解除锁定, -d 可使用空密码登录系统, -e 强制修改密码
  • 删除用户
userdel  'username'
# -f 强制删除用户, -r 同时删除用户及用户目录
  • 修改用户属性
usermod 'username'
# -dm 变更用户家目录及转移数据, -g 变更所属组, -G 变更拓展用户组, -L 锁定用户, -l 解锁, -u 修改用户UID
  • 创建用户组
groupadd 'groupname'
  • 切换用户
su - 'username'
  • 使用root权限
sudo cmd

如果普通用户想要不输入root密码的使用root权限,需要在/etc/sudoers中作出如下更改

‘username' ALL=(ALL:ALL) NOPASSWD: ALL 

文件身份权限

  • 文件权限

    Linux系统中分别对文件所有者,文件所有组和其他人指定了可读,可写,可执行。

  • 更改文件权限和所属组

chmod [参数] 权限 filename  # 如果是文件的话要加上 -R参数进行递归
chown [参数] 所有者:所属组 filename
  • 隐藏属性
charr [参数] filename
# i无法删除, a仅允许补充, s彻底从硬盘中删除
lsattr [参数] filename

存储结构与磁盘划分

在Linux系统中实际使用一个新硬盘需要经过分区,格式化和挂载操作。

  • 分区

    分区需要使用fdisk命令

    fdisk [磁盘名称]  # 磁盘名称可以通过 dh -h 查看
    
  • 格式化

    格式化分区使用mkfs.[文件系统] 分区名

  • 挂载

    挂载使用命令mount 分区 已存在的目录

    需要注意的是,使用mount进行挂载只是进行一次性的,如果想要永久的话编辑/etc/fstab配置文件

  • 交换分区

    交换分区(Swap)是用来当物理内存不够使用时暂时将数据存放在硬盘上。交换分区与硬盘不同的操作只在于格式化命令,交换分区的格式化命令是mkswap

  • 软硬连接方式

    软硬连接使用的命令是ln

    ln [选项] 源文件 目标文件
    # -s 创建软连接,默认为硬链接, -f 强制创建, -i 覆盖询问, -v 显示过程
    

    硬链接和软链接的区别是,对于软连接,如果文件名称等信息进行变更,那么链接的文件则无法打开,而硬链接则仍然可用。

LVM磁盘阵列技术

由于我买的是云服务器,而且可能之后也不会去做运维,RAID部分就直接略过了。

  • 逻辑卷概念

    逻辑卷的提出是为了更方便的进行扩容或者缩容,逻辑卷的创立需要物理卷,卷组和逻辑卷三个部分。

    # 创立物理卷,使硬盘支持LVM
    pvcreate  /dev/sda /dev/sdb
    # 将硬盘加入到卷组
    vgcreate 卷组名 硬盘名
    # 将卷组切割出指定大小的逻辑卷
    lvcreate -n 逻辑卷名称 -L 1024M 卷组名
    # 格式化
    mkfs.xfs 逻辑卷问价
    # 挂载
    mount
    # 写入配置文件 
    vim /etc/fstab
    
    # 扩展逻辑卷
    # 先取消挂载
    unmount 
    # lvextend 
    # 检查硬盘完整性
    e2tsck -f 逻辑卷路径
    # 重置硬盘容量
    resize2fs 逻辑卷路径
    # 重新挂载 
    

iptables和firewalld防火墙

这一部分没有什么太多好总结的,就几条命令

iptables -I INPUT -s address -p 协议  --dport 22 -j ACCREPT/REJECT
firewall-cmd  --permanent  --zone=public  --add-service=https

SSH管理服务器

这部分也没什么好总结的,唯一要记得就是screen命令。screen命令和我理解的后台处理不一样,只是可以不丧失对终端的控制权,可以恢复上次的内容。

screen -S # 创建新的session -ls 查看所有session -d 离线session -r 恢复session

使用Apache服务部署静态网站

我自己用的云服务器是Ubuntu的,跟书上虚拟机的Centos不太一样,这里只记述个大致流程以及可能遇到的问题,之后真的要搭建自己网站再补充吧。

首先Ubuntu直接apt install apache2就ok了,如果这时候无法访问页面,可以查看一下防火墙是否允许了https/http协议。

apache2的配置文件都放在/etc/apache2/apache2.conf里面,然后网页数据目录是在/var/www/html里面。

Ubuntu里面没有安装selinuxsemanage的命令,总之如果遇到权限问题,需要去解决这个安全子系统。(总感觉这本书有点过时...)

vsftpd服务传输文件

vsftpd(very secure ftp daemon)一共有三种模式,分别是匿名模式、本地用户模式和虚拟用户模式。Ubuntu版本和Centos不太很一样,这里我只尝试了本地用户模式,参考ftp服务器搭建

使用Samba或NFS实现文件共享

Samba的配置可以参考安装Samba实现文件共享,需要注意的是Ubuntu系统中使用smbpasswd -a 命令的用户对象必须是系统中的用户。

autofs的配置可以参考在Ubuntu16.04上使用Autofs

使用Bind提供域名解析服务

参考Ubuntu下Bind DNS域名服务器的安装

原文地址:https://www.cnblogs.com/DemonHunter/p/13782080.html