[自用] 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 = VALUE
,export
用来将变量提升为全局变量。
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 删除)长期可循环任务。
用户和用户组
- 添加用户
adduser [--home DIR] [--shell /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里面没有安装selinux
和semanage
的命令,总之如果遇到权限问题,需要去解决这个安全子系统。(总感觉这本书有点过时...)
vsftpd服务传输文件
vsftpd(very secure ftp daemon)一共有三种模式,分别是匿名模式、本地用户模式和虚拟用户模式。Ubuntu版本和Centos不太很一样,这里我只尝试了本地用户模式,参考ftp服务器搭建。
使用Samba或NFS实现文件共享
Samba的配置可以参考安装Samba实现文件共享,需要注意的是Ubuntu系统中使用smbpasswd -a
命令的用户对象必须是系统中的用户。
autofs的配置可以参考在Ubuntu16.04上使用Autofs