Linux基本命令与SSH远程登录
Ban
ChangAn University命令行快捷键
- line editing
- tab 自动补全
- C+p 上一条命令 C+n 前一条
- C+r
常用操作
帮助
- man
- --help
pwd
- print working dir
- 显示现在所处的目录
ls
- 不带参数就显示当前目录下的所有文件
- 程序可以加参数
-l
显示详细信息-h
人性化显示文件尺寸-a
显示所有文件, 以 . 开头的文件是隐藏文件- 还可以带一个目录当参数,这样就会显示这个目录
- 下面两个是等价的
ls -l -h
ls -lh
cd
- cd /homels -al
- 改变当前目录 change directory
.
代表当前目录..
代表上级目录- cd 不带参数就回到默认的家目录
- 每个用户都有一个家目录,默认在
/home/用户名
- root 用户的家目录是
/root
touch
touch a.bsx
- 如果 a.bsx 存在就更新修改时间
- 如果 a.bsx 不存在就创建文件
mkdir
- 创建一个目录
-p
可以一次性创建多层目录mkdir -p a/b/c
cp
- 复制出一个文件,用法如下
cp a.txt b.txt
- 复制 a.txt 并把新文件取名为 b.txt
- 复制目录要加上 -r 参数
cp -r a b
rmdir
- 只能用来删除一个空目录
rm
- 这个命令直接删除东西,很危险,一般不要用
- 删除文件或者目录
-f
强制删除-r
用来删除目录
mv
- 移动文件或者文件夹
- 也可以用来改名
mv a.txt b.txt
mv b.txt ../
mv b.txt ../bsx.txt
- 可以用
mv xx /tmp
的方式来将文件放入临时文件夹 - tmp是操作系统提供的临时文件夹,重启会删除里面的所有文件
cat
- 显示文件内容
less head tail
- less 可以前后退看文件 q 退出
- head 可以显示文件的前 10 行
- tail 可以显示文件的后 10 行
- head 和 tail 有一个 -n 参数
head -n 20 a.bsx
echo
目录分布
主要如下:
/home
家目录/root
root 用户目录/etc
放配置文件/tmp
临时文件/var/log
日志/bin
binary 命令存放的地方。有好几个 bin,不用理解。/lib
library 库
权限操作
- sudo
- 用管理员帐户执行程序
- 比如安装程序或者修改一些系统配置都需要管理员权限
- su
- switch user, 切换用户
su bsx
sudo su
文件权限 文件类型 用户 用户组 文件大小 修改日期 文件名
-rw-rw-r-- 1 bsx bsx 10 11/09 20:28 b.bsx
drwxrwxr-x 2 bsx bsx 4096 11/09 20:28 tmp
文件类型 是否可读 是否可写 是否可执行
d r w x
- r w x
- 三组 rwx 分表代表 所属用户|同组用户|其他用户
- rwx 可以用数字表示为 421
- 于是乎
r-- 就是 4
rw- 就是 6
rwx 就是 7
r-x 就是 5
- chown
- 改变文件的用户
chown bsx c.bsx
chown bsx:bsx c.bsx
- chmod
- 改变文件权限,不要用数字
chmod 666 root.bsx
- 修改所属用户权限
chmod u+x tmp
- 修改同组用户权限
chmod g+x tmp
- 修改其他用户权限
chmod o+x tmp
信息查找
- file
- 显示文件的类型(不是百分之百准确)
- uname
- 显示操作系统的名字或者其他信息
uname -r
uname -a
- which
which pwd
- 显示 pwd 的具体路径
- whereis
whereis ls
- 显示更全面的信息
- whoami
- find
find /usr/bin/* -name py*
- history
- 查看历史命令
- grep
- 查找
grep a a.bsx
奇怪符号
# 这是注释
# $ 用来表示普通用户的提示符
$ ls
# # 还可以用来表示 root 用户的提示符
# service ssh restart
# ~ 家目录快捷方式
$ cd ~
$ pwd
# > 覆盖式重定向
$ echo hello > test.txt
$ echo hello > test.txt
$ cat test.txt
# >> 追加重定向
$ echo hello >> test.txt
$ echo hello >> test.txt
$ cat test.txt
# | 管道, 用来组合命令
$ history | grep touch
# `` 获取命令执行的结果
echo `pwd` > test.txt
# & 后台执行
$ python3 server.py &
# 可以用 fg 命令把一个在后台的程序拉到前台来
$ fg
# 可以用 Ctrl-z 来把一个前台的程序放到后台去挂起
其他命令
ps
- 查看进程, 一般用下面的用法
ps ax
ps ax | grep python
- 查看带 python 字符串的进程
ps axf
kill 和 killall 杀进程
- 用
ps ax
找到进程id (pid) - 普通杀:
kill [pid]
/kill -15 [pid]
/kill -TERM [pid]
- 强制杀:
kill -9 [pid]
/kill -KILL [pid]
- 先用
kill
再用kill -KILL
,不要用带数字的 - killall 是用进程名字来杀进程
- 用
后台前台
- fg
- jobs
快捷键
- C-z 挂起到后台
- C-c C-d 中断程序
reboot
- 重启
shutdown
- 关机
- 可以用参数指定时间
halt
- 关机
ssh
ssh 概念和使用
shell 你用来和电脑交互的一个软件, 特指用命令行交互 terminal
- 本地查看 ssh 日志
ssh -v
- ssh 流程
- 服务器 ssh 日志
grep sshd /var/log/auth.log
FileZilla
- ssh sftp
- 连接服务器
ssh 设置
- 在本地生成公私钥
- 用
ssh-keygen
命令在本地~/.ssh
下生成公私钥 Windows 是在C:\Users\xxx(用户名)\.ssh
这个文件夹下 - id_rsa 是私钥 自己保存 不要给别人看
- id_rsa.pub 是公钥 是要到处使用的 可以给别人看的
- known_host 是记录你访问的服务器, 如果你重装了服务器, 需要删除这个文件
- 用
- 添加公钥到服务器
- 以 ubuntu 用户和对应密码配置 filezilla
- 在 filezilla 里打开服务器,把本地的 id_rsa.pub 上传到用户目录
- 在 cmder 下 ssh 服务器
ssh ubuntu@ip
- 切换成 root 用户
sudo su
- 确保
.ssh
文件夹存在mkdir -p /root/.ssh
- 复制公钥到 root 用户的 ssh 配置下
cp /home/ubuntu/id_rsa.pub /root/.ssh/authorized_keys
- 测试公钥
- 测试之前重启 ssh 服务器
service ssh restart
- 关闭当前链接之前,先测试
- 另外开一个 cmder 窗口
- root 用户能免密登陆
ssh root@ip
- 测试之前重启 ssh 服务器
- 关闭密码登录
- filezilla 重新配置,用户名是 root,验证方式是你本地的私钥
- 用 filezilla 编辑
/etc/ssh/sshd_config
- 确保
PasswordAuthentication
后面是 no - 注意去掉
#
注释 - 重启 ssh 服务器
service ssh restart
- 关闭当前链接之前,先测试
- 另外开一个 cmder 窗口
- root 用户能免密登陆
ssh root@ip
- 其他用户登陆显示 Permission denied (publickey).
ssh test@ip
- 之后统一用 root 登录
- cmder 下 ssh root 登录
ssh root@ip
- cmder 下 ssh root 登录
软件安装和设置
apt update
apt install -y ssh git
安全
ssh
- ssh key
- 关闭密码登录
redis 漏洞
- 以前默认是可以远程连接的
- 以前默认是没有密码的
- 有些 redis 安装后默认是 root 用户运行
- 可以自定义路径保存配置文件
- 覆盖 ~/.ssh/authorized_keys
- mongo 默认也没有密码
- 这几年出了很多类似事故
- docker 会改 iptable,所以要用硬件防护墙
防火墙设置
安装
apt install ufw
ufw allow 22
ufw allow 80
ufw allow 443
ufw default deny incoming
ufw default allow outgoing
ufw enable
ufw status verbose
日志: grep -i ufw /var/log/kern.log
服务器部署项目
在本地打jar包
在本地运行
java -Dfile.encoding=UTF-8 -jar xxx1.0.jar在服务器部署
安装jdk
apt install openjdk-11-jdk上传jar 或者用filezila
scp xxx1.0.jar root@172.81.211.138:/tmp/server.jar运行
java -jar /tmp/server.jar后台运行
java -jar /tmp/server.jar &
参考书
- 《The Linux Command Line》
- 渠道1:免费【正版】:http://billie66.github.io/TLCL/
- 渠道2:自行买《Linux命令行大全》