参考网址: https://www.cnblogs.com/pyyu/p/9276851.html
一. 安装
Linux是一个操作系统.
如果使用的是windows电脑, 可以采用以下系统方案:
1. 虚拟机(非常好用)
2. 双系统(windows + linux)
3. 干掉windows, 单独安装linux
centos下载地址: https://mirrors.aliyun.com/centos/
centos配置:
root password:123456
user: maria
installation source: http://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os
software selection: server with GUI / development tools
time&date: asia/shanghai
network&hostname: on
二. 目录结构
windows的目录结构, 是反斜杠的目录分隔符: C:\ D:\ E:\ 这种多盘符的形式, 可能存在多个目录定点 Linux的目录: 只有一个根目录, 分隔符是/
/bin: bin是Binary的缩写, 这个目录存放着最经常使用的命令。 /boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。 /dev : dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。比如插入的U盘或硬盘所显示的文件. /etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。 /home: 用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。 /lib: 这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 /lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。 /media: linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。 /mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。 /opt: 这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。 /proc: 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all /root: 该目录为系统管理员,也称作超级权限者的用户主目录。 /sbin: s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。 /selinux: 这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。 /srv: 该目录存放一些服务启动之后需要提取的数据。 /sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。 sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。 该文件系统是内核设备树的一个直观反映。 当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。 /tmp: 这个目录是用来存放一些临时文件的。 /usr: 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。 /usr/bin: 系统用户使用的应用程序。 /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。 /usr/src:内核源代码默认的放置目录。 /var: 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
在linux系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。 /etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。 /bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。 值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给root使用的指令。 /var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。
三. 远程连接
1. 确保服务器正确获取到了ip地址 ifconfig 查看到讲师机器的ip地址为 192.168.178.134 2. 安装远程连接工具 windows安装xshell或者secureCRT , 这两个软件其实就是封装了ssh命令而异 macos直接使用ssh命令即可 ssh root@192.168.178.134
ip与port
四. 命令
linux命令格式
命令 条件/参数 对象/文件/目录
1. 一般情况下, 参数是可选的, 一些情况下, 文件或路径也是可选的
2. linux命令参数之间应该使用一个或多个空格分隔.
pwd: 查询当前所在目录 [maria@localhost ~]$ pwd /home/maria ls: 查询当前目录下的内容, ls是list的缩写
ls -a 文件夹名称: 查看文件夹下的所有内容, 包括隐藏的内容, 其中a代表all, 在linux中, 以.开头的文件是隐藏文件, 默认直接看不到 [maria@localhost ~]$ ls Desktop Documents Downloads Music Pictures Public Templates Videos
修改linux支持中文的命令: export LC_ALL=zh_CN.UTF-8
ifconfig命令用户查看网络配置信息: [maria@localhost s3]$ ifconfig
如果这条命令不能用, 则应先切换到root超级用户, 然后输入以下内容安装软件包 net-tools
yum install net-tools -y
普通用户切换到root用户:
maria@localhost s3]$ su - root
Password:
[root@localhost ~]#
切换图形化和纯黑屏的命令:
ctrl + alt + f1-f7 代表linux默认的7个终端
f1是图形化, 其他是纯黑屏, 这些基本用不上, 通常都是远程连接的方式操作.
ctrl+c:忽略操作.
几个特殊的目录:
. 当前目录 .. 上一层目录 - 前一个工作目录 ~ 当前【用户】所在的家目录
[maria@localhost ~]$ ls .
Desktop Documents Downloads Music Pictures Public Templates Videos
[maria@localhost ~]$ ls ..
maria
常用的目录处理指令:
cd : (change directory,更改目录) pwd:(显示当前目录) mkdir:(建立一个新目录) rmdir:(删除一个空目录)
cd是change directory的缩写,这是用来变换工作目录的命令,注意命令和目录之间有一个空格。
rm的用法:
rm是remove的缩写, 用于删除文件或文件夹.
rm 文件夹/文件
1. 增 1) 创建普通文件 touch 文件名
[maria@localhost ~]$ pwd
/home/maria
[maria@localhost ~]$ touch music.txt
[maria@localhost ~]$ ls
Desktop Downloads music.txt Public Videos
Documents Music Pictures Templates
2) 创建隐藏文件 touch .文件名
maria@localhost ~]$ touch .vedio.txt
[maria@localhost ~]$ ls -a
. .bash_profile Desktop .ICEauthority music.txt Templates
.. .bashrc Documents .local Pictures .vedio.txt
.bash_history .cache Downloads .mozilla .pki Videos
.bash_logout .config .esd_auth Music Public
3) 创建文件夹
mkdir 文件夹名称
分为绝对路径和相对路径两种方式
maria@localhost ~]$ mkdir s25
[maria@localhost ~]$ ls
Desktop Documents Downloads Music Pictures Public s25 Templates Videos
[maria@localhost ~]$ cd s25
[maria@localhost s25]$ pwd
/home/maria/s25
相对路径的方式创建文件夹:
maria@localhost s25]$ mkdir ../s1
[maria@localhost s25]$ cd ..
[maria@localhost ~]$ ls
Desktop Downloads Pictures s1 Templates
Documents Music Public s25 Videos
绝对路径的方式创建文件夹:
[maria@localhost ~]$ mkdir /home/maria/s2
[maria@localhost ~]$ ls
Desktop Downloads Pictures s1 s25 Videos
Documents Music Public s2 Templates
4) 创建递归的文件夹
mkdir -p 文件夹名/文件夹名
[maria@localhost ~]$ mkdir -p ./s3/s33
[maria@localhost ~]$ ls
Desktop Downloads Pictures s1 s25 Templates
Documents Music Public s2 s3 Videos
[maria@localhost ~]$ cd s3
[maria@localhost s3]$ ls
s33
mkdir -p /s25/男同学 /s25/女同学
在根目录下创建文件夹s25, 并在s25下创建了文件夹男同学和女同学.
-p 表示创建文件夹及其父文件夹.
也可以采用以下写法:
mkdir -p /s25/{男同学,女同学}
2. 删
rm 命令, 是remove的缩写, 删除文件或文件夹
语法:
rm 文件/文件夹
比如:
rm text.txt #删除文件, 默认有让用户确认删除的提示
rm -f test.txt # 强制删除文件, 不需要提示确认
rm -r 文件夹名 #递归删除文件夹及其内部的文件
# 提问: 如何强制删除文件夹及其内部的资料?
# 这是一个危险的命令, 理解后请谨慎使用.
rm -rf /* # 叫做删库到跑路, 准备被打死吧,万万不得敲
rm -rf ./* 等同于 rm -rf * # 强制删除当前目录下的所有内容
maria@localhost ~]$ rm music.txt
[maria@localhost ~]$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos
3. 改 cd /home # 切换到/home目录下
ls . # 查看性对的home目录下有什么内容
[maria@localhost ~]$ cd /home
[maria@localhost home]$ pwd
/home
[maria@localhost home]$ ls .
maria
4.查
1)查看所有文件
ls -a / ls -a .
2)
mkdir,建立新目录
mkdir是make directory的缩写,用来建立新目录,在默认情况下,目录得一级一级的建立。
例如我要建立/home/oldboy/python目录,我就必须有/home,然后/home/oldboy,最后/home/oldboy/python,如果没有/home/oldboy,则不能建立python目录!
可见高效的创建目录用上-p参数,可以直接执行命令【mkdir -p /home/oldboy/python】,系统会自动添加上/home,/home/oldboy,/home/oldboy/python依次建立目录,是不是很方便,^ ^
tree
tree的作用: 以树状图显示文件目录的层级结构 tree的安装: yum install tree -y -y表示默认同意安装 yum如同pip一样, 用于自动安装软件.
[root@localhost ~]# mkdir -p a/b c/d
[root@localhost ~]# tree
.
├── a
│ └── b
├── anaconda-ks.cfg
├── c
│ └── d
└── initial-setup-ks.cfg
4 directories, 2 files
[root@localhost ~]#
查看linux命令的帮助信息
1. 用man手册, linux提供的帮助文档 man ls man cp man mkdir [root@localhost ~]# man mkdir 2. 命令加上 --help参数, 查看简短帮助信息 mkdir --help rm --help
[root@localhost ~]# mkdir --help
Usage: mkdir [OPTION]... DIRECTORY...
3. 在线搜索一些命令查询网站 http://linux.51yip.com/
echo命令
echo命令如同python的print, 能够输出字符串到屏幕, 给用户看 1. 打印字符串 [root@localhost ~]# echo "good day" good day 2. 输出变量值 [root@localhost ~]# name="xxx" [root@localhost ~]# echo name name 注意: 定义变量时, 等号左右不能有空格
path变量
PATH就是定义一些常用的软件可执行命令的目录, 放入系统中, 可以快捷的查询, 而不需要每次都输入绝地路径 1. 为什么系统能够直接找到python解释器? [root@localhost ~]# which python /usr/bin/which: no python in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) 2. 学习linux的PATH [root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 注意: PATH的路径是从左到右依次寻找的. 环境变量只定位到软件目录下的bin.
3. 如何修改变量的值?
在命令行中对变量重新赋值, 是临时生效的.需要修改系统全局变量配置文件中.
vim /etc/profile
输入i进入编辑模式
编辑
按esc退出编辑模式
输入:wq!保存并退出 或 输入:q!不保存直接退出.
退出后重新登录,然后生效.
编辑这个文件, 写入想永久生效的变量和值, 系统每次开机都会读取这个文件, 让其生效.
PATH寻找的原理图
linux单引号和双引号的区别
单引号中的内容, 仅仅就是个字符串, 不识别任何其他的特殊符号 双引号中的内容, 能够识别特殊符号以及变量
[root@localhost ~]# echo $name
xxx
[root@localhost ~]# echo "$name"
xxx
[root@localhost ~]# echo '$name'
$name
绝对路径和相对路径 绝对路径:由根目录(/)为开始写起的文件名或者目录名称,如/home/oldboy/test.py; 相对路径:相对于目前路径的文件名写法。例如./home/oldboy/exam.py或../../home/oldboy/exam.py,简单来说只要开头不是/,就是属于相对路径 因此你必须了解,相对路径是:以你当前所在路径的相对路径来表示的。
vim编辑器的用法
https://www.cnblogs.com/pyyu/p/9460649.html
最基本的编辑器
windows中:
记事本
sublime
notepad++
...
linux中:
vi等同于记事本, 很难用, 没有语法颜色提示等 vim等同于notepad++, 有颜色高亮, 支持安装第三方插件, 语法补全等高级编辑器
vim使用流程 1. vim需要单独安装 yum install vim -y 2. vim打开一个不存在的文件时, 默认会创建此文件
用vim写一个python脚本
第一步: vim first.py 此时会进入命令模式, 按下字母i, 进入编辑模式
第二步: 想要退出编辑模式, 按下键盘的esc, 回到命令模式
第三步: 输入英文:, 进入底线命令模式
第四部: 输入:wq!, write写入内容, quit退出vim, !强制性操作
:wq! 强制保存写入内容, 直接退出
:q! 强制不保存内容, 直接退出
3. 此时可以查看一下文件内容
[root@localhost ~]# cat first.py
print("today is a good day")
4. 如何执行这个脚本?
[root@localhost ~]# python first.py
bash: python: command not found...
由于尚未在linux中安装python, 所以无法执行.
什么是 vim?
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
vi/vim 的使用
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令
移动光标
w(e) 移动光标到下一个单词
b 移动到光标上一个单词
数字0 移动到本行开头
$ 移动光标到本行结尾
x 删除光标所在的字符
H 移动光标到屏幕首行
M 移动到光标到屏幕的中间一行
L 移动光标到屏幕的尾行
g 移动光标到文档的首行
G 移动光标到文档尾行
ctrl + f 下一页
ctrl + b 上一页
`. 移动光标到上一次的修改行
查找
/chaoge 在整篇文档中搜索chaoge字符串,向下查找 ?chaoge 在整篇文档中搜索chaoge字符串,向上查找 * 查找整个文档,匹配光标所在的所有单词,按下n查找下一处,N上一处 # 查找整个文档,匹配光标所在的所有单词,按下n查找下一处,N上一处 gd 找到光标所在单词匹配的单词,并停留在非注释的第一个匹配上
% 找到括号的另一半!! 光标停留在括号的一半上, 按下shift+%能快速找到另一半.
复制,删除,粘贴
yy 拷贝光标所在行 dd 删除光标所在行 D 删除当前光标到行尾的内容 dG 删除当前行到文档尾部的内容 p 粘贴yy所复制的内容
x 删除光标所在的字符
u 撤销上一步的操作
数字与命令
3yy 拷贝光标向下的3行
5dd 删除光标向下的5行
输入模式
在命令模式下按下字母i
即可进入输入模式,可以编写代码啦。。。
底线命令模式
在命令模式下输入冒号(英文的:),就进入了底线命令模式,在底线命令模式下可以输入单个或多个字符的命令,常用命令有:
:q! 强制退出 :wq! 强制写入退出
:set nu 显示行号
:数字 调到数字那行
随时按下esc可以退出底线命令模式
vim工作模式
vim按键
移动光标
移动光标的方法 h 或 向左箭头键(←) 光标向左移动一个字符 j 或 向下箭头键(↓) 光标向下移动一个字符 k 或 向上箭头键(↑) 光标向上移动一个字符 l 或 向右箭头键(→) 光标向右移动一个字符
向下移动5行 5j
向右移动10字符 10l
n(space) 按下数字n,例如10,然后按下空格,光标会向右移动10个字符
底线命令
:! command 暂时离开vim指令模式,执行command的结果 例如 :!ip a 临时看一下ip信息,然后可以回到vim
:set nu 显示vim行号
:set nonu 取消行号
更多nb的vim用法请看菜鸟教程:http://www.runoob.com/linux/linux-vim.html
修改linux的全局配置文件
1. 名字叫做/etc/profile, 里面是shell脚本语言 2. 编辑这个文件, 写入想永久生效的变量和值, 系统每次开机都会读取这个文件, 让其生效
vim /etc/profile
export LC_ALL=zh_CN.UTF-8
export LC_ALL=en_US.UTF-8
cat 命令
cat用于读取文件内容 语法: cat 文件名 [root@localhost ~]# cat first.py
print("today is a good day") 读取文件内容, 且显示行号 cat -n 文件名
[root@localhost maria]# cat -n fist.py
1 print('today is a good day!')
如果开机没有ip怎么办?
获取IP的步骤如下: 1. vim编辑网卡配置文件, 修改如下参数:
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-ens33
[root@localhost network-scripts]# vim ./ifcfg-ens33
修改一下参数: ONBOOT=yes
2. 确保vmware正确选择了 桥接 或 NAT, 且已经连上了
3. 命令重启网络设置
systemctl stop NetworkManager # 关闭无线网络服务
systemctl restart network # 重启有线网服务
#这两个命令执行都没有任何提示, 表示正确重启了网络配置
4. 查看ip地址是否存在了
ip addr show
linux的重定向符号
> 重定向输出覆盖符, 如同python中的w模式 [root@localhost maria]# echo "apple" > apple.txt [root@localhost maria]# ls apple.txt Documents fist.py Pictures Templates Desktop Downloads Music Public Videos [root@localhost maria]# cat apple.txt apple echo "apple" > apple.txt 不会打印apple, 而是将其写入到apple.txt中. 由于是覆盖符, 重复写入, 只显示一行. >> 重定向输出追加符, 如同a模式
[root@localhost maria]# echo "big apple" >> apple.txt
[root@localhost maria]# cat -n apple.txt
1 apple
2 big apple
< 重定向写入覆盖符, 用的很少, 用在数据导入等操作中, mysql数据导入 << 用在cat命令中, 很少见
[root@localhost maria]# cat >>orange.txt<<EOF
> orange
> big orang
> small orang
> EOF
[root@localhost maria]# cat orange.txt
orange
big orang
small orang
cp 命令
拷贝命令 对于配置文件的修改, 或者是代码文件的修改, 防止突然写错了, 复制一份 1. 复制文件
cp apple.txt apple_new.txt
[root@localhost maria]# cp apple.txt apple_new.txt
[root@localhost maria]# ls
apple_new.txt Desktop Downloads Music Pictures Templates
apple.txt Documents fist.py orange.txt Public Videos
[root@localhost maria]# cat -n apple_new.txt
1 apple
2 big apple
2. 复制文件夹 复制文件夹需要添加-r递归复制参数
cp -r aa aa_new
[root@localhost maria]# mkdir aa
[root@localhost maria]# ls
aa apple.txt Documents fist.py orange.txt Public Videos
apple_new.txt Desktop Downloads Music Pictures Templates
[root@localhost maria]# cp -r aa aa_new
[root@localhost maria]# ls
aa apple.txt Downloads orange.txt Templates
aa_new Desktop fist.py Pictures Videos
apple_new.txt Documents Music Public
mv命令
mv命令可以移动文件, 文件夹的路径 mv命令也可以进行重命名 1. 重命名 mv 旧文件名 新文件名
[root@localhost maria]# mv aa a1
[root@localhost maria]# ls
a1 apple.txt Downloads orange.txt Templates
aa_new Desktop fist.py Pictures Videos
apple_new.txt Documents Music Public
[root@localhost maria]# mv apple_new.txt apple1.txt
[root@localhost maria]# ls
a1 apple1.txt Desktop Downloads Music Pictures Templates
aa_new apple.txt Documents fist.py orange.txt Public Videos
2. 移动位置
mv 想要移动的文件/文件夹 移动之后的目录名(如果文件夹存在,则移动, 不存在则改名)
[root@localhost maria]# mv apple1.txt a1 a1存在,移动
[root@localhost maria]# cd a1
[root@localhost a1]# ls
apple1.txt
[root@localhost a1]# cd ..
[root@localhost maria]# mv orange.txt b b不存在, 改名
[root@localhost maria]# ls
a1 apple.txt Desktop Downloads Music Public Videos
aa_new b Documents fist.py Pictures Templates
alias命令
为什么rm命令默认有一个让用户确认删除的动作呢? 因为rm的-i参数的作用 alias 直接输入可以查看当前系统的别名
[root@localhost maria]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'
find命令
可以用于搜索机器上的所有资料, 按照文件名搜索, linux一切皆文件 语法: find 从哪里找 -type 文件类型 -size 文件大小 -name 内容名字 -type f 找普通文本文件 -type d 找文件夹类型 -name 指定文件的名字内容
示例:
1. 在系统上全局搜索.txt文件
[root@localhost maria]# find / -name "*.txt"
2. 指定在etc目录下局部搜索一个网卡配置文件, 网卡名字是以ifcfg开头的文本类型文件
[root@localhost maria]# find /etc -type f -name "ifcfg*"
/etc/sysconfig/network-scripts/ifcfg-ens33
3. 全局搜索和python相关的文件和文件夹
[root@localhost maria]# find / -name "python"
查看文件/文件夹大小
ls -lh -h参数, 显示文件单位, 以kb/mb/gb为单位, -l是列表形式, 列出文件夹中详细信息
linux的管道符命令
grep命令
grep是linux强大的三剑客之一, 从文本中过滤有用信息的命令 语法: grep 想过滤的字符串 需要过滤的文件 用法一
cat 文件 | 想要的内容 用法二
示例1
[root@localhost maria]# vim test.txt
[root@localhost maria]# cat test.txt
genzhewozuoshouyoushouyigemandongzuo
# cichuwuyong
[root@localhost maria]# grep "zuo" test.txt
genzhewozuoshouyoushouyigemandongzuo
[root@localhost maria]# vim test.txt
[root@localhost maria]# grep -n "today" test.txt
5:today is a sunny day
[root@localhost maria]# vim test.txt
[root@localhost maria]# cat -n test.txt
1 genzhewozuoshouyoushouyigemandongzuo
2 # cichuwuyong
3
4
5 today is a sunny day
6 so i am very happy
7 I like eating aplle, especially big apple.
[root@localhost maria]# grep -i "I" test.txt -i表示不区分大小写
genzhewozuoshouyoushouyigemandongzuo
# cichuwuyong
today is a sunny day
so i am very happy
I like eating aplle, especially big apple.
[root@localhost maria]# grep -v "^$" test.txt -v表示翻转查询结果, 此句表示找出空行以外的行
genzhewozuoshouyoushouyigemandongzuo
# cichuwuyong
today is a sunny day
so i am very happy
I like eating aplle, especially big apple.
[root@localhost maria]# grep -v "^#" test.txt | grep -v "^$" 此句表示找出空行和注释行以外的行
genzhewozuoshouyoushouyigemandongzuo
today is a sunny day
so i am very happy
I like eating aplle, especially big apple.
[root@localhost maria]#
示例2
cat 文件 | 想要的内容 用法二
找出linux用户信息文件中有关maria的行信息
[root@localhost etc]# cat passwd | grep "maria"
maria:x:1000:1000:maria:/home/maria:/bin/bash
head, tail命令
head和tail都是能够读取文件内容的 语法 head 文件名 # 默认从文件的前10行看
head -3 文件名 # 查看文件的前3行
tail 文件名 # 默认从文件的后10行看
tail -2 文件名 # 查看文件的后两行
tail命名的实时监控用法, 可以用于检测线上的日志文件, 检测用户的请求信息
tail -f 文件名 # 实时刷新文件内容
scp命令(secure copy)
Linux scp命令用于Linux之间复制文件和目录。
scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。
语法 scp 【可选参数】 本地源文件 远程文件标记
参数
-r :递归复制整个目录 -v:详细方式输出 -q:不显示传输进度条 -C:允许压缩
实例
注意: 可以通过ping 对方IP地址, 验证是否可以和对方通信.
#传输本地文件到远程地址 scp 本地文件 远程用户名@远程ip:远程文件夹/ scp 本地文件 远程用户名@远程ip:远程文件夹/远程文件名 scp /tmp/chaoge.py root@192.168.1.155:/home/ scp /tmp/chaoge.py root@192.168.1.155:/home/chaoge_python.py scp -r 本地文件夹 远程用户名@远程ip:远程文件夹/ scp -r /tmp/oldboy root@192.168.1.155:/home/oldboy #复制远程文件到本地 scp root@192.168.1.155:/home/oldboy.txt /tmp/oldboy.txt scp -r root@192.168.1.155:/home/oldboy /home/
lrzsz工具
用于windows(基于xshell工具)和linux之间互相传递文件 1. 安装此工具 yum install lrzsz -y 2. 安装好lrzsz之后, 就存在了两个命令, 一个是rz, 一个是sz rz # 直接输入rz命令, 跳出一个弹窗, 接收windows的资料 sz 文件 # 发送linux的一个文件, 发给windows某个位置, 也会跳出一个弹窗
du 命令
Linux du命令用于显示目录或文件的大小。
du会显示指定的目录或文件所占用的磁盘空间。
用法 du 【参数】【文件或目录】
-s 显示总计
-h 以k,M,G为单位显示,可读性强
实例
显示目录或文件所占空间 #什么都不跟,代表显示当前目录所有文件大小 du #显示/home的总大小 du -sh /home
[root@localhost etc]# du -sh /home
14M /home
[root@localhost etc]# du -h ./*
4.0K ./adjtime
4.0K ./aliases
4.0K ./alsa/conf.d
12K ./alsa
4.0K ./alternatives
top 命令
top 命令用于动态地监视进程活动与系统负载等信息
我们来分析一下图片信息
统计信息区
第一行 (uptime) 系统时间 主机运行时间 用户连接数(who) 系统1,5,15分钟的平均负载 第二行:进程信息 进程总数 正在运行的进程数 睡眠的进程数 停止的进程数 僵尸进程数 第三行:cpu信息 1.5 us:用户空间所占CPU百分比 0.9 sy:内核空间占用CPU百分比 0.0 ni:用户进程空间内改变过优先级的进程占用CPU百分比 97.5 id:空闲CPU百分比 0.2 wa:等待输入输出的CPU时间百分比 0.0 hi:硬件CPU中断占用百分比 0.0 si:软中断占用百分比 0.0 st:虚拟机占用百分比
第四行:内存信息(与第五行的信息类似与free命令)
- 8053444 total:物理内存总量
- 7779224 used:已使用的内存总量
- 274220 free:空闲的内存总量(free+used=total)
- 359212 buffers:用作内核缓存的内存量
第五行:swap信息 8265724 total:交换分区总量 33840 used:已使用的交换分区总量 8231884 free:空闲交换区总量 4358088 cached Mem:缓冲的交换区总量,内存中的内容被换出到交换区,然后又被换入到内存,但是使用过的交换区没有被覆盖,交换区的这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。
注意: 按q可以退出top指令.
ps命令
用于查看linux进程信息的命令
语法: ps -ef # -ef 是一个组合参数, -e - f的缩写, 默认显示linux所有的进程信息, 以及pid,时间, 进程名等信息
# 过滤系统有关vim的进程
[root@localhost etc]# ps -ef | grep "vim"
root 34186 10857 0 09:13 pts/0 00:00:00 grep --color=auto vim
1. 一个django运行后, 如何验证django是否运行了, 它会产生些什么内容?
能够产生日志, 检测用户的请求, 说明django运行了
查看端口情况, django会占用一个端口
产生一个python相关的进程信息
kill 命令
kill 进程的id号 如果遇见卡死的进程, 杀不掉, 就发送-9强制的信号 kill -9 pid
netstat 命令
用于查看linux的网络端口信息 语法: [root@localhost etc]# netstat -tunlp #显示机器所有的tcp/udp的所有端口连接情况
具体参数用法详见:
http://linux.51yip.com/search/netstat
用户管理与文件权限篇
https://www.cnblogs.com/pyyu/articles/9355477.html
现代操作系统一般属于多用户的操作系统,也就是说,同一台机器可以为多个用户建立账户,一般这些用户都是为普通用户,这些普通用户能同时登录这台计算机,计算机对这些用户分配一定的资源。 普通用户在所分配到的资源内进行各自的操作,相互之间不受影响。但是这些普通用户的权限是有限制的,且用户太多的话,管理就不便,从而引入root用户。 此用户是唯一的,且拥有系统的所有权限。root用户所在的组称为root组。“组”是具有相似权限的多个用户的集合。
在Linux系统中,用户也有自己的UID身份账号且唯一 系统管理员UID为0 系统用户UID为1~999 Linux安装的服务程序都会创建独有的用户负责运行。 普通用户UID从1000开始:由管理员创建
root的权利
Linux系统的特性就是可以满足多个用户,同时工作,因此Linux系统必须具备很好的安全性。 在安装RHEL7时设置的root管理员密码,这个root管理员就是所有UNIX系统中的超级用户,它拥有最高的系统所有权,能够管理系统的各项功能,如添加/删除用户,启动/关闭进程,开启/禁用硬件设备等等。 因此“能力越大,责任越大”,root权限必须很好的掌握,否则一个错误的命令可能会摧毁整个系统。
用户组GID
为了方便管理属于同一组的用户,Linux 系统中还引入了用户组的概念。通过使用用 户组号码(GID,Group IDentification),我们可以把多个用户加入到同一个组中,从而方 便为组中的用户统一规划权限或指定任务。 假设有一个公司中有多个部门,每个部门中又 有很多员工。如果只想让员工访问本部门内的资源,则可以针对部门而非具体的员工来设 置权限。 例如,可以通过对技术部门设置权限,使得只有技术部门的员工可以访问公司的 数据库信息等。
Linux管理员在创建用户时,将自动创建一个与其同名的用户组,这个用户组只有该用户一个人
Linux/unix是一个多用户、多任务的操作系统。
root:默认在Unix/linux操作系统中拥有最高的管理权限。可以理解为qq群的群主
普通用户:是管理员或者具备管理权限的用户所创建的,只能读、看,不能增、删、改。
创建普通用户
#添加用户 useradd oldboy #设置密码 passwd redhat root用户可以修改其他所有人的密码,且不需要验证
如果passwd后未指定用户, 则为当前登录用户修改密码
切换用户
su命令可以切换用户身份的需求,普通用户切换, 需要输入密码, root用户切换不需要输入密码 su - username su命令中间的-号很重要,意味着完全切换到新的用户,即环境变量信息也变更为新用户的信息
需要输入要切换的用户的密码
id 命令
用于查看用户的账户信息
[root@localhost etc]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@localhost etc]# id maria
uid=1000(maria) gid=1000(maria) groups=1000(maria),10(wheel)
组的概念
以组为单位进行权限控制, 方便管理.
ll命令是ls -l的缩写, 不仅能列出文件名, 还能列出文件权限信息.
添加删除用户, 需要注意的是, 涉及到权限的修改, 只能用root去操作, 其他人基本上没权限 useradd maria # 创建用户 passwd maria # 为用户修改密码 userdel maria # 删除用户
userdel -rf maria # 删除用户, 且删除用户的家目录
# 查看当前用户(我是谁) whoami # 切换用户 su - oldboy # 退出用户登录 logout ctrl + d
一般情况下,在生产环境避免直接用root用户,除非有特殊系统维护需求,使用完立刻退回普通用户 非交互式设置密码(echo "redhat"|passwd --stdin oldboy && history -c)
Tip: 1.超级用户root切换普通用户无需密码,例如“群主”想踢谁就踢谁 2.普通用户切换root,需要输入密码 3.普通用户权限较小,只能基本查看信息 4.$符号是普通用户命令提示符,#是超级管理员的提示符 root是当前用户,oldboyedu是主机名,~代表当前路径,也是家目录
groupadd命令 group命令用于创建用户组,为了更加高效的指派系统中各个用户的权限,在工作中常常添加几个用户到一个组里面,这样可以针对一类用户安排权限。 例如超哥以前在公司里,就负责添加openLDAP用户管理,偶尔*,美国的同事去上海协作,我就得给他们添加到it部门组里面,以至于他们有对服务器操作的权限。 groupadd it_dep
userdel删除用户 -f 强制删除用户 -r 同事删除用户以及家目录 userdel -r pyyu
sudo命令 sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
文件与目录权限
Linux权限的目的是(保护账户的资料) Linux权限主要依据三种身份来决定: user/owner 文件使用者,文件属于哪个用户 group 属组,文件属于哪个组 others 既不是user,也不再group,就是other,其他人
什么是权限 在Linux中,每个文件都有所属的所有者,和所有组,并且规定了文件的所有者,所有组以及其他人对文件的,可读,可写,可执行等权限。 对于目录的权限来说,可读是读取目录文件列表,可写是表示在目录内新增,修改,删除文件。可执行表示可以进入目录
文件类型
- 一般文件 d 文件夹 l 软连接(快捷方式) b 块设备,存储媒体文件为主 c 代表键盘,鼠标等设备
文件权限 r read可读,可以用cat等命令查看 w write写入,可以编辑或者删除这个文件 x executable 可以执行
修改权限的命令 chmod chmod [身份] [参数] [文件] u(user) +(添加) g(group) -(减去) o(other) =(赋值) a(all)
文件权限 r read可读,可以用cat等命令查看 w write写入,可以编辑或者删除这个文件 x executable 可以执行 目录权限(文件夹权限) r 可以对此目录执行ls列出所有文件 w 可以在这个目录创建文件 x 可以cd进入这个目录,或者查看详细信息
修改文件权限属性 普通用户只能修改自己的文件名,时间与权限(注意) 因此修改其他用户权限,只能用最nb的root用户 #切换root用户 [pyyu@oldboy_python root]$ su -
chown
change owner的缩写 更改文件的所有者, user 语法: chown 新属主 file.txt
chgrp
更改文件的拥有组, group change group的缩写
chgrp 新属组 file.txt
软连接
软连接也叫做符号链接,类似于windows的快捷方式。 常用于安装软件的快捷方式配置,如python,nginx等 复制代码 ln -s 目标文件 软连接名 1.存在文件/tmp/test.txt [root@master tmp]# ls -l -rw-r--r-- 1 root root 10 10月 15 21:23 test.txt 2.在/home目录中建立软连接,指向/tmp/test.txt文件 ln -s /tmp/test.txt my_test 3.查看软连接信息 lrwxrwxrwx 1 root root 13 10月 15 21:35 my_test -> /tmp/test.txt l表示软连接类型的文件.
4.通过软连接查看文件 cat my_test my_test只是/tmp/test.txt的一个别名,因此删除my_test不会影响/tmp/test.txt,但是删除了本尊, 快捷方式就无意义不存在了
文件夹创建快捷方式
打包不节省空间 压缩节省磁盘空间 语法 tar命令 功能参数 -z 调用gzip命令, 压缩文件, 加上这个参数才会节省磁盘空间 -x 解包 -v 显示整个过程 -f 必须写在参数结尾, 指定压缩文件的名字 -c 打包
tar 命令:用来压缩和解压文件。tar本身不具有压缩功能。他是调用压缩功能实现的 语法 复制代码 tar(选项)(参数) -A或--catenate:新增文件到以存在的备份文件; -B:设置区块大小; -c或--create:建立新的备份文件; -C <目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。 -d:记录文件的差别; -x或--extract或--get:从备份文件中还原文件; -t或--list:列出备份文件的内容; -z或--gzip或--ungzip:通过gzip指令处理备份文件; -Z或--compress或--uncompress:通过compress指令处理备份文件; -f<备份文件>或--file=<备份文件>:指定备份文件; -v或--verbose:显示指令执行过程; -r:添加文件到已经压缩的文件; -u:添加改变了和现有的文件到已经存在的压缩文件; -j:支持bzip2解压文件; -v:显示操作过程; -l:文件系统边界设置; -k:保留原有文件不覆盖; -m:保留文件不被覆盖; -w:确认压缩文件的正确性; -p或--same-permissions:用原来的文件权限还原文件; -P或--absolute-names:文件名使用绝对名称,不移除文件名称前的“/”号; -N <日期格式> 或 --newer=<日期时间>:只将较指定日期更新的文件保存到备份文件里; --exclude=<范本样式>:排除符合范本样式的文件。
压缩文件的后缀, 本没有意义, 只是告诉别人, 这个文件是用什么命令压缩/解压缩的
*.gz gzip命令解压缩
*.tar 用tar命令解压缩
*.xz 用xz命令解压
*.zip 用unzip解压
案例1: 将aa目录下的所有内容打包成aa.tar
[root@localhost aa]# tar -cvf aa.tar ./*
./aaa/
./aaaa/
./aaaaa/
[root@localhost aa]# ls
aa.tar aaa aaaa aaaaa
解包
[root@localhost aa]# tar -xvf aa.tar ./
./aaa/
./aaaa/
./aaaaa/
案例2: 打包压缩, 解压缩
[root@localhost c]# ls
c1 c2
[root@localhost c]# tar -zcvf cc.tar.gz ./*
./c1/
./c2/
/bin/sh: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8)
[root@localhost c]# ls
c1 c2 cc.tar.gz
[root@localhost c]# rm -r c1
rm: remove directory 'c1'? y
[root@localhost c]# rm -r c2
rm: remove directory 'c2'? y
[root@localhost c]# ls
cc.tar.gz
[root@localhost c]# tar -zxvf cc.tar.gz ./
./c1/
./c2/
[root@localhost c]# ls
c1 c2 cc.tar.gz
防火墙
关闭防火墙具体操作如下: 复制代码 centos7默认已经使用firewall作为防火墙了 1.关闭防火墙 systemctl status firewalld #查看防火墙状态 systemctl stop firewalld #关闭防火墙 systemctl disable firewalld#关闭防火墙开机启动 systemctl is-enabled firewalld.service#检查防火墙是否启动
DNS DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。 通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。 查看Linux的dns,唯一配置文件 配置文件 cat /etc/resolv.conf #dns服务器地址 nameserver 119.29.29.29 nameserver 223.5.5.5 本地强制dns解析文件/etc/hosts 指定本地解析: /etc/hosts 主机IP 主机名 主机别名 127.0.0.1 www.pyyuc.cn
nslookup命令
crontab定时任务
注意: 只写命令, 不加命令的绝对路径是无法生效的.
什么是计划任务: 后台运行,到了预定的时间就会自动执行的任务,前提是:事先手动将计划任务设定好。这就用到了crond服务 crond服务相关的软件包 [root@MiWiFi-R3-srv ~]# rpm -qa |grep cron cronie-anacron-1.4.11-14.el7.x86_64 crontabs-1.11-6.20121102git.el7.noarch cronie-1.4.11-14.el7.x86_64 这些包在最小化安装系统时就已经安装了,并且会开机自启动crond服务,并为我们提供好编写计划任务的crontab命令。 crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似 语法 复制代码 crontab (选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该用户的计时器设置; -u<用户名称>:指定要设定计时器的用户名称。 存放定时任务的文件 /var/spool/cron 复制代码 注意: 1 查看计划任务的执行:tail -f /var/log/cron 2 写计划任务时,命令必须加上绝对路径,否则会出现这种情况:从日志中看,确实触发了计划任务的执行,但是命令却没有执行成功,比如* * * * * reboot就会出现这种情况,需要将reboot写成/usr/sbin/reboot 3. 计划任务执行的命令 是否存在,软件是否安装 4. 确保crontab服务运行 systemctl status cron ps -ef|grep crond 5. 检测crontab是否开机启动 systemctl is-enabled crond crontab配置文件 复制代码 在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin 这一条件限制了命令的查找范围, 所以在写命令时要用命令的绝对路径, 否则会导致很多命令无法生效. MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 分 时 日 月 周 复制代码 复制代码 crontab任务配置基本格式: * * * * * command 分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天) 命令 第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表示小时1~23(0表示0点) 第3列表示日期1~31 第4列表示月份1~12 第5列标识号星期0~6(0表示星期天) 第6列要运行的命令 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。 30 08 * * * 每天8.30去上班 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9” 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6” 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。 */3 * * * * /usr/sbin/ntpdate ntp1.aliyun.com 每隔三分钟执行下时间同步
https://www.cnblogs.com/pyyu/articles/9355477.html
yum配置详解
把机器上的yum源撤了, 换成别的yum源. 方法如下:
1. 下载wget命令
yum install wget -y
2. 备份旧的yum仓库源
[root@localhost home]# cd /etc/yum.repos.d
[root@localhost yum.repos.d]# mkdir repobak
[root@localhost yum.repos.d]# mv *.repo repobak
[root@localhost yum.repos.d]# ls
repobak
3. 下载新的阿里yum源仓库
[root@localhost yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
注意:
下载地址为:
阿里巴巴镜像开源网站: https://developer.aliyun.com/mirror/
https://developer.aliyun.com/mirror/centos
4. 下载epel仓库
[root@localhost yum.repos.d]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
下载地址:
https://developer.aliyun.com/mirror/epel
[root@localhost yum.repos.d]# ls
CentOS-Base.repo epel-playground.repo epel-testing.repo repobak
epel-modular.repo epel-testing-modular.repo epel.repo