linux学习笔记
基础命令
网络相关的基础命令
ifconfig // 查看ip地址
ip addr // 如何不支持,那个可以使用
vi /etc/sysconfig/network-scripts/ifcfg-xx // 比如lo eth0 什么的,把ONBOOT=no 改成yes就开始网卡
yum install net-tools // 安装就可以用ipconfig了
替换默认yum源地址
http://mirrors.163.com/.help/centos.html 教程
第一步首: 先备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
第二步: 下载对应版本repo文件, 放入/etc/yum.repos.d/
cd /etc/yum.repos.d/
ls
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
第三步: 运行以下命令生成缓存
yum clean all
yum makecache
SSH
SSH是什么
- SSH: Secure Shell 安全外壳服务
- 建立在应用层基础上的安全协议
- 可靠,专为远程登录会话和其他网络服务提供安全性的协议
服务器安装SSH服务
安装SSH
yum install openssh-server
启动
service sshd start
设置开机启动
chkconfig sshd on
客户端安装SSH客户端
SSH是典型的客户端与服务端的交互模式,客户端广泛的支持各个平台
- windows有很多的工具可以支持shh的连接功能,比如xShell,Putty,secureCRT
- linux yum install openssh-clients
SSH客户端连接服务器
ssh root@140.143.244.18 就登录了 账号@ip
SSH config用法详解
- config为了方便我们批量管理多个ssh
- config存放在~/.ssh/config
- config配置语法
vim ~/.ssh/config
host "jia"
HostName 192.168.0.106
User root
Port 22
host "jia2"
HostName 192.168.0.106
User root
Port 22
ssh jia 就可以直接登录了jia那个ip的服务器
免密码登 方案只SSH key
- ssh key使用非对称加密方式生成公钥和私钥
- 私钥存放在本地~/.ssh 目录
生成
ssh-keygen -t rsa
ssh-keygen -t dsa
authorized_keys 那个文件新建在.ssh 下面加上公钥就可以免密登录
在linex上需要ssh-add ~/.ssh/imooc_rsa 添加到空间
SSH端口安全
默认端口22
避免被别人利用,改默认端口
修改/etc/ssh/shh_config的配置 Port 2222
然后重启 service sshd restart
常用命令
软件操作
安装的软件:yum
安装:yum install xxx
卸载:yum remove xxx
搜索:yum search xxx
清理缓存:yum clean packages
列出已安装:yum list
软件包信息:yum info xxx
服务器强件资源和磁盘操作
内存:free -m 用m来展示g就是g
硬盘:df -h 可以看懂的形式
负载:w/top
cpu个数和核数 cat /proc/cpuinfo
fdisk命令用于观察硬盘实体使用情况,也可对硬盘分区
文件的操作命令
ls
touch
mkdir mkdir -p c/d/s 就可以循环创建
cd
rm 删除文件和目录 rm -rf 删除非空文件
cp 复制
mv 移动 mv ./chen.log ~/ 移动到家目录
重命名 mv ./chen.log ./j.log
pwd
文件和文件夹操作命令
根目录 /
家目录 /home
当前用户的家目录 ~
临时目录 /tmp
配置目录 /etc
用户程序目录 /usr
vim
用户权限421rwx 读写执行
chmod
文件搜索、查找、读取
tail 从文件尾部开始读
head 从文件头部读
cat 读取整个文件
more 分页读取
less 可控分页
grep 搜索关键词 grep "a" j.log 在文件中搜索 -n就是统计
find 查找文件
find . -name "*.vue"
将目前目录及其子目录下所有延伸档名是vue的文件列出来
find . -type f
将目前目录其其下子目录中所有一般文件列出 d: 目录c: 字型装置文件b: 区块装置文件p: 具名贮列f: 一般文件l: 符号连结s: socket
find . -ctime -20
将目前目录及其子目录下所有最近 20 天内更新过的文件列出
find /var/log -type f -mtime +7 -ok rm {} \;
查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们,可以用于目录操作
find . -type f -perm 644 -exec ls -l {} \;
查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件
find / -type f -size 0 -exec ls -l {} \;
为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径
wc 统计个数 cat j.log | wc -l 统计出行数 grep "a" j.log | wc -l
压缩命令
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
参数 -f 是必须的:
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
压缩
tar –cvf jpg.tar *.jpg // 将目录里所有jpg文件打包成 tar.jpg
tar –czf jpg.tar.gz *.jpg // 将目录里所有jpg文件打包成 jpg.tar 后,并且将其用 gzip 压缩,生成一个 gzip 压缩过的包,命名为 jpg.tar.gz
tar –cjf jpg.tar.bz2 *.jpg // 将目录里所有jpg文件打包成 jpg.tar 后,并且将其用 bzip2 压缩,生成一个 bzip2 压缩过的包,命名为jpg.tar.bz2
tar –cZf jpg.tar.Z *.jpg // 将目录里所有 jpg 文件打包成 jpg.tar 后,并且将其用 compress 压缩,生成一个 umcompress 压缩过的包,命名为jpg.tar.Z
rar a jpg.rar *.jpg // rar格式的压缩,需要先下载 rar for linux
zip jpg.zip *.jpg // zip格式的压缩,需要先下载 zip for linux
解压
tar –xvf file.tar // 解压 tar 包
tar -xzvf file.tar.gz // 解压 tar.gz
tar -xjvf file.tar.bz2 // 解压 tar.bz2
tar –xZvf file.tar.Z // 解压 tar.Z
unrar e file.rar // 解压 rar
unzip file.zip // 解压 zip
总结
1、*.tar 用 tar –xvf 解压
2、*.gz 用 gzip -d或者gunzip 解压
3、*.tar.gz和*.tgz 用 tar –xzf 解压
4、*.bz2 用 bzip2 -d或者用bunzip2 解压
5、*.tar.bz2用tar –xjf 解压
6、*.Z 用 uncompress 解压
7、*.tar.Z 用tar –xZf 解压
8、*.rar 用 unrar e解压
9、*.zip 用 unzip 解压
系统用户操作命令
useradd 添加用户
adduser 添加用户
userdel 删除用户
passwd 设置密码
防火墙设置
iptables命令是Linux上常用的防火墙软件
安装 yum install firewalld
启动 service firewalld start
检查状态 service firewalld status
关闭或禁用防火墙 service firewalld stop/disable
iptables(选项)(参数)
-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。
提权操作sudo和文件传输操作
提权:sudo visudo编辑
下载 wget curl
文件上传 scp scp j.log chenjinxinlove@192.168.0.106:/tmp/ 上传到那个目录了
webServer
apache
安装 yum install httpd
启动 service httpd start
停止 service httpd stop
配置文件 /etc/httpd/conf
nginx 详情看nginx的配置
数据库服务
mysql
CentOS7默认安装mariadb数据库
yum remove mariadb-libs.x86_64
下载MYsql源
https://dev.mysql.com/downloads/repo/yum/
cd /tmp/
wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
安装源
yum localinstall mysql57-community-release-el7-8.noarch.rpm
安装服务器
yum install mysql-community-server
默认密码查找
cat /var/log/mysqld.log | grep "password"
启动
service mysqld start/restart
停止
service mysqld stop
连接
mysql -uroot -p 密码
远程连接
开启Genelog
set global general_log_file="/tmp/genetal.log";//设置文件路径
set global general_log="on";// 开启
新建用户和权限操作
忘记root密码怎么办
缓存服务
memcached
安装 yum install memcached
启动 memcached -d(守护进行) -l(支持的ip) -m(分配多少内存) -p (端口号11211)
停止 kill pid
redis
安装 源码编译安装
启动 redis-server start/restart
停止 redis-server stop
客户端 redis-client
// 下载到/tmp目录
获取源码 wget http://download.redis.io/releases/redis-4.0.11.tar.gz
解压 tar xvfz redis-4.0.11.tar.gz
cd src && ls
启动 ./redis-server
git
安装 yum install git
git 命令自动补全设置
php
略
java
java的安装
yum -y isntall java-1.8.0 -openjdk
java -version 查看版本
tomcat安装
官网下载,源码编译安装
https://tomcat.apache.org/
wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-9/v9.0.10/bin/apache-tomcat-9.0.10.tar.gz
启动到tomcat的目录sh start.sh
cd /tmp/apache-tomcat-9.0.10/bin/
bootstrap.jar ciphers.bat configtest.bat digest.sh shutdown.sh tomcat-native.tar.gz version.sh
catalina.bat ciphers.sh configtest.sh setclasspath.bat startup.bat tool-wrapper.bat
catalina.sh commons-daemon.jar daemon.sh setclasspath.sh startup.sh tool-wrapper.sh
catalina-tasks.xml commons-daemon-native.tar.gz digest.bat shutdown.bat tomcat-juli.jar version.bat
maven安装
官网下载,源码编译安装
https://maven.apache.org/
wget http://mirrors.shu.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
解压 tar xvfz apache-maven-3.5.4-bin.tar.gz
建立软连接
ln -s /tmp/apache-maven-3.5.4/bin/mvn /usr/local/bin/
或 但是要使用绝对路径
ln -s /tmp/apache-maven-3.5.4/bin/mvn /usr/bin/
python
软件包管理 pip
yum install python2-pip
换成豆瓣源
mkdir ~/.pip
vim ~/.pip/pip.conf
[global]
timeout=60
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
虚拟环境 virtualenv
pip install virtualenv
重要的服务
crontab 定时任务
ntpdate日期同步
ntpdate cn.pool.ntp.org
logrotate 日志切割
/etc/logrotate.d 目录下
[root@VM_0_4_centos logrotate.d]# ls
2017-08-29 bootlog chrony httpd mysql nginx ppp syslog wpa_supplicant yum
[root@VM_0_4_centos logrotate.d]# cat nginx
/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
[root@VM_0_4_centos logrotate.d]# pwd
supervisor 进程管理
pip install supervisor
监控系统zabbix
安装 https://www.zabbix.com/download
其他学习
linux服务
RPM包默认安装的服务
独立服务
启动
使用/etc/init.d/ 目录中脚本启动服务如:/etc/init.d/httpdstart/stop/restart
使用servide命令启动服务如:service httpd start|stop|restart
自启动
使用chkconfig命令来管理自启动如:chkconfig --level 2345 httpd on | off
修改/etc/rc.local文件,如vi/etc/rc.d/rc.local 加入 /etc/init.d/httpd start
使用ntsysv命令管理服务自启动
源码包安装的服务
启动
使用源码包启动脚本启动服务:如 /usr/local/apache2/bin/apachect| start
自启动
自能修改/etc/rc.loacl文件
系统管理
进程管理
进程查看
ps aux
USER:该进程属于那个使用者账号的?
• PID :该进程的进程ID号。
• %CPU:该进程使用掉的 CPU 资源百分比;
• %MEM:该进程所占用的物理内存百分比;
• VSZ :该进程使用掉的虚拟内存量 (Kbytes)
• RSS :该进程占用的固定的内存量 (Kbytes)
• TTY :该进程是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
• STAT:该程序目前的状态,主要的状态有:
R :该程序目前正在运作,或者是可被运作;
S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。
T :该程序目前正在侦测或者是停止了;
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
• START:该进程被触发启动的时间;
• TIME :该进程实际使用 CPU 运作的时间。
• COMMAND:该程序的实际指令为什么?
ps -le
pstree
-p 显示进程pid
-u 显示进程的所属用户
查看系统监控健康状态
选项
-d读秒:指定top命令每隔几秒更新,默认3秒
-b :使用批处理模式输出。一般和-n选项合用
-n 次数:指定top命令执行的次数。一般和-b一起使用
top命令的交互模式当中可以执行的命令
h帮助
P: 以cpu使用频率排序,是默认的
M:以内存的使用率排序
N:以pid排序
q:退出top
杀死进程
kill【选项】【信号】进程名
选项
-t
信号:kill -l
SIGHUP 1
重新读取配置文件,然后重启
SIGKILL 9
强制杀死
killall/pkill
根进程名 来杀死全部进程
-i 交互氏
pkill -t 可以根据终端号,只有root可以踢用来提出终端用户
w 命令来查看登录那些用户,然后在提出
修改进程的优先级
工作管理
命令后面很 &可以放入后台,但是绑定终端号,不能有交互的命令,使用jobs命令查看
使用ctrl + z是在后台暂定的
jobs [-l] -l是查看工作的pid的。+是最近一个放入的后台的程序,-是倒数第二个
fg % 工作号 恢复到前台
bg % 工作号 回到后台去
后台命令脱离登录终端执行的方法
第一种,把执行的命令加倒入/etc/rc.local文件中开机自启动
加入到定时任务中
使用nohup命令
系统资源查看
系统定时任务
at一次性定时任务
确定at安装
chkconfig --list | grep atd
at服务是否安装
service atd restart
at服务的启动
at的访问控制
如果系统中有/etc/at.allow文件,那么只有写入/etc/at.allow文件(白名单)中的用户可以使用at命令(/etc/at.deny文件会被忽略)
如果系统中没有/etc/at.allow文件,只有/etc/at.deny文件,那么写入/etc/at.deny(黑名单)中的用户不能使用at命令。对root不起作用
如果都不存在,只能root用户来操作
at命令
一般直接加时间
HH:MM 02:30
HH:MM YYYY-MM-DD 02:30 2013-07-25
HH:MM[am|pm] [month] [date] 02:30 july 25
HH:MM[am|pm]+[minutes|hours|days|weeks]
例子1
at now +2 minutes
在两分钟之后执行hello.sh脚本
at> /root/hello.sh
atq:查看正在允许的at命令
例子2:
at 02:00 2013-07-26
在指定的时间重启
at> /bin/sync
at> /sbin/shutdown -r now
crontab循环定时任务
也存在cron.allow和cron.deny的白黑名单
选项
-e 编辑crontab定时
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
系统的crontab设置
crontab -e 进入编辑界面,
***** 执行的任务
第一个* 一小时当中第几分钟 0-59
第二个* 一天当中的第几个小时 0-23
第三个* 一个月当中的第几天 1-31
第四个 * 一年当中的第几个月 1-12
第五个* 一周当中的星期几 0-7 (0和7都代表星期日)
特殊符合
*代表任意时间,第一个*就是一个小时每分钟都执行一次的意思
, 代表不连续的时间,比如“0, 8,12,16 ***” ,就代表在每天的8点0分,12点0分,16点0分都执行一次
- 代表连续的时间范围,比如“0 5 * * 1-6” 代表在周一到周六的凌晨5点0分执行命令
*/n 代表每个多久执行一次 比如 */10 * * * * ,代表每隔10分钟就执行一遍命令
例子:
45 22 * * * 代表在22点45分执行
0 17 * * 1 代表每周一的17点0分执行
0 5 1,15 * * 代表每月1号和15号的凌晨5点0分执行命令
*/10 4 * * * 代表 每天的凌晨4点,每隔十分钟执行一次
0 0 1,15 * 1 代表1号15号,每周1的0点0分都会执行:注意周不要和月混在一起
设置
有些定时任务需要系统执行,这时我们就需要编辑/etc/crontab这个配置文件
系统定时任务
第一种是需要定时执行的脚本复制到/etc/cron.{daily,weekly,monthly}目录下
第二种修改/etc/crontab配置文件
anacron配置
由于服务器等原因,没有执行定时任务,开机之后会在次执行定时任务
anacron会使用一天,七天,一个月作为检测周期
在系统的/var/spool/anacron/目录中存在cron.{daily,weekly,monthly}文件,用于记录上次执行cron的时间
和当前时间做比较,若两个时间的插值超过了anacron的指定时间差,证明有cron任务错过执行
配置文件
/etc/anacrontab
系统管理
vmstat[刷新延时 刷新次数] 命令监控系统资源: 例如vmstat 1 3
r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。
swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free 空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。
buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,加速读取
cache cache直接用来记忆我们打开的文件,给文件做缓冲, 加速写入
si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。
so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒
bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
in 每秒CPU的中断次数,包括时间中断
cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
wt 等待IO CPU时间
dmesg 看内核自检测信息
dmesg grep | CPU 查看cpu的信息。可以用来查看硬件信息
free[-b|-k|-m|-g] 以b、k、m、g来显示,显示内存状态
total used free shared buffers cached
Mem: 7872 1806 6066 0 172 1177
-/+ buffers/cache: 456 7416
Swap: 0 0 0
cat /proc/cpuinfo 查看cpu的信息
uptime查看系统当前时间等,就是top的第一行
10:31:42 up 54 days, 15:48, 1 user, load average: 0.00, 0.00, 0.00
查看内核相关的信息
uname
-a 查看系统所有相关信息
-r 查看内核版本
-s 查看内核名称
file /bin/ls 来查看系统位数
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
lsb_release -a 查看发行版本
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.8 (Final)
Release: 6.8
Codename: Final
lsof命令
lsof | more
查看系统中所有进程调用的文件
lsof /sbin/init
查询摸个文件被那个进程调用
lsof -c httpd
查看httpd进程调用了那些文件
lsof -u root
根据用户名,查询某用户的进程调用的文件名