linux系统文件结构
/ : 根目录
/bin : 存放必要的命令
/boot : 存放内核以及启动所需的文件
/dev : 存放设备文件
/etc : 存放系统配置文件
/home : 普通用户的目录
/mnt : 存放临时的映射文件系统,通常用来挂载使用
/proc : 存放存储进程和系统信息
/root : 超级用户的主目录
/sbin : 存放系统管理程序
/tmp : 存放临时文件
/usr : 存放应用程序,命令程序文件、程序库、手册和其它文档。
/var : 系统默认日志存放目录录
后台运行进程
默认情况下,用户创建的进程都是前台进程,前台进程从键盘读取数据,并把处理结果输出到显示器。
如果想让进程在后台启动,只需要在要执行的命令后面添加 & 符号,就表示这个命令在后台执行,例如 在后台运行 eureka-server.jar 这样,当前窗口我们还可以执行其他命令
java -jar ./eureka-server.jar &
后台进程的优点是不必等待程序运行结束,就可以输入其它命令缺点是后台进程与终端相关联,一旦关闭终端,进程就自动结束了
使进程不受挂断(关闭终端等动作)的影响
在命令前面加上 nohup 命令,可以使进程不受挂断(关闭终端等动作)的影响。
例如,如下命令,即使你关闭终端后他依然在运行
nohup java -jar ./eureka-server.jar
nohup 命令最常用的用法是和 & 结合使用,让一个任务在后端执行,并且不受挂断影响,例如
nohup java -jar ./eureka-server.jar &
输出重定向
把本来要输出到终端的结果,输出到别的地方(到文件中或者作为其他命令的输入)
>以覆盖的方式重定向输出。例如重定向到文件,如果文件不存在,就创建文件,如果文件存在,就覆盖原始内容。>>以追加的方式重定向输出。例如重定向到文件,如果文件不存在,就创建文件,如果文件存在,就追加到文件的末尾。2>>以追加的方式重定向标准错误输出。只重定向标准错误输出2>&1以追加的方式重定向标准输出和标准错误输出。
例如 追加 size=100 到 xxx.conf 文件的末尾
echo size=100 >> xxx.conf
例如 启动 eureka-server.jar 并将日志输出到 eureka-server.log 文件中
java -jar ./eureka-server.jar >> ./eureka-server.log 2>&1
更常用的方式是结合 &、nohup 一起使用(关于 &、nohup 上面有讲),例如
nohup java -jar ./eureka-server.jar >> ./eureka-server.log 2>&1 &
表示,在后台启动 eureka-server.jar 并将日志输出到 eureka-server.log 文件中,并且及时关掉终端,也不会影响程序的运行
短命令选项与长命令选项
Unix/Linux 命令中
- 后一般跟短命令选项(通常是单字母,也有一些命令是例外的)
-- 后一般跟长命令选项,通常是一个单词
如果只有一个单独的--,后面不紧跟任何选项,则表示命令选项结束,后续的都作为命令的参数而不是选项。(例如:
git checkout -- filename filename 作为 git checkout 的参数,而不是选项)
查看系统变量
echo 主要用来查看系统变量或在shell编程中打印信息
# 查看系统变量
echo 系统变量
例如
# 将信息输出到文件,文件不存在则创建,文件存在则覆盖原来的内容
echo 系统变量或其他内容 > 文件
查看文件
less
查看文件,支持上下翻页、翻行和查找
# -N 显示行号
less [-N] 文件名
- 上翻页:W键
- 下翻页:空格键、D键
- 上翻行:上键
- 下翻行:下键、S键、回车键
不同的操作系统 按键可能不一样,Mac 上还支持鼠标滚轮
- 退出:q
- 查找字符串: / 要查找的字符,
- n : 下一个匹配的文本
- N : 上一个匹配的文本
- 移动到最后一行:G
- 移动到第一行:g
tail
查看正在改变的日志文件
# 不断刷新末尾内容到屏幕上
tail -f 文件名
查看文件末尾
# 默认读取最后10行
tail [-n 行数] 文件名
vi 编辑器
vi有三种基本工作模式:命令模式、文本输入模式、末行模式。
命令模式下的操作
- 撤销:u
- 反撤销:ctrl + r
- 剪切光标所在当前行:dd
- 复制光标所在当前行:yy
- 在光标的下一行粘贴:p
末行模式下的操作
- 显示行号:set nu
- 查找:/要查找的字符串,n查找下一个,N查找前一个
- 全部替换:%s/要查找的字符串/要替换的字符串/g。例如 %s/abc/123/g 表示把所有的 abc 替换成 123
- 部分替换:开始行,结束行s/要查找的字符串/要替换的字符串/g ,包括开始行号不包括结束行号。例如 10, 20s/abc/123/g 表示把10到19行的abc替换成123
- 另存为 w 新文件
修改文件或文件夹权限
chmod 755 文件或文件夹
linux 的文件权限
linux 将文件的权限分为三种
- 可读:read 简称 r
- 可写:write 简称 w
- 可执行:execute 简称 x
有了简称之后,一个文件的权限就可以通过一组 rwx 来表示。比如 r - - 代表,文件只有读权限,rw- 代表文件可读、可写,不可执行
有了权限还不够,linux 是多用户系统,还要给不同的用户设置不同的权限。 于是一组 rwx 变成三组 rwxrwxrwx
- 第一组 rwx 表示的是文件所有者拥有的权限
- 第二组 rwx 表示的是文件所有者所在用户组拥有的权限
- 第三组 rwx 表示的是其他用户拥有的权限
除了三组 rwx 之外,为了区分文件和文件夹,linux 还在 三组 rwx 的前面加上一位字符以示区分。
如图, - 表示这是文件,d 表示这是文件夹
用数字表示权限
要给一个文件设置权限要设置 rwxrwxrwx 这样的一长串字符很不方便,于是想了另外一个办法来表示权限
- 首先将 rwx 看作三个占位符, - - -
- 将每个占位符看成一个二进制数,有字符就代表1,没字符就代表 0。比如 r- - 就代表 100, - w - 就代表010, - -x 就代表 001
- 将三位二进制数转换为十进制。比如 r- - 二进制是 100,十进制是 4,r-x 二进制是 101,十进制是 5,rwx 二进制是 111,十进制是 7
整体流程:将3组 rwx 转换成3组二进制数,再将每组二进制数转为十进制数,最终得到3位十进制数
比如常用的 755 表示,文件所有者可读可写可执行,文件所有者所在用户组可读可执行,其他用户可读可执行。
输出重定向
把正确输出和错误输出都保存到同一个文件
# >> 表示用追加的方式,最后的 & 表示在后台运行
nohup 命令 >> 文件 2>&1 &
例如 nohup java -jar /ent.jar >> /log/ent.log 2>&1 &
把正确输出放到文件A,错误输出放到文件B
# >> 表示用追加的方式,最后的 & 表示在后台运行
nohup 命令 >> 文件A 2>> 文件B &
例如 nohup java -jar /ent.jar >> /log/ent.log 2>> /log/ent_err.log &
ps
ps -ef | grep 关键字
ps aux | grep 关键字
# 查看 aux 的标题栏
ps aux | head -n 1
常用数据项含义
| 字段 | 含义 |
|---|---|
| UID | 用户ID |
| PID | 进程ID |
| PPID | 父进程ID |
| C、%CPU、CP | 进程占用的CPU百分比或千分比 |
| %MEM | 进程占用内存的百分比 |
| VSZ | 进程申请的虚拟内存量(KB)并不反应占用的物理内存的大小 |
| RSS | 进程占用的物理内存大小(KB) |
| S、STATE、STAT | 进程的状态,R运行 S中断 D不可中断 Z僵死 T停止 |
| CMD、COMMAND | 命令的名称和参数 |
kill
# 发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作
kill -9 进程id
查看端口号
netstat -anp | grep 端口号
查找文件或文件夹
# 查找/Users/wqlm/Desktop/work/ssm 目录及一级子目录中 小于1KB 以test开头的文件,不包含文件夹。找到后,移动到 当前目录下到 test 目录中
find /Users/wqlm/Desktop/work/ssm -maxdepth 2 -size -1k -type f -name "test*" -exec mv {} ./test \;
文件名
-name 文件名,文件名支持模糊匹配,* 匹配任意多个字符。
比如 *txt 匹配所有 txt结尾的文件
忽略大小写
-name "文件名",也可以通过模糊匹配实现同样的效果
路径
- . 代表当前目录
- / 代表根目录
路径的查找深度
- -maxdepth 深度,默认是查找所有层级的子目录,-maxdepth 1表示只查找当前目录, -maxdepth 2表示查找当前目录及下一级子目录
指定大小 默认单位是块(1块=512字节),其他单位还有
- k(小写):KB
- M:MB
- G:GB
-size +50k(小写) :表示大于 50KB -size -1M :表示小于 1MB
只匹配文件或文件夹
- -type f 匹配文件(包括隐藏文件)
- -type d 匹配文件夹(包括隐藏文件夹)
- 默认全部匹配
查询完之后进行的操作
-exec 命令 {} \;
{} 是个占位符,代表的是匹配的文件或文件夹列表
例如 -exec mv {} /tmp; 表示将找到的文件移动到 /tmp 中
应用
查找 当前 目录及子目录中 文件大小 小于64KB 的文件数量
find ./ -size -64k -type f | wc -l
压缩、解压
Linux下常见的压缩包格式有
- zip
- tar.gz
- tar.bz2
- tar.xz
- tar.Z
zip
# 压缩指定的所有文件或文件夹, -r 表示遍历文件夹
zip -r 压缩包名.zip 文件或文件夹1 文件或文件夹2 ...
# 解压 .zip 到指定路径,默认解压到当前目录
unzip name.zip [-d 路径]
tar
tar 是种打包格式,gz 和 bz2 等后缀才是压缩方式
- tar.gz :压缩格式为 gzip
- tar.bz2 :压缩格式为 bzip2
- tar.xz :压缩格式为
- tar.Z :压缩格式为
# 解压 .tar.gz 到指定路径,默认解压到当前目录
tar -zxvf filename.tar.gz [-C 路径]
其中zxvf含义分别如下
- z:告诉 tar 压缩格式为 gzip
- x(extract):表示解压
- v(verbose):显示详细过程
- f(file):档案名称。注意,这个参数需要放到最后,它到后面只能接档案名
# 解压 .tar.bz2 到指定路径,默认解压到当前目录,-j指压缩格式为bzip2
tar -jxvf filename.tar.bz2 [-C 路径]
# 解压 .tar.xz 到指定路径,默认解压到当前目录
tar -Jxvf filename.tar.xz [-C 路径]
# 解压 .tar.Z 到指定路径,默认解压到当前目录
tar -Zxvf filename.tar.Z [-C 路径]
从 1.15 版本开始 tar 就可以自动识别压缩的格式,不需人为指定
防火墙
不同的 linux 发行版有不同的防火墙,甚至同一个发行版的不同版本之间,使用的防火墙也不同
这里主要介绍两种防火墙产品
- firewall : 是 CentOS/RedHat 7或Fedora 18 及以上版本的默认防火墙
- iptable : 是 CentOS/RedHat 7 或Fedora 18 以下版本的默认防火墙
iptable
基本操作
# 查看防火墙状态
service iptables status
# 停止防火墙
service iptables stop
# 启动防火墙
service iptables start
# 重启防火墙
service iptables restart
# 开机自启
chkconfig iptables on
# 开机不自启
chkconfig iptables off
# 开机不自启
/sbin/chkconfig --level 2345 iptables off
开放端口
# 查看查看端口开启情况
iptables -L -n
# 添加端口 7000
iptables -A INPUT -p tcp --dport 7000 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 7000 -j ACCEPT
iptables -A INPUT -p udp --dport 7000 -j ACCEPT
iptables -A OUTPUT -p udp --dport 7000 -j ACCEPT
# 保存更改
/etc/rc.d/init.d/iptables save
# 重启防火墙
service iptables restart
firewall
# 查看防火墙开启状态
systemctl status firewalld
主要看 Active
# 启动
systemctl start firewalld
# 关闭
systemctl stop firewalld
# 开机启动
systemctl enable firewalld
# 取消开机启动
systemctl disable firewalld
开放端口
# 查看端口开启情况
firewall-cmd --zone=public --list-ports
# --permanent 表示永久生效,不加重启后失效
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=22/udp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=80/udp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=443/udp --permanent
# 重新载入一下防火墙设置,使设置生效
firewall-cmd --reload
# 查看某个端口是否生效
firewall-cmd --zone=public --query-port=22/tcp
关闭端口,同样设置完之后需要载入一下
# --permanent 表示永久生效,不加重启后失效
firewall-cmd --zone=public --remove-port=22/tcp --permanent
查看系统版本
uname -a
cat /proc/version
cat /etc/redhat-release
查看 Linux 版本:
方式一
lsb_release -a
方式二
cat /etc/issue
方式三
cat /etc/redhat-release
查看 Linux 内核版本
cat /proc/version
uname -a
uname -r
查看系统是64位还是32位:
# PC server X86 系列、I386--I686 都是32位,x86_64 是 64位
cat /proc/version
lsb_release -a
getconf LONG_BIT
file /bin/ls
关机、重启系统
关机
# 立刻关机
halt
poweroff
# 安全的关机,root用户使用
shutdown -h now
重启
# 立刻重启
reboot
# 安全的重启,root用户使用
shutdown -r now ()
查看树形结构目录
需要安装 tree 这个工具
yum install tree -y
展示当前目录下所有的层级
tree
展示当前目录下 5 个层级
tree -L 5
展示当前目录下 5 个层级,并对目录着色
tree -L 5 -C
展示当前目录下 5 个层级,并对目录着色。并显示权限信息
tree -L 5 -C -p
展示当前目录下 5 个层级,并对目录着色。并显示权限信息,并列出相对路径
tree -L 5 -C -p -f
展示当前目录下 5 个层级,并对目录着色。并显示权限信息,并只显示目录
tree -L 5 -C -p -d
展示 /tmp 目录下 5 个层级,并对目录着色。并显示权限信息,并列出相对路径
tree /tmp -L 5 -C -p -f
创建多级目录
mkdir -p ./dir1/dir2/dir3
如果 ./dir1 存在,则会忽略,自动创建 /dir2/dir3
修改主机名
hostnamectl set-hostname 主机名
修改完成之后重启
reboot
上传文件到linux、下载linux的文件
安装lrzsz
yum install -y lrzsz
上传文件到当前 linux 目录
rz
在弹出的窗口中选择要传输的文件
下载 linux 上的文件
sz 文件名
在弹出的窗口中选择要下载的地址
linux 主机间文件的拷贝
scp [-r] 源文件或目录 用户@主机名或ip:目标文件或目录
-r 是循环遍历的意思,当要拷贝目录时,需要加上 -r
例如:scp -r /usr/local/flink/ root@hadoop3:/usr/local/flink
包管理器
yum
更换yum源
下载服务器包信息到本地缓存
yum makecache
在本地搜索包信息
yum search 包名
在服务器搜索包信息
yum -C search
获取软件包信息
yum info 关键字
查看某个包是否已安装
yum list installed | grep 包名
列出所有已安装的软件包
yum list installed
列出所有可更新的软件包
yum list updates
更新yum
yum update
清除yum缓存
yum clean all
网卡
配置网络
vi /etc/sysconfig/network-scripts/ifcfg-网卡名
重启网络
service network restart
启动网卡
ifup 网卡名
每次开机自动启动网卡
如果每次开机之后,需要 ifup 网卡名 来启动网卡,那可能是网卡的配置文件没有配置好, vi /etc/sysconfig/network-scripts/ifcfg-网卡名,然后将 ONBOOT 改成 yes
安装常用软件
# net-tools 包下有 ifconfig,精简版 linux 可能没装
yum install net-tools -y
# wget
yum install -y wget
# tree 树型展示目录
yum install tree -y
# 上传文件到linux、下载linux的文件
yum install -y lrzsz
# 常用压缩、解压工具
yum install –y unzip
yum install –y tar
yum install –y gzip
yum install -y bzip2
# 常用编译工具
yum install –y gcc
yum install –y gcc-c++
yum install –y make
同步系统时间
date '+%Y-%m-%d %H:%M:%S'
ntpdate time.nist.gov
date '+%Y-%m-%d %H:%M:%S'
如果 ntpdate 没有安装,记得安装一下
yum -y install ntp
查看命令的可执行文件所在路径
Linux 下,每一条命令其实都对应一个可执行程序,在终端中输入命令,按回车的时候,就是执行了对应的那个程序, 如果想查看某个命令的可执行文件所在的路径,可以使用如下命令
which 命令
关闭 selinux
vi /etc/selinux/config
然后修改 SELINUX 为 disabled ,然后重启。
注意,是上面的 SELINUX,而不是最下面的 SELINUXTYPE,别改错了,不然重启后,机器起不起来