# Linux基础
* Linux目录结构
* 常见命令
* 用户和组
* 权限
## 常用端口号
```
http 80 smtp 25
https 443 pop3 110
ssh 22 ftp 21
scp 22
```
## ubuntu 远程连接 需要开启ssh 服务
```
sudo apt-get install openssh-server
service ssh start|stop|restart
```
### 远程连接工具
* xshell
* putty
* scrt
### 命令提示符
```
need888@need888-virtual-machine:~$
need888 用户名
need888-virtual-machine 主机名 也叫 hostname
~ 用户的家目录 等同于 /home/need888 类似于windows 下面的 C:\Users\neyo
$ 普通用户正在输入
# 超级管理员正在输入
root@need888-virtual-machine:~#
普通用户的家目录 是 /home/普通用户用户名
管理员用户的家目录 是 /root
```
> ubuntu 安全考虑 root 也就是超级管理员 没有唤起
>
> 普通用户相关操作 没有权限 需要 加sudo
>
> 管理员 权限最大 不需要sudo
### 唤起root
```
sudo passwd root
输入两次密码
su root 切换到root
```
### 命令错误原因
* Linux 严格区分大小写 cd 切换目录 CD 就会报错
* 命令多了空格
* 有些命令 需要提前安装
### 常用快捷键
| 快捷键 | 说明 |
| ------------------ | ---------- |
| ctrl+c | 终止正在执行的命令 |
| ctrl+a | 回到命令的开头 |
| ctrl+e | 回到命令的结尾 |
| ctrl+u | 清空命令行 |
| ctrl+l 或者 clear 命令 | 清空这个屏幕 小清新 |
| tab | 自动补齐 |
### 查看Linux 版本
```
uname -r 内核发行号
uname -v 内核版本号
uname -a 显示所有的信息
```
### Ubuntu启动过程
```
开机
BIOS加电自检
找到MBR 引导分区 其实就是引导 boot
启动Linux内核
初始化操作系统
```
#### 什么是挂载?
```
U盘 移动硬盘 不能直接访问 但是我们可以访问 电脑中的 我的电脑 通过将u盘插到 电脑上 我们像访问电脑上的文件一样访问u盘 这就叫挂载
取消挂载 就是 弹出U盘
```
## 查看Linux 目录结构
```
Linux 一切从根目录出发 /
sudo apt-get install tree
tree -L
. 根
├── bin #存放 常用的命令 普通用户也可以执行的命令 比如 ls cp 次重点
├── boot #系统启动文件 和 一些核心文件 都在这里
├── cdrom #光驱
├── dev #device 设备 这里存放 设备文件 比如硬盘 光驱 重点
├── etc # 好比手机里边的设置 系统的配置文件都在这里 重点
├── home #普通用户的家目录 重点
├── initrd.img -> boot/initrd.img-4.15.0-29-generic 这两个 好比windows中的快捷方式
├── initrd.img.old -> boot/initrd.img-4.15.0-29-generic
├── lib # 系统的动态链接库 好比windows 中的 C:\Windows\System32 下面的 .dll文件 所有的应用程序依赖这些
├── lib64 # 64位操作系统的动态链接库
├── lost+found #这个目录系统自动生成 如果非法关机 这里边会存放 一些错误文件 记录错误
├── media #媒体 光驱里边的内容 会自动挂载到这里
├── mnt # mount 挂载 用户可以手动挂载到这个目录下 windows 系统类型是NTFS Linux ext4 一般用来挂载文件系统类 型不同的文件 重点 常用
├── opt #大数据时代 hadoop Oracle 第三方软件 一般安装在这里 装X的软件
├── proc # 系统的相关信息 进程 状态信息都在这里 好比是 windows任务管理器 这些信息在内存里
├── root # 管理员用户的家目录 重点
├── run # 进程文件一般存放到这里 次重点
├── sbin # 存放管理员用户的命令 比如 shutdown ifconfig 有些普通用户 不具备权限 次重点
├── srv #相关服务信息
├── sys # 跟系统相关的信息 不要动
├── tmp #临时目录 常用
├── usr # 类似 C:\Program Files 软件都安装在这里 非常重要
* bin 应用程序的执行目录
* sbin 超级管理员的命令
* local 管理员安装应用程序的目录
├── var # 一般存放数据文件 日志文件 也就是 能变大的文件 重点
└── vmlinuz -> boot/vmlinuz-4.15.0-29-generic 也是个快捷方式
```
### 常用命令
```
cd 切换目录
ls 列出所有的文件及目录
shutdown -h now 立即关机
shutdown -h 12:00
poweroff 关机
halt 立即关机
init 0 关机
reboot 重启
init 6 重启
ifconfig 查看网卡信息 及 IP地址
ping www.baidu.com
```
### 帮助文件 非常重要
* --help
* man 其实就是手册
```
命令 --help 就是查看 命令后边的参数
man 命令 回车 下一行
q 退出 空格 下一页
```
## ls 命令
```
-a 列出所有的目录及文件
-l 长列表的形式展示
-al
-rw-r--r-- 1 root root 0 8月 28 11:04 test.txt
drwxrwxrwt 13 root root 4096 8月 28 10:49 tmp
drwxr-xr-x 11 root root 4096 7月 31 08:38 usr
drwxr-xr-x 14 root root 4096 7月 31 08:50 var
drwx------ 3 root root 4096 7月 31 08:47 root
lrwxrwxrwx 1 root root 30 8月 27 15:18 vmlinuz -> boot/vmlinuz-4.15.0-29-generic
第一部分: d - l 表示文件类型
d 这是个文件夹 也叫目录 - 文件 l 链接 表示这是个 快捷方式
第二部分: rwxr-xr-x 文件目录链接的权限 r read 读 w write 写 x exec 执行
第三部分: 13 inode 节点号
第四部分: root 所属的用户是root
第五部分: root 所属的用户组 是root
第六部分: 4096 文件的大小
第七部分: 7月 31 08:38 文件的修改时间 mtime
第八部分: usr 文件名
```
### 权限
```
rwx rwx rwx
拥有者 所属组 其他用户
r read 读 4
w write 写 2
x exec 执行 1
- 没有权限
t 了解 保护机制
1: 表示 拥有者的权限
2: 表示所属组的权限
3. 表示其它用户的权限
rwx r-x r-x 拥有者 可读可写可执行 所属组 可读可执行 不可写 其它用户可读可执行 不可写
755
rwx------ 700
rw-r--r-- 644
666 拥有者 可读可写不可知性 所属组 可读可写不可执行 其他用户 可读可写不可执行
```
### 软连接 ln
```
ln -s 给谁创建快捷方式 快捷方式的名字
比如 ln -s /home /tmp/test
cd /tmp
lrwxrwxrwx 1 need888 need888 5 8月 28 11:39 test -> /root
访问 /tmp/test 跟访问 /root 是一样
如果 /root 这个目录丢失
那么快捷方式 也失去作用
```
### 历史命令
```
history 列出所有的历史命令 包括行号
!行号 自动执行历史命令的第几行
```
## 目录的管理 所有的目录都是从/ 出发
* 绝对路径 cd /home/need888/Desktop/
* 相对路径 cd ../../.. 到根
```
cd 切换目录
pwd 查看当前位于哪个目录
cd .. 回到上一级目录
cd . 代表当前目录
cd - 回到来源的目录 两个目录并没有关联关系 .. 可能回不去 这时候 用 - 从哪里过来 回哪里
cd ~ 回到用户的家目录
cd 也是回到用户的家目录
```
### 创建目录
```
mkdir kangbazi1 kangbazi2 kangbazi3
mkdir 目录名 目录名1 目录名2 支持批量创建
mkdir -p taowa/xiaotaowa/xiaoxiaotaowa/wawa 递归创建目录
mkdir -p 1/{2,3}/{4,5,6}/{7,8,9}
1
│ ├── 2
│ │ ├── 4
│ │ │ ├── 7
│ │ │ ├── 8
│ │ │ └── 9
│ │ ├── 5
│ │ │ ├── 7
│ │ │ ├── 8
│ │ │ └── 9
│ │ └── 6
│ │ ├── 7
│ │ ├── 8
│ │ └── 9
│ └── 3
│ ├── 4
│ │ ├── 7
│ │ ├── 8
│ │ └── 9
│ ├── 5
│ │ ├── 7
│ │ ├── 8
│ │ └── 9
│ └── 6
│ ├── 7
│ ├── 8
│ └── 9
```
### 删除目录
```
rmdir 目录名 目录1 目录2 删除指定的目录 支持批量删除 目录里边不能有内容
rmdir -p kangbazi/python/1806/ 递归删除
rm -rf 目录名
-r 递归删除
-f 强制删除
```
## 文件的管理
### 文件的创建 touch
```
touch 文件名1 文件名2 文件名3 文件名4 文件创建 支持批量创建
echo '我不会撩妹,你可不可以撩我以下' > 3.rmvb 将内容输出到文件中
echo '你男朋友掉了,快来领走,很好养活的' > 3.rmvb 会将上一个内容覆盖掉
echo '如果你觉得大海是最干净透彻的,那是你没看过我的眼睛,我的眼里只有你' >> 3.rmvb
> 覆盖
>> 追加
```
### 文件的移动 mv
* 重命名
* 位置的移动
```
sudo mv 1.txt /home/need888/ #将1.txt 移动到/home/need888/
sudo mv 6.png /root/ 不在一个目录下面 叫移动
sudo mv 2.txt 22.docs 重命名
sudo mv ../1.txt ./11.png 上一级目录下面的 文件 移动到本目录下
sudo mv 文件名 目录名 说明是移动
sudo mv 文件名 文件名1 说明是重命名
sudo mv 文件名 目录名/文件名 移动并重命名
```
### 文件的复制 cp
```
root@need888-virtual-machine:/tmp# cp /tmp/520.rmvb /tmp/1314.haha 当前目录下 复制一个文件
root@need888-virtual-machine:/tmp# cp 520.rmvb 1314.666 跟上面效果一样
cp 1314.haha /home/need888/good/ 将文件复制到不同的目录
cp 1314.haha /home/need888/good/999.piyanping 复制到不同目录的同时 将名字修改
```
### 文件的删除 rm
```
rm 文件名 直接删除
rm /tmp/4.avi 删除别的目录下面的文件
rm -i 1314.haha
-i 删除之前提示用户
rm -f 文件名 强制删除 不提示
rm -rf 文件名、目录名 强制删除 递归删除
rm -rf * 删除当前目录所有
rm -rf *.py 删除以.py 结尾的文件
删除之前 一定注意瞪大眼睛
```
### 文件的查看
```
cat 文件名 查看文件中的内容 正序显示
tac 文件名 从后往前显示 倒序显示
head -n 10 /etc/passwd 查看前10条的内容
tail -n 5 /etc/passwd 查看后五条的内容
tail -f cat 文件名 时时查看文件尾部的内容 一般这个命令用来查看日志
watch -d -n 1 cat /etc/passwd 每秒显示一次文件的内容
more 文件名 分页查看内容 空格 下一页 回车 下一行 q 退出
less 文件名 跟 more一样分页查看 空格翻页 b 向前分页 q 退出
stat 文件名 查看文件的详细信息
atime 访问时间
mtime 修改时间
ctime 修改状态的时间 修改文件的元数据
```
### 文件的查找
```
find 从哪里查找 -参数
-name 根据文件名查找
sudo find / -name 1.mp3 如果不写路径 代表 在当前目录下查找
need888@need888-virtual-machine:/tmp$ find -name 1.mp3 表示在tmp目录下面查找
-iname 根据文件名查找 不区分大小写
-mtime 根据修改时间查找 + - 天为单位
sudo find /tmp -mtime -3 /tmp目录下面 3天以内修改的
sudo find /home/ -mtime +3 3天以上
-user 根据所属的用户查找
find /tmp -user 用户名 文件和目录所属用户是 用户名的
-size 文件的大小查找 c k m g tb c表示字节
sudo find -size +10k 当前目录下面 大于10k的
-maxdepth n 查看目录的深度
find / -maxdepth 2 -name '1.mp3' 只查到 根目录下面2级 然后根据name查找
-perm
find -perm 700 -maxdepth 1 -ls 查找当前目录下 权限是700的 最大深度1级 然后列出相信信息
-ls 以列表的形式展示
```
### grep 类似于正则表达式
```
| 管道符
cat /etc/passwd | grep 'root' 前面的输出 作为 后面的输入
前面先把内容输出出来 然后 用grep 进行匹配
grep 参数
-i 不区分大小写
-c 只显示符合条件的行数
-r 递归查找子目录
-n 显示行号
-l 列出符合 符合要求的文件名称
need888@need888-virtual-machine:~$ grep -r -l 'need888' '/etc/passwd'
/etc/passwd
--include '*.py'
--exclude '*.py'
--color 表示结果以不同的颜色显示
ls -al | grep '^-' 在一个目录下 只显示文件 ^ 匹配开头
```
### 查找命令
```
which ls -al 命令 显示命令的绝对路径
whereis ls -al 命令
```
### 统计文件内容
```
wc -l 统计多少行
wc -l /etc/passwd
43 /etc/passwd 总共有43行
```
### awk 也叫流媒体编辑器 一行一行的读
```
:分割
sshd:x:121:65534::/var/run/sshd:/usr/sbin/nologin
cat /etc/passwd | awk -F ':' '{print $3}'
以:分割 打印第三部分 然后进行分析
```
### uniq 一般结合sort 排序 来使用
```
-i 忽略大小写
-c 前面显示出现的次数
-d 只显示重复的行 一样的输入一个
-D 只显示重复的行 有几个输出几个
```
### sort
```
sort 不写参数 默认按照第一个字母排序
-n 按照纯数值
-k 指定的列排序
-t 分隔符
-r 逆向排序
cat /etc/passwd | sort -t ':' -k 3 -n
指定: 分割符 对第三列 按照数值排序
```
### 查看当前用户名
~~~
whoami 回车
~~~
### 查看日历 日期
cal
cal 2018 2018全年日历
date 显示当前的日期和事时间
### 题目 查找你最常使用的10条命令
答案:
history | awk '{print $2}' | sort | uniq -c | sort -r -n -k 1 | head -n 10