上一篇介绍了Linux命令行入门指南,这篇做下补充。力求涵盖Linux开发、运维绝大多数场景。建议收藏这两篇作为Linux入门手册查询。
本文以ubuntu18.04为实验平台。
主机名、时区、中文支持
hostname kelemi-s # 修改主机名为 kelemi-s
sudo vim /etc/hostname # 永久修改主机名在此文件
timedatectl set-timezone "Asia/Shanghai" # 修改时区
date # 检查时间时区
sudo apt install language-pack-zh-hans # 安装中文包
sudo localectl set-locale LANG=zh_CN.utf8 # 设置为中文
sudo reboot
locale # 检查当前语言设置
SSH 介绍
sudo apt install openssh-server # 安装
systemctl status sshd # 查看状况
sudo systemctl restart ssh # 还有start,stop
sudo ufw allow ssh # 允许外部访问22端口
sudo systemctl enable ssh # 自启动
ip a # 查看本机对外IP,假设为192.168.1.112
ssh linuxconfig@192.168.1.112 # 连接
vim /etc/ssh/sshd_config # 编辑配置修改端口为8282
Port 8282 # 添加一行,表示端口修改为8282
sudo ufw allow 8282/tcp # 相应防火墙也要允许
sudo systemctl restart ssh # 重启ssh服务应用修改
ssh -p 8282 linuxconfig@192.168.1.112 # 通过8282连接
使用公钥密钥 登录ssh:
生成密钥对,私钥在本地,公钥发服务器,放在家目录下的
~/.ssh/authorized_keys
并修改配置文件 /etc/ssh/sshd.config ,
PubkeyAuthentication 调为 yes。
可以只设置只允许公钥私钥登录,也可以密码和私匙同时有效
* PasswordAuthentication 调为 no ,则不允许用密码登陆
ssh-keygen # 生成密钥对,默认放在home目录下 ~/.ssh,文件名为 id_rsa
# 公钥是.pub 后缀名,当然可以改变名字
# 可以给私钥提供一个保护密码
ssh-keygen -b 4096 # 默认用3072位RSA密钥,可以改成4096位的RSA。
# 也可以加 -t 更改加密类型,加密类型除RSA外,还有
# dsa
# ecdsa
# ecdsa-sk
# ed25519
# ed25519-sk
ssh-keygen -f ~/.ssh/linuxconfig_rsa # 我们可以改变默认保存的路径
# 加 -f 参数
ssh-keygen -p # 如果一开始未设私钥密码,后来想改,可以用 -p 参数
ssh-keygen -p -f ~/.ssh/id_rsa # 也可以提供密钥路径,不用交互式
ssh-copy-id -i ~/.ssh/id_rsa.pub egdoc@192.168.0.39
# openSSH提供了一个工具 ssh-copy-id,用来将公钥传给服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 15342 egdoc@192.168.0.39
# 如果SSH端口不是默认 22,加上 -p 参数
查找文件-whereis,find
whereis
whereis php
whereis apache2
whereis find # 查找到放置相关文件的文件夹
find
find -name 'test.txt' # 从当前文件夹开始查找test.txt文件,大小写敏感
find -name 'test*' # 使用通配符
find -iname 'test.txt' # iname表示不区分大小写
sudo find / -name 'test.txt' # 从 / 根目录开始查找,注意要加上 sudo,否则会有一大堆错误
sudo find / -name 'php.ini' # 实际中经常要查找某配置文件
# ----------------------------
find -user 'bob' # 从当前目录开始,查找属于用户bob的文件
# ----------------------------
find -cmin -20 # 查找过去20分钟内修改的文件
用户和组管理
上一篇介绍过useradd,groupadd等命令,这里介绍另一种更简单的交互式方法
sudo adduser tim # 添加tim用户,根据提示输入密码,全名,手机号码等信息
vim /etc/passwd # 查看用户密码文件。 看看是否已创建了用户
# ----------------------------
# 以tim登录,然后修改宻码
passwd # 提示修改密码
sudo passwd tim # 以管理员身份修改tim密码
修改用户:
sudo chfn tim # 修改相关属性,包括全名,房间号,电话等
# 然后我们查看 /etc/passwd,查看结果
sudo usermod tim # usermod可以修改用户,不加参数将打开man手册
删除用户
sudo deluser tim # 删除用户 tim
sudo rm -rf /home/tim # 手动删除home下的目录,上一个命令不会自动删除家目录
组信息保存位置
/etc/group
添加组:
sudo addgroup testgroup # 添加testgroup组
vim /etc/group # 查看已添加
sudo adduser ralph testgroup # 添加用户ralph 到 testgroup组
sudo adduser bob testgroup
删除组成员:
sudo deluser bob testgroup
删除组:
sudo delgroup testgroup
vim /etc/group # 查看组已消失
Linux-Vim介绍
vim test.txt
i # 小写 i 表示进入插入模式
:wq # 编辑完成后,ESC退出,输入 :wq,w表示写入,q表示退出
:q! # 表示退出且不保存。如果未改修改,不加!也是可以的 :q
/bob # /表示查找bob,文本会高亮显示找到的bob,如果按Enter键,将定位到
# bob,可以按小写 n ,定位到下一个;按大写 N ,定位到上一个
新建、重命名、移动、删除文件夹(mkdir,mv,cp,rm)
与文件操作类似,但也有不同,比如新建文件夹,删除文件夹要添加递归参数或其他选项等。
mkdir newfolder # 新建文件夹
mv newfolder newfolder2 # 重命名文件夹
mv newfolder2 newfolder
cd newfolder
vim testfile # 新建文件
cd ..
mv newfolder folder/newfolder # 将newfolder文件夹移动到 folder下,也命名为newfolder
# 移动文件无需使用递归参数,但复制删除就需要
cp -r newfolder newfolder.bak # 加上 -r 参数表示递归复制
rm -rf newfolder.bak # 加上 r 表示递归, f 表示强制
在Linux服务器安装软件(apt-get)
安装软件:
sudo apt-get update # 更新软件仓库
sudo apt-get install apache2 # 安装apache2
sudo apt-get upgrade # 更新已安装的软件
删除软件:
whereis apache2 # 显示安装包关联的文件夹
sudo apt-get remove apache2 # 删除apache2,但保留配置文件
whereis apache2 # 发现还是存在关联文件夹的
sugo apt-get purge apache2 # 彻底删除apache2,包括配置文件
网络配置(ip,route,dhclient,systemd-resolve,netplan)
查IP情况
ifconfig # 旧的方式,还是有效的
ip addr # 新的方式
查默认网关
route -n # 如果不加 n 显示名称,加了 n 显示IP地址
查看DNS
systemd-resolve --status #
DHCP:
sudo dhclient -v -r # -v 表示详细信息
# -r 表示重新获取IP地址
sudo dhclient -v # 查看详细
设置静态IP:
cd /etc/netplan #
ls -l # 能看到里面有个 yaml 文件
sudo vim XXXX.yaml # 编辑 yaml 文件,设置IP,网关,DNSServer等
sudo netplan apply # 应用更改
Linux-FTP服务器安装(vsftpd)
查看是否安装了vsftpd服务
sudo systemctl status vsftpd # 看到本机未装vsftpd
sudo apt-get install vsftpd # 安装vsftpd
sudo systemctl status vsftpd # 检查vsftpd已在运行
客户端安装 FileZilla
连接 vsftpd 服务端,能看到对应用户的主目录。vsftpd 使用用户的主目录作为FTP的主目录。如果想修改FTP主目录,可以修改 /etc/passwd 文件,找到相应用户修改主目录。
默认情况下,客户端连接 vsftpd 只能下载,不能上传,也就是不能写入。需要做相关调整。
sudo vim /etc/vsftpd.conf
# 查找 write_enable=yes ,去掉注释启用
sudo systemctl restart vsftpd # 重启服务使修改生效
然后就可以上传下载文件了
任务管理和终止进程(top)
top类似windows中的任务管理器。
top # 打开Linux世界的任务管理器
# 项部说明总体状况
# 第一行:开机的时间,登录的用户数,以及CPU 1分钟,5分钟,
# 15分钟的平均负荷(每核的范围 0-1)
# 第二行:表示任务总数量,运行数量,睡眠数量,停止数量,僵尸进程数
# 第三行:CPU利用率,包括用户使用的 和 系统使用的
# 第四行:内存总数,多少使用,多少空闲
# -------------------------------
# 下面列表详细说明不同的进程
# PID 进程ID,操作系统分配。终止进程就用这个ID
# USER 除了root,还有其他用户
# 能看到各进程CPU、内存利用率,Time+ 表示进程运行的时间
# 按 h 弹出简单帮助说明,按 q 退出
# 如果想查看某个用户运行的进程
u --> bob # 按小写的u,再输入bob,只显示bob运行的进程。
o --> COMMAND=apache2 # 按小写o,再输入大写COMMAND=apache2,
# 查找进程apache2的情况
# 按 = 退出筛选
V # 大写V显示父子进程情况
k # 小写k 提示kill哪个进程,输入PID即可完成终止该进程
# 这个需要root权限,终止进程需要加 sudo 进的 top
# sudo top --> k
压缩与归档文件夹(tar)
类似Windows下的Winzip或7-zip,
tar -czvf tarArchive.tar.gz testFolder # C--添加,z--压缩
# v--显示详细,f--指定文件名
tar --list -f tarArchive.tar.gz # 列出打包压缩文件内容
cp tarArchive.tar.gz newfolder/tarArchive.tar.gz
tar -xzvf tarArchive.tar.gz # 解压缩 x--解压缩
启动、停止、重启服务(systemd,systemctl,service,init.d)
Windows只有一种管理服务的方式,而Linux有三种,这可能是很多人比较困惑的地方。
systemd,service,init.d。现在主流是sytstemd,service仍在用。init.d基本淘汰,不再建议用,但有些还在用,仍是有效的。
三种方式做同样的事情,能达到同样的目标。
sudo systemctl status # 展示系统中全部的服务状态
sudo systemctl status apache2 # 展示特定的服务,这里是apache2
sudo systemctl stop apache2 # 停止服务
sudo systemctl status apache2
sudo systemctl start apache2
sudo systemctl restart apache2 # 启动,重启服务等
sudo service --status-all | less # 查看所有服务
# + 表示正在运行
# -表示未在运行
sudo service apache2 status # 查看特定的服务状态,这里是apache2
sudo service apache2 stop # 停止服务
sudo service apache2 start
sudo service apache2 restart # 启动,重启等
sudo /etc/init.d/apache2 status # 具体的文件夹及脚本apache2
sudo /etc/init.d/apache2 stop
sudo /etc/init.d/apache2 status | less
sudo /etc/init.d/apache2 start
sudo /etc/init.d/apache2 restart
实现基本以查看状态 status和重启restart 服务为多.
也有一个reload ,在不重启的情况使配置生效。
一般用restart没问题,不差这微小的时间差异。
计划任务(crontab)
crontab的调度时间5位数字分别表示分、小时、天、月、星期。
可以访问这个有趣的网站了解用法:
https://crontab.guru/
命令示例:
crontab -e # 选择编辑器。这里选2 vim
# 以当前用户的权限执行计划任务,如
# * * * * * touch /home/bob/cronTest
sudo crontab -e # 表示以 root权限,写计划任务
crontab -l # 检查计划任务列表
sudo crontab -u tim -l # 查看用户tim的计划任务
# --------------------
# 有时中间可能想修改crontab的编辑器,比如之前不小心选了nano,现准备换成
# vim,可以用以下命令
rm ~/.selected_editor # 删除默认选择的编辑器
crontab -e # 下次再编辑将跳出选择选项,重做选择
UFW防火墙安装(ufw)
默认 ufw 是没有开启的。我们来开启,并添加规则
sudo ufw status # 查看状态是未激活的
# 用 filezilla测试可以连上 该服务器的FTP服务
sudo ufw enable # 开启 ufw
# 再用filezilla测试连接 ftp,已不能连了
sudo ufw status verbose # 查看详细的 ufw 信息,ufw默认是阻止所有
# Default: deny(incoming),allow(outgoing),disabled(routed)
sudo ufw allow 21 # 只允许21端口
sudo ufw status verbose # 查看规则
# 我们再测试 filezilla, 就可以连入该服务器了
sudo ufw allow from 10.0.1.19 to any port 22 #
# 允许 来自10.0.1.19 到 端口 22 的 访问,允许该地址的SSH访问
sudo ufw allow from 10.0.1.0/24 to any port 22 #
# 允许 10.0.1.0/24子网的主机 ssh 访问
sudo ufw allow ftp # 知名服务直接写 服务名字
删除相关规则
sudo ufw status numbered # 查看规则号
sudo ufw delete 2 # 删除第2条规则
# 如果想要删作全部规则
sudo ufw reset # 删除全部规则并禁用 ufw
NMAP介绍
Linux运行 nmap 最好以 sudo 命令方式,否则可能取不到MAC 信息。
https://nmap.org
安装nmap
sudo apt-get install nmap
扫描一台特定的主机
sudo nmap 192.168.1.1 # 扫描
# 中间可以按一下键,查看进度
# 结果有些可以看到 MAC 地址 及品牌
扫描整个网络
sudo nmap -v 192.168.1.0/24 # -v 表示显示详细信息
# 能看到哪些主机是开放的,扫描花了多长时间。
# 并可向上滚动屏幕查看具体主机的情况
扫描结果保存到文件中
sudo -A -F nmap 192.168.1.0/24 -oN /home/bob/text.txt
# -A 积极扫描,获取一些有用的如操作系统信息等
# -F 快速扫描最常见的 100 个端口
# -o 表示输出文件
# -N 表示输出为简单的文本文件,-X 表示 XML文件
可以将扫描结果通过程序处理,存到数据库,然后再作处理,比如查看分析等。