man 命令:
man ls、man pwd等linux中的命令可以用man来查看具体使用,如ls -l的作用
================================================================================
help 命令:
命令分为内部命令和外部命令,shell自带的称为内部命令,其他的是外部命令
使用type cd、type shell区分
内部命令使用如: help cd
外部命令使用如:ls —help
================================================================================
info 命令:
比man命令更加详细的解释
================================================================================
pwd 命令:
显示当前目录名称
================================================================================
cd 命令:
进入目录 cd ../ 进入当前目录的上一级目录 cd ../../进入当前目录的上上级目录
================================================================================
ls 命令:
-l 长格式显示文件,如下
drwxr-xr-x 8 root wheel 256 8 31 00:52 share
-rwxr-xr-x 1 root wheel 718 8 31 00:52 uninstall.sh
第一个字符,d代表是文件夹,-代表是文键
第二到十个字符代表权限
-a 显示隐藏文件
-r 逆序显示,默认按照文件名逆向排序,如果有-t按照时间逆序
-t 按照时间顺序显示
-R 递归显示,当前目录下的所有子目录和文件
-h 如果文件大小达到g,以g的格式显示,如果文件大小达到m,以m的格式显示, k、B同理
-i i节点编号
显示多个目录,如 ls /usr /var,结果如下
/usr:
X11 X11R6 bin lib libexec local sbin share standalone
/var:
MobileSoftwareUpdate backups folders log mobile personalized_factory run spool
agentx containers install logs msgs protected rwho tmp
at db jabberd ma netboot root select vm
audit empty lib mail networkd rpc sntpd yp
================================================================================
mkdir 命令:
建立新目录,可用mkdir a b c 创建a、b、c三个目录,创建多级目录 mkdir -p a/b/c/d/e/f/g
================================================================================
rmdir 命令:
删除目录,只能删除非空文件夹
================================================================================
rm 命令:
删除文件或文件夹,-r递归删除 -f 不确认是否删除, 千万不要用 rm -rf /,即便你真的吃不上饭了
================================================================================
touch 命令:
创建文件
================================================================================
cp 命令:
复制命令 -a 保留权限,修改时间等信息,-p 保留修改时间
================================================================================
mv 命令:
移动或重命名
================================================================================
cat 命令:
查看全部文本内容
================================================================================
head 命令:
查看文本前n行 head -n
================================================================================
tail 命令:
查看文本后n行 tail -n , 跟踪文本变化 tail -f
================================================================================
wc 命令:
wc -l 查看文件有多少行
================================================================================
more 和 less 命令:
分页查看,使用G跳到最后,使用g跳到开头,使用?向上查找,使用/向下查找,按下n查看下一个,按空格可以看下一屏
================================================================================
tar 命令:
打包 c ,格式为文件 f,使用gzip z,解压 x,相同的名字 v : tar czf /usr/local/a.tar /usr/local/a 前面是目标文件,后面是要打包的文件或文件夹
================================================================================
gzip 命令:
打包,较bzip2更快
================================================================================
bzip2 命令:
打包,较gzip 压缩比例更高
================================================================================
vim 命令:
插入 i,退出 :q, 保存并退出 :wq
1.正常模式,直接使用vim
按h向左,j向下,k向上,l向右
在某一行按下yy,复制这行,在某行按下p键,会换行粘贴复制这一行的内容
在某一行按下3yy,会复制从这行开始的3行,同样按下p,会换行粘贴3行的内容
y$ 复制从光标位置到当前行结尾
剪切当前行,dd,剪切光标到当前行结尾,d$
撤销指令,u, 重做命令:ctrl + r
单个字符的删除,x,单个字符的替换,先按r,再按下要替换为的字符
到当前行的开头^,到当前行的结尾$
2.插入模式,vim进入后使用i,到达光标位置,使用I,到达光标所在位置的开头,使用a,来到光标所在位置的下一个位置,使用A,来到光标所在位置的结尾
使用o,来到光标所在位置的下一行,开辟一个新行,使用O,来到光标所在位置的下一行,开辟一个新行
3.命令模式,:进入命令,使用q,不保存并退出,q!,强制退出,wq,保存并退出,! + 命令,查看某些信息,比如!ifconfig,查看ip地址,按回车再回到vim,这样就可以在修改文件的时候不用退出去看了; s/old/new, 替换old为new,这个命令只针对光标所在的一行,想替换全部行,使用%s/old/new,想替换3-5行,使用3,5s/old/new,以上的命令只替换行中遇到的第一个old,如果要全部替换一行的全部old,使用s/old/new/g. 显示行号 set nu,就可以看到行号了,如果想每次打开都显示行号,那么修改/etc/vimrc,在最后一行添加,set nu;
4.可视模式,v 字符可视模式,V 可视行模式,ctrl + v,可视块模式
================================================================================
用户与权限管理命令:
useradd 新建用户, 会在home目录下创建一个用户同名文件,在etc/passwd下添加一个用户同名文件,在etc/shadow文件中添加一行,存储用户密码。使用id 用户名,可以看到uid,gid,groups
userdel 删除用户
passwd 用户名,设置指定用户的密码,修改自己的密码,直接使用passwd
usermod 用户名,修改用户账号信息, 使用man查看帮助,如修改用户组, usermod -g group1 user1
chage 修改用户周期,使用man查看帮助
groupadd 新建用户组
groupdel 删除用户组
su - user1 切换用户
sudo 以其他用户身份执行命令, visodu 设置需要使用sudo的用户(组)
/etc/passwd 文件,用户配置:
user:x:1001:1001:desc:/home/user:/bin/bash
用:分割开每个值,以下是每个值的含义
1:表示用户名,
2:表示是否需要密码,
3:表示用户ID
4:表示组ID
5:表示注释
6:表示用户的家目录位置
7:表示用户登录的命令解释器
etc/shadow文件,存储用户和用户密码
user:password:…
etc/group文件,用户组:
root:x:组gid:用户名
第一个是组名,第二个是 是否需要密码,第三个是组gid,第四个表示用户名,这个用户也属于这个组
查看文件权限的方法:
ls -l
drwxr-xr-x 3 wangyang staff 96 1 11 22:45 logs
第一个字符有
-普通文件
d普通文件
b块特殊文件
c字符特殊文件
l符号链接
f命名管道
s套接字文件
三个rwx(r=4,w=2,x=1),表示文件所属用户、所属用户组,其他用户对文件的权限
chmod命令:
修改文件、目录权限
chmod u+x /temp/testfile
chmod g=rwx /temp/testfile
chmod 777 /temp/testfile
u,g,o,a 分别代表设置所属用户权限,设置所属用户组权限,设置其他用户权限,设置所有用户权限
+代表增加权限,-代表去掉权限,=代表等于权限
只用数字代表设置三个位置的权限,创建文件默认为644
chown命令:
chown user /file 改变文件所属用户
chown :group1 /file 改变文件所属用户组
================================================================================
> 命令:
echo 123 > file 将123输出到file
================================================================================
>>命令:
echo 123 >> file 将123以追加的方式输出到file
================================================================================
网络管理命令:
ifconfig 命令,网络状态查看
eth0,第一块网卡
第一个网卡也可能叫下面的名字:
eno1 板载网卡
ens33 PCI-E 网卡
enp0s3 无法获取屋里信息的PCI-E 网卡
CentOS7使用了一致性网络设备命名,以上都不匹配使用eth0
网卡命名规则受biosdevname和net.ifnames两个参数影响
编辑/etc/default/grub文件,增加biosdevname=0,net.ifnames=0
更新grub:grub2-mkconfig -o /boot/grub2/grub.cfg
重启:reboot
0 1代表ens33
1 0代表em1
0 0代表eth0
ifup命令 ifup加接口,开启网卡
ifdown命令 ifdown加接口,关闭网卡
route 命令,简化版的网络信息, route -n 显示主机名
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.24.1 0.0.0.0 UG 100 0 0 eth0
10.0.24.0 0.0.0.0 255.255.252.0 U 100 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
添加网关:route add 0.0.0.1 gw 10.0.24.1
删除网关:route del 0.0.0.1 gw 10.0.24.1
访问10.0.0.1的时候使用geteway10.0.24.2:route add -host 10.0.0.1 gw 10.0.24.2
访问192.168.0.0网段的时候使用geteway10.0.24.3:route add -net 192.168.0.0 gw 10.0.24.3
网络故障排除命令:
ping 检测能否连接
traceroute 检测连接质量
mtr 检测数据包丢失
nslookup 域名到DNS的路径,通过域名得到ip
telnet 检测能否连接端口
tcpdump 检测数据包 -i any 所有网卡 -n 域名转化为ip,host 10.0.0.1 只抓这个ip, and port 80 只抓80端口,-w /temp/filename 抓取的内容存到制定文件
netstat 查看进程监听端口 -n 显示ip,t只截取tcp形式的截取(udp的就不显示了),p显示进程,l 监听
ss 更详细的netstat,使用参数相同
网络服务管理:
网络服务管理程序分为两种,分别为SysV和systemd
service network stat|stop|restart
chkconfig -list network
systemctl list-unit-files NetworkManager.service
systemctl start|stop|restart NetworkManager
systemctl enable|disable NetworkManager
网卡配置文件名称:ifcfg-eth0 位置/etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=dhcp #ip为动态还是静态,静态设置为none,设置IPADDR为自己的静态ip,设置自己的GATEWAY,设置DNS,最后service network restart重启网络
DEVICE=eth0 #网卡
DHCPV6C=yes
HWADDR=52:54:00:25:4d:00
IPV6INIT=yes
ONBOOT=yes #开机时网卡是否启用
PERSISTENT_DHCLIENT=yes
TYPE=Ethernet
USERCTL=no
网络常用参数配置:/etc/hosts
hostname主机名,使用hostname wy把主机名临时改为wy
hostnamectl set-hostname wy 永久生效,需要修改/etc/hosts , 不然可能找不到主机
================================================================================
软件安装命令:
软件包管理器:
CentOS/RedHat使用yum包管理器,软件安装包格式为rpm
Debian/Ubuntu使用apt包管理器,软件安装包格式为deb
rpm格式,vim-common-7.4.el7.x86_64.rpm 软件名称(vim-common)-版本(7.4)-系统版本(el7)-平台(x86_64)
rpm命令常用参数
-q 查询软件包 后面跟软件包名,-qa查看所有,可以用less查找
-i 安装软件包 后面跟本地rpm包,会检测依赖,使用yum会自动解决依赖关系
-e 卸载软件包 后面跟软件包
yum命令:
修改镜像源:/etc/yum.repos.d/CentOS-Base.repo 具体搜索引擎查,可以去阿里巴巴开源镜像站寻找包:opsx.alibaba.com, 除了这个,还有很多其他东西,且有帮助文档
常用选项
install 安装软件包
remove 卸载软件包,会提示卸载引用的软件包
list | grouplist 查看软件包
update 升级软件包
makecache 清空缓存,从新的yum源获取安装包列表
可能用rpm包和yum安装都找不到最新的软件版本,对于一些开源软件,可以用源代码编译安装
编代码编译安装的基本流程
wget https://openresty.org/download/openresty-1.15.8.1.tar.gz
tar -zxf openresty-VERSION.tar.gz
cd openresty-VERSION
./configure —prefix=/usr/local/openresty(默认安装路很可能在把文件配置在各个目录,很混乱,使用--prefix可以配置安装路路径。自动配置环境,比如匹配gcc)
make -j2 (编译,-j2是用两个逻辑的CPU来编译,加快编译速度)
make install(安装,将软件安装到--prefix指定的目录,删除软件可以直接删除该目录;如果没有指定,可能在多个目录,删除很麻烦)
warning:使用编译安装可能有很多依赖缺失,可以使用yum安装相关依赖,或者也用源码包安装。可能会提示使用gmake,gmake install (跨平台安装)
内核升级命令:
rpm格式内核,
查看内核版本:uname -r
升级内核版本:yum install kernel, 会找到仓库里的最新版本,kernel-*** 安装制定版本的内核
使用yum update 会更新内核和所有可更新的软件
源代码编译安装内核,
首先检查依赖yum install gcc gcc-c++ make ncurses-devel openssl-devel elfutils-libelf-devel
下载并解压缩内核 https://www.kernel.org(stable为稳定版本,longterm为长期稳定版本长期支持,[EOL]表示此版本不再更新,mainline为尝鲜版本,线上不要用)
tar xvf linux-5.1.10.tar.xz -C /usr/src/kernels (xz也是一种压缩格式,参考gz)
配置内核参数,
cd /usr/src/kernels/linux-5.1.10/
make menuconfig | allyesconfig | allnoconfig(选择内核需要安装功能 ,linux-5.1.10/.config有一些配置,可以选择一些搭配)
使用当前系统内核配置(/boot下有当前版本的config,可以cp改名为config-kernelversion.platform,再执行下面的命令)
cp /boot/config-kernelversion.platform /usr/src/kernels/linux-5.1.10/.config
编译,
make -j2 all(all代表使用所有cpu,cpu核数可用lscpu查)
安装内核,
make modules_install
make install
epel仓库,拓展yum仓库
yum install epel-release -y
df命令:
查看硬盘信息
grub配置文件:
启动项
/etc/default/grub
/etc/grub.d
/boot/grub2/grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
使用单用户进入系统(忘记root密码)
================================================================================
进程管理命令:
进程的概念:
进程—运行中的程序,从程序开始运行到终止的整个生命周期是可管理的
C程序的启动是从main函数开始的
int mian(int argc, char *argv[])
终止的方式并不唯一,分为正常终止和异常终止
正常终止也分为从main返回、调用exit等方式
异常终止分为调用abort、接收信号等
进程查看:
UID PID PPID C STIME TTY TIME CMD
用户id 进程id 父进程id
ps: 查看进程 常用参数-e、-ef(加了UID、命令的完整路径)、-elf(加了线程信息)
pstree:查看进程树(父子进程)
top:查看进程的运行状态
top - 18:02:29 up 7 days, 20:32, 2 users, load average: 1.21, 0.51, 0.23
Tasks: 99 total, 1 running, 98 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.7 sy, 0.0 ni, 98.3 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1827.0 total, 166.8 free, 701.2 used, 958.9 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 944.0 avail Mem
上面参数的含义
top - 当前时间 up启动时间,两个用户登录,平均负载:1分钟内、5分钟内、15分钟内(1为满负载)
Tasks:进程总数,运行进程数,休眠进程数,停止进程数,僵尸进程数
%Cpu(s): 用户空间占用,内核空间占用,用户进程空间内改变过优先级的进程占用,空闲CPU、等待IO的CPU时间百分比,硬中断占用CPU百分比,软中断占用CPU百分比
MiB Mem: 屋里内存总量,空闲内存总量,已使用内存总量,用作内核缓存的总量
MiB Swap:交换区总量,空闲交换区总量,已使用交换区总量,可用于进程下一次分配的物理内存数量
top后按1查看每个逻辑CPU状况、按b高亮、按y打开和关闭运行态进程的加亮效果、按x打开排序效果(默认按cpu占用排序,使用<或>用左右边参数排序)、按f可以选择top显示的字段、按s加快变动时间
进程的优先级调整:nice 范围-20到19,值越小优先级越高,抢占资源就越多;renice重新设置优先级
进程的作业控制:
jobs,可以查看后台运行的任务
&符号, 命令最后加&,后台运行
================================================================================
$符号:
用法1:
$0:就是该bash文件名
$*: 第几个参数,个位数的可直接使用数字,但两位数以上,则必须使用 {} 符号来括住,如${10}.特殊的,比如$2为空,希望给一个默认值,使用${2-temp}, 没有第二个参数,那么输出的为temp
$?:是上一指令的返回值,成功是0,不成功是1。一般来说,UNIX(linux) 系统的进程以执行系统调用exit() 来结束的。这个回传值就是status值。回传给父进程,用来检查子进程的执行状态。一般指令程序倘若执行成功,其回传值为 0;失败为 1。
$@:所有参数。只不过是“$*”返回的是一个字符串,字符串中存在多外空格。 “$@”返回多个字符串。
$#:返回所有脚本参数的个数。
$$ :Shell本身的PID(ProcessID),即当前进程的PID。
$! :Shell最后运行的后台Process的PID
$- :使用Set命令设定的Flag一览
用法2:
获取环境变量 echo $PATH
用法3:
shell中$(( ))、$( )、``与${ }的区别
说明:
${ }这种形式其实与用法一和二是一样的,属于变量替换的范畴,只不过在变量替换中可以加上大括号,也可以不加大括号。
简而言之:$(( ))属于执行计算公式,等价于$[ ],$( )和` `属于命令替换,${ }属于变量替换
(1)$( )与``(反引号):返回括号中命令的结果
在bash中,$( )与` `(反引号)都是用来作命令替换的,执行括号或者反引号中的命令。
命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行
示例:命令:$ echo today is $(date "+%Y-%m-%d"),显示:today is 2014-07-01
注:在操作上,这两者都是达到相应的效果,但是建议使用$( ),理由如下:
1)``很容易与''搞混乱,尤其对初学者来说。
2)在多层次的复合替换中,``必须要额外的跳脱处理(反斜线),而$( )比较直观。
最后,$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的。
示例:
1# 将cmd1执行结果作为cmd2参数,再将cmd2结果作为cmd3的参数
cmd3 $(cmd2 $(cmd1))
2 # 如果是用反引号,直接引用是不行的,还需要作跳脱处理
cmd3 `cmd2 \`cmd1\``
(2)${ }变量替换
一般情况下,$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围
================================================================================
进程间通信:
信号是进程间通信的方式之一,典型用法是:终端用户输入中断命令,通过信号机制停止一个程序的运行。
使用信号的常用快捷键和命令
kill -l
SIGINT 通知前台进程组停止进程 ctrl + c
SIGKILL 立即结束程序,不能被阻塞和处理 kill -9 pid
kill pid 指kill -15 pid,等待程序处理完现有任务后进程终止
================================================================================
守护进程:
使用nohup和&符号配合运行一个命令,如nohup java -jar ****.jar >> *.log 2>&1 &,启动一个JavaWeb工程
nohup命令使进程忽略hangup(挂起)信号, 即使用户退出进程继续运行
守护进程(daemon)和一般进程有什么差别呢?
守护进程一直在后台运行,一般进程随用户退出而终止
================================================================================
screen命令:
screen进入screen环境
进入screen环境后,输入的任何命令(如tail -f)会以screen子进程的方式保留,使用下面的命令退出,查看ps
ctrl + a d 退出(detached)screen环境
screen -ls 查看screen的会话(找到tail -f的sessionid)
screen -r sessionid 恢复会话 (重新进入tail -f)
在screen界面使用exit退出screen模式
通过上面的过程,模拟出了守护进程的效果
================================================================================
系统日志:
/var/log文件夹下有一些系统日志
================================================================================
服务管理工具systemctl
centos6及以前:
service命令
chkconfig --list查看服务配置
centos7及以后加了systemctl
systemctl start | stop | restart | reload | enable | disable 服务名称
systemctl status 服务名称 查看状态
软件包安装的服务单元 :/usr/lib/systemd/system/
比如该目录下的sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.target #设置在某个服务后启动
Wants=sshd-keygen.target
[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
如果要增加自己的服务在sshd.service之前启动,那么加Requires=a.service,且在After中也加上a.service
================================================================================
SELinux
MAC(强制访问控制)与DAC(自主访问控制)
查看SELinux命令
getenforce
/usr/sbin/sestaus
ps -Z and ls -Z and id -Z
关闭SELinux
setenforce 0 临时关闭
/etc/selinux/sysconfig 修改selinux配置,需要重启服务器
SELINUX=disabled 建议生产环境用这个,避免对性能造成影响
================================================================================
内存与磁盘管理
内存和磁盘使用率查看:
free: 查看内存 , 发现Swap已经占用了,说明内存已经不够用了,开始使用硬盘,这时候就要加内存了
total used free shared buff/cache available
Mem: 1.8Gi 713Mi 120Mi 2.0Mi 992Mi 930Mi
Swap: 0B 0B 0B
fdisk: 查看磁盘和对磁盘进行分区,在用的机器不要用这条语句,可能搞坏,可以新开测试机测试,然后重装
-l 查看机器上所有的磁盘,结构如下:
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x89ee0607
Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 104857566 104855519 50G 83 Linux
df -h: 查看分区、占用和挂载到的目录
ls -lh: 查看文件大小
du -h / —max-depth=1:查看文件实际大小(带空洞,既空数据库),只查看第一层
ext4文件系统:
超级块:记录着分区中的文件信息
超级块副本:对超级块进行还原
i节点(inode):记录每一个文件的各种信息,只有文件名记录在父目录的i节点里
数据库(datablock): i节点后面挂着数据块,一个i节点可能跟着多个数据块
磁盘配额的使用:
磁盘的分区与挂载:
交换分区(虚拟内存)的查看与创建:
增加交换分区的大小:
mkswap
swapon
使用文件制作交换分区:
dd if=/dev/zero bs=4M count=1024 of=/swapfile
软件RAID的使用:
RAID 0 ,striping 条带方式,提高单盘吞吐率
RAID 1,mirroring 镜像方式,提高可靠性
RAID 5,有奇偶校验
RAID 10 是RAID 1 与 RAID 0 的结合
逻辑卷管理:
系统综合状态查看:
sar命令:-u查看cpu,-r查看内存,-b查看IO,-d查看每一块磁盘的读写,-q查看进程
sar -u 1 10 查看cpu信息,1s采样一次,采样10次
iftop命令:查看网络流量
================================================================================
find命令:
-name: find /etc -name passwd
模糊查询:find /etc -name passwd*
-regex:
正则查找:find /etc -regex .*wd$
-atime:
按时间查找:find /etc -atime 8 八天内有更新的文件
-exec:
找到后对这些文件执行命令:find *txt -exec rm -v {} \;
================================================================================
grep命令:
grep -C 5 "aaa" filename
-C前后五行
-B前五行
-A后五行
================================================================================
cut命令:
cut -d " " -f 2 filename : 以空格为分割,然后取第二个
如cut -d ":" -f7 /etc/passwd | sort | uniq -c,查看所有用户的登录状态
================================================================================
sort命令:排序
================================================================================
uniq命令:将相邻的整合为一个组 uniq -c
================================================================================
硬链接与软连接:
硬链接写法:ln myfile hardfile
软链接写法:ln -s myfile softfile
示例:
echo "line1" > myfile
ln myfile hard
ll -i查看,会看到myfile和hard的节点号相同,使用同一个地址
ln -s myfile soft
ll -i查看,会看到myfile和soft的节点号不同,soft存储的实际上是myfile的路径
rm myfile
ll -i查看,会看到soft标红,hard没变(节点号也没变)
echo "from soft" > soft
ll -i查看,会看到myfile重新出现了,只是inode变了,因为写入soft就是写入了 soft指向的路径,重新创建了myfile。此时myfile和hard的硬链接关系已经没有 了
================================================================================