目录
Linux基础
命令提示符
[root@localhost ~]# root 当前登录的用户 localhost 当前的主机名 ~ 当前登录用户的家目录 # 超级管理员的家目录是/root /俗称根目录 一切目录从根出发 # 普通用户的家目录 /home/普通用户名 # 家目录等同于windows系统上面c:\Users\用户名 # 表示管理员用户正在输入 $ 普通用户 su root # 切换到root用户 sudo # 以root身份执行命令
命令出错的情况
注意不要拼写错误
空格该有的不能少 没有的不能加
严格区分大小写
如果命令提示找不到 那么可能没有安装
yum -y install 安装软件的名字 # -y 不提示直接安装 yum -y install 软件1 软件2 软件3 # 空格隔开
常用的快捷键
-
tab > 补全命令和路径
-
ctrl+L clear > 清屏
-
ctrl+C > 强制终止
-
ctrl+A Home > 快速移动到本行命令的开头
-
ctrl+E End > 快速移动到本行命令的结尾
-
ctrl+U > 快速清空指针前命令
-
上箭头 > 上一条命令
-
下箭头 > 下一条命令
-
history > 显示所有的历史命令
-
!n > 接上面history 执行history第n条历史命令
-
ifconfig > 查看ip地址
-
ctrl+alt > 解放鼠标
常用的历史命令
whoami # 查看当前登录用户名 pwd # 显示当前位于哪个文件夹 ls # 列出所在文件夹下的子文件夹和子文件 cd /root # 切换到根目录下的root目录 [None@localhost tmp]$ # 当前位于tmp文件夹下面 init 6 | reboot # 重启 init 0 | poweroff | halt # 关机 shutdown -h now # 立马关机 cat /etc/redhat-release # 查看当前系统的版本 cat /proc/version # 查看linux版本
目录的操作
linux一切都是从根目录出发 /
yum -y install tree # tree -L n 展示n级目录 [root@localhost /]# tree -L 1 . ├── bin -> usr/bin ├── boot ├── dev ├── etc # ☆主要的配置文件 ├── home # ☆普通用户的家目录 ├── lib -> usr/lib # 等同于windows下面的system32 ├── lib64 -> usr/lib64 # 64位操作系统 动态链接库 ├── media ├── mnt # ☆用户手动挂载的目录 ├── opt ├── proc ├── root #☆超级管理员用户的家目录 ├── run ├── sbin -> usr/sbin ├── srv ├── sys ├── tmp # 用来存放临时文件 ├── usr # 用户安装软件存放的目录 等同于windows系统的program files └── var # 日志 数据库文件都放到这里 除了tmp文件夹下面的 其他的文件夹删除一定要慎重! .开头的文件是隐藏文件
帮助
任意命令 --help # 比如 ls --help man 任意命令 # q退出 空格翻页 回车换行 上箭头往上翻 info 任意命令 # 帮助信息比man更丰富
ls
ls -a # 列出所有的文件 包含.开头的隐藏文件和文件夹 ls -l # 以列表的方式展示 ls -al # 以列表的方式展示所有的文件 等同于windows中以详细信息的方式展示目录下的所有文件 ll -a # 等同于 ls -al lrwxrwxrwx. 1 root root 4 5月 19 23:17 haha -> /tmp -rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc -rw-------. 1 root root 67 5月 19 22:43 .xauthMpWjiB 第一部分 l # d 目录 | - 普通文件 | l 链接 等同于windows系统的快捷方式 | b c 设备 硬盘 光驱等 第二部分 rwx rwx rwx 权限 # r:read 读 | w:write 写 | x:execute 执行 | - 没权限 所有者 所属组 其他人 第三部分 1 # 文件链接数量 第四部分 root # 所有者 第五部分 root # 所属组 第六部分 4 # 文件大小 第七部分 5月 19 23:17 # 文件的修改时间 上一次的修改时间 第八部分 haha -> /tmp # 文件的名字
绝对路径
从根出发 /root 这种就是绝对路径
以当前的目录为参照物 相对于当前目录而言
相对路径
-
.当前路径
-
..上一级目录
-
cd ~ 用户的家目录 | cd - 从哪切换过来的就回到哪去
-
cd 表示回到家目录
pwd
用来查看当前位于哪个目录下
创建目录
目录就是文件夹 文件夹就是目录
mkdir 目录名字 # 支持批量创建 mkdir 目录1 目录2 目录3 # 空格隔开 mkdir -p a1/a2/a3/a4/a5 # 递归创建5个文件夹 mkdir -p a/{b,c}/{d,e,f} ├── a │ ├── b │ │ ├── d │ │ ├── e │ │ └── f │ └── c │ ├── d │ ├── e │ └── f
删除目录
rmdir 目录名 # 目录必须空 rmdir -p a1/a2/a3/a4/a5 # 目录必须空 递归删除 # 如果目录非空 可以采用 rm -rf 目录名 | -f 强制 | -r 递归 rm -rf /* # 强制删除根目录下的所有 慎用!
管道符
前面的输出作为后面的输入
文件的操作
touch 文件名 # linux不区分后缀名 windows系统区分 touch 文件1 文件2 文件3 # 支持批量创建文件 空格隔开 echo '内容' > 文件名 # 也可以创建一个新文件 并写入内容 下一个内容会替换上一个 echo '内容' >> 文件名 # 将内容追加到该文件中 cat 文件 # 查看文件的内容 内容是从上往下输出 # > 替换 | >> 追加 cat 文件1 文件2 > 文件3 tac 文件 # 从下往上输出 head -n 文件 # 从上到下显示文件的前n行 tail -n 文件 # 从上到下显示文件的后n行 tail -f 文件 # 动态监视文件的后几行内容 只能接受通过 '内容' >> 文件 这种追加过来 watch # 实时显示整个文件的内容 watch -d -n 秒数 cat 文件名 # -d 变化的部分高亮显示 | -n 指定多少秒刷新一次 more 文件名 # 按页展示 空格键翻页 | 回车换行 | 不支持前翻 | Q 退出 less 文件名 # 按页展示 find [路径] [参数] 文件名 find -name 按照文件名查找 # find / -name 11* find -iname 按照文件名查找 # 跟上面区别在于iname不区分名字大小写 find -mtime +/- n # + 超过 | - 以内 | n 表示天 find -user # 根据所属用户查找 find / -user None --> 查找根目录下所属用户是None的 find -size +/- c k M G # c:字节 k:kb M:mb G:gb find -maxdepth # 根据目录的深度查找
查找命令
which 命令 # which python whereis 命令 # whereis python
grep
linux的正则表达式
[root@localhost ~]# cat /etc/passwd | grep root root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin grep '马' 10.csv -i 忽略大小写 | -c 只显示匹配行的数量 | -r 递归查找子目录 | -n 显示行号 -w 只匹配单词 不匹配单词的一部分 | -E 正则表达式搜索 --color 单独的颜色 | --include '*.py' 仅仅搜索 .py 文件 | --exclude '*.py' 排除 .py 文件
wc
[root@localhost ~]# cat /etc/passwd | grep -E '^r' | wc -l # 查看行数 5
awk
一行行的读取文件 默认以空格为分隔符 对切开的部分进行处理
awk -F ':' '{print $3, $4}' /etc/passwd awk -F ':' '{sum += $3};END {print sum}' /etc/passwd # 根据:进行切割 然后拿到第三列 求第三列的和
uniq
独一无二
一般是配合sort来用
-c 每行前面显示出现的次数 编号 -d 只输出重复的行 -D 输出重复的所有行 -i 忽略大小写
sort
也是以行为单位
-
-k 按照指定的列排序
-
-n 按照数值排序
-
-t 指定分隔符
-
-r 逆向排序
cat /etc/passwd | sort -r # 默认按照字母进行排序 cat /etc/passwd | sort -k 3 -t ':' -n # t指定':'分割 第三列进行排序 -n 指定按照数值排序
列出你常使用的10条历史命令
history | awk '{print $2}' | sort | uniq -c | sort -nr | head -10
用户管理
useradd 用户名 # 添加用户之后 会在/etc/passwd添加一条记录 并且/home下也会创建一个以用户名为命名的文件夹 root:x:0:0:root:/root:/bin/bash sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 第一部分 用户名 第二部分 密码 # 存在于/etc/shadow 第三部分 用户ID 第四部分 所属组ID 第五部分 备注信息 第六部分 用户的家目录 第七部分 /bin/bash /sbin/nologin 只要你是bin/bash 可以通过 su 用户名的方式登录 表示不能通过 su 用户名的方式登录 userdel 用户名 # 默认只删除数据库中的记录 不删除家目录 userdel -r 用户名 # 删除用户家目录 passwd 用户名 # 修改密码 会有提示密码过于简单 不用管继续输入 passwd root # 管理员才可以修改管理员 sudo组 比普通用户权限大 比超级管理员权限小 usermod -a -G sudo 用户名 # 将用户添加到sudo组 # -a 是add添加的意思 | -G 附属组
权限的操作
rwxr--r-- r read 读 | w write 写 | x execute 执行 | - 没有权限 rwx 所有者 | r-- 所属组 | r-- 其他用户 rwx 111 | r 100 4 | w 010 2 | x 001 1 | - 000 0 chmod 权限 文件或目录 u 拥有者 | g 所属组 | o 其他用户 | a 所有人 = u + g + o + 在原来基础上增加 | - 在原来基础上减少 也可以对权限重新赋值 chmod o+x,g+w,u+x 文件或者目录 # 拥有者增加执行的权限 所属组增加写入的权限 其他用户增加执行的权限 chmod a-x 文件或目录 # 所有人减去执行的权限 chmod a=rwx a.txt # 755 rwx r-x r-x 新建一个文件夹 默认的权限 chmod 777 a.txt chmod -R 权限 目录 # 目录及子目录 子文件都跟着改
更改文件或目录的拥有者
chown 用户名 文件名或目录名 # 更改文件或目录的拥有者 chown -R 用户名 文件名或目录名 # 递归修改 chown 用户名:组名 文件名或目录名 # 修改所属用户和所属组 chattr 当一个文件 如果只能往里写 可以读 但是不能修改权限 不能删除的时候 这个文件需要申请保护 + - i 给文件增加或去除只读属性 | a 只能追加数据 不能修改和删除 只能对文件进行保护 chattr +i 文件 # 这个文件只能读 不能写 不能删除 不能修改权限 想删除 修改权限 只能chattr -i chattr +a 文件 # 只能 echo >> 追加的方式写入内容 不能编辑 不能删除 不能修改权限 chattr -a 文件 # 取消对文件的保护
vi/vim编辑器
vim是vi的升级版
-
命令模式
-
编辑模式
-
底部命令模式
vim test.txt 命令模式 ---iao---> 编辑模式 ---esc---> 命令模式 命令模式 ---/?:---> 底部命令模式 !v # 打开最近使用vim打开的文件 vim test.txt +n # 将光标定位到第n行 vim test.txt + # 将光标定位到最后一行
编辑模式
按键 | 作用 |
---|---|
i | 光标位置前面插入元素 |
a | 光标后面位置插入元素 |
o | 下一行插入元素 |
O | 上一行插入元素 |
s | 删除光标当前位置的字符 进入输入模式 |
S | 删除光标所在行 进入输入模式 |
esc | 回到命令模式 |
I | 在行首输入元素 |
A | 在行尾输入元素 |
命令模式
按键 | 作用 |
---|---|
ZZ(shift + zz) | 保存退出 |
h | 左 |
j | 下 |
k | 上 |
l | 有 |
yy | 复制一行 |
nyy | 复制n行 |
p | 粘贴一次 |
np | 粘贴n次 |
dd | 删除一行 |
ndd | 删除n行 |
gg | 回到第一行 所有行的开头 |
ngg | 定位到第n行 |
G | 回到最后一行 所有行的结尾 |
u | 撤销上一次的操作 |
ctrl + r | 反撤销 |
. | 重复上一次的操作 |
shift+6 / home / ^ / 0 | 快速回到本行的行首 |
shift+4 / end / $ | 快速回到本行的结尾 |
shift+9 | 一个段落的开头 |
shift+0 | 一个段落的结尾 |
nx | 向右删除n个字符 |
nX | 向左删除n个字符 |
底部命令模式
英文输入法 : / ? 由命令模式进入底部命令模式
按键 | 作用 |
---|---|
:w | 保存 |
:q | 退出 |
:wq | 保存并退出 |
:w! / :q! / :wq! | ! 强制 |
:x! 等同于 :wq! | 强制保存并退出 |
:set nu | 显示行号 |
:set nonu | 取消显示行号 |
:n | 快速将光标定位到第n行 |
/ 查找的内容 | n 从上往下找 / N 从下往上找 |
? 查找的内容 | n 从下往上找 / N 从上往下找 |
:s/要查找的字符串/要替换的字符串 | 光标所在的行 而且只替换第一个关键词 |
:s/要查找的字符串/要替换的字符串/g | 光标所在的行的关键词全部替换 |
:%s/要查找的字符串/要替换的字符串 | 替换全文每一行的第一个关键词 |
:%s/要查找的字符串/要替换的字符串/g | 全文每一行的所有的关键词全部替换 |
:n1,n2s/要查找的字符串/要替换的字符串/g | n1到n2行的指定字符串关键词全部替换 |
特殊符号 / 前面加上 \ 进行转义
下载
-
curl 百度一下,你就知道 > 模拟浏览器向百度发送请求
-
curl -O https://registry.npmmirror.com/-/binary/python/3.7.9/Python-3.7.9.tar.xz
-
wget -c https://registry.npmmirror.com/-/binary/python/3.7.9/Python-3.7.9.tgz
压缩和解压缩
windows压缩格式
-
rar
-
zip
-
7zip
-
iso
linux
-
zip
-
gz tgz
-
bz2
-
xz
gz
gzip
gzip 文件1 文件2 ... 文件n # 支持批量压缩文件 原文件被替换 .gz 后缀 gzip 不能压缩目录 gzip -d # 支持批量解压缩 .gz的源文件不在了
bz2
bzip2
bzip2 文件1 文件2 ... 文件n # 支持批量压缩文件 原文件被替换 .bz2 后缀 bzip2 不能压缩目录 bzip2 -d # 支持批量解压缩 .bz2的源文件不在了
xz
xz
xz -z 文件1 文件2 ... 文件n # 支持批量压缩文件 原文件被替换 .xz 后缀 xz 不能压缩目录 xz -d # 支持批量解压缩 .xz的源文件不在了
tar
打包命令 上面只能压缩文件 不能压缩目录
有了 tar 之后 先打包再压缩
-c 打包 -v 显示打包的过程 -f 指定文件 -x 解包 tar -cvf 压缩文件名 1.txt 2.txt 3.txt tar -xvf 压缩文件名 haha.tar # 上面仅仅是打包 没有压缩 -z:gz对 tar 进行压缩解压缩 -j:bz2对 tar 进行压缩解压缩 -J:xz对 tar 进行压缩解压缩 tar -zcvf 名字.tar.gz 文件 目录 文件 目录 # 使用gz 的方式 打包并压缩文件或者目录 tar -zxvf 名字.tar.gz # 使用gz 的方进行解包并解压缩 tar -jcvf 名字.tar.bz2 文件 目录 文件 目录 # 使用bz2 的方式 打包并压缩文件或者目录 tar -jxvf 名字.tar.bz2 # 使用 bz2 的方进行解包并解压缩 tar -Jcvf 名字.tar.gz 文件 目录 文件 目录 # 使用xz 的方式 打包并压缩文件或者目录 tar -Jxvf 名字.tar.gz # 使用xz 的方进行解包并解压缩
zip unzip
yum -y install zip unzip
软链接 ln
就是一个windows的快捷方式
ln -s 源文件 目标文件 ln -s /usr/bin/python /root/快捷方式的名字 python 等同于 ./root/快捷方式的名字 # ./等同于函数的() 也就是执行的意思
安装软件
-
rpm
-
像windows安装软件一样 需要下载rpm包(windows系统是exe包)
-
优点:简单
-
缺点:要求严格按照安装顺序 因为软件和软件之间有依赖关系
-
abcd:b依赖于a c依赖于b d依赖于c
-
先下载rpm包 然后切换到包所在的目录 rpm -ivh ***.rpm
-
Rpmfind mirror > 查找rpm包的网址
-
-
yum
-
自动识别依赖关系 并且自动下载依赖包并自动安装
-
安装的还是rpm包
yum -y install 包名 # 不用提示直接下载 yum list # 列出已经安装的包列表 yum -y remove 包名 # 删除指定的包 yum -y update 包名 # 更新指定的包
-
-
编译安装
linux 软件都是c和c++写的 属于底层语言编写 需要编译
缺点:麻烦
优点:性能最好
-
安装必备依赖库
-
下载软件 gz bz2 xz tgz
-
解包并解压缩
-
配置 软件装在哪里 启动哪些选项 依赖于哪些选项等
./configure
--prefix 指定安装在哪里 /usr
no- 禁用选项
--with 依赖于哪些模块
--enable 启用哪些选项
-
编译
make
-
安装
make install
make && make install
-
数据备份
-
cp 拷贝
-
cp 文件 文件1 # 复制文件一份 名字为文件1
-
cp -r 目录 新目录 # 复制目录为新目录
-
-
mv 移动 重命名
mv 文件1 新名字 # 同一个目录下面 相当于重命名 mv 文件1 其他目录 # 剪切 不同目录移动 也可以指定移动后的文件的新名字
yum源切换
1. cat /etc/redhat-release # 查看你系统的版本 # 将默认的文件进行备份 2. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup # 下载阿里云镜像文件 3. wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 4. yum clean all # 清空缓存区 5. yum makecache # 生成缓存
安装python
-
安装依赖
yum -y install gcc gcc-c++ openssl-static
-
下载python\openssl安装包
wget -c https://www.openssl.org/source/old/1.1.1/openssl-1.1.1e.tar.gz --no-check-certificate wget -c https://www.openssl.org/source/old/1.1.1/openssl-1.1.1e.tar.gz tar -zxvf openssl-1.1.1e.tar.gz # 解包并解压缩
-
安装openssl
cd openssl-1.1.1e # 切换到解压后的openssl文件夹 ./config --prefix=/usr/local/openssl no-zlib # 配置安装路径及禁用模块 make && make install # 编译及安装
-
修改openssl软链接
rm -rf /usr/include/openssl/ # 删除原来的命令 用安装好的进行替换(软链接) ln -s /usr/local/openssl/include/openssl/ /usr/include/openssl rm -rf /usr/lib64/libssl.so.1.1 ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1 rm -rf /usr/lib64/libcrypto.so.1.1 ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 rm -rf /usr/bin/openssl ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl echo '/usr/local/openssl/lib' >> /etc/ld.so.conf cd ~ [root@localhost ~]# openssl version
-
安装python
cd Python-3.7.9/ ./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl make && make install
-
查找python所在的位置
which python cd /usr/bin ls -al | grep python # 发现 python-> python2 python2-> python2.7 rm -rf /usr/bin/python ln -s /usr/local/python3/bin/python3 /usr/bin/python cd ~ # 切换到家目录 测试: [root@localhost ~]# python Python 3.8.0 (default, May 23 2022, 16:40:42) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import ssl >>> 以上证明没有问题 上面没有问题 但是 yum 出问题了 vim /usr/bin/yum 第一行 将 #!/usr/bin/python 改成#!/usr/bin/python2.7 保存并退出 vim /usr/libexec/urlgrabber-ext-down #! /usr/bin/python 改成 #! /usr/bin/python2.7 保存并退出 vim /usr/bin/yum-config-manager #!/usr/bin/python -tt 改为 #!/usr/bin/python2.7 -tt 将pip 进行配置 跟 python配套 /usr/bin 下面的命令 可以直接输入 rm -rf /usr/bin/pip ln -s /usr/local/python3/bin/pip3 /usr/bin/pip # 设置国内pip 源 mkdir -p ~/.pip vim ~/.pip/pip.conf [global] timeout = 60 index-url = http://pypi.douban.com/simple trusted-host = pypi.douban.com 保存并退出 :wq pip install requests pip install --upgrade pip # 更新一下pip warning 黄色 可以忽略 error 红色
创建虚拟环境
windows
python -m pip install --upgrade pip pip install virtualenvwrapper-win mkvirtualenv 环境的名字 # 创建一个新的虚拟环境 deactivate # 退出当前的虚拟换景 lsvirtualenv # 列出使用mkvirtualenv创建的所有虚拟环境 workon 虚拟环境名字 # 进入执行的虚拟环境 查看虚拟环境所在的位置 1.先进入指定的虚拟环境 C:\Users\neyo>workon python3_crawl 2.cdvirtualenv (python3_crawl) C:\Users\neyo>cdvirtualenv (python3_crawl) C:\myvirtualenv\python3_crawl> # C:\myvirtualenv\python3_crawl 这就是 python3_crawl 所在的位置