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是什么

image

  • 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配置语法
    image
    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/

安装 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
		根据用户名,查询某用户的进程调用的文件名
原文地址:https://www.cnblogs.com/chenjinxinlove/p/9505662.html