Linux 基础操作
linux 不同子目录的不同含义,根目录 /
bin 存放二进制可执行文件(ls,cat,mkdir等)
boot 存放用于系统引导时使用的各种文件
dev 存放设备文件
etc 存放系统配置文件
home 存放所有用户文件的根目录
lib 存放跟文件系统中的程序运行所需要的共享库及内核模块
proc 虚拟文件系统,存放当前内存的映射
usr 存放系统应用程序,比较重要的目录/usr/local 管理员软件安装目录
var 存放运行时需要改变数据的文件
mnt 挂载目录
sbin 存储管理级别的二进制执行文件
root 超级用户主目录
opt 额外安装的可选应用程序包安装位置
文件查看
pwd 查看当前所在路径
ls 列出当前目录下的文件
ll 列出当前目录下的所有文件(带文件信息)
ll -a 列出当前目录下的所有文件(带文件信息,包含隐藏文件)
ls -help 查看 ls 用法
创建、重命名文件/文件夹
touch filename 创建空文件
mkdir directory 创建目录
mkdir -p directory 目录存在也不报错,也可创建多级目录
mv abc abc1 重命名文件/文件夹
链接文件
linux 有两种链接:硬链接、软连接(符号链接)
软连接:类似于 windows 快捷方式,节省磁盘空间
ln -s /java/bin/java /usr/bin/java
硬链接:相当于对原始文件的一个复制,不能对目录使用硬链接
ln hello.txt hlink
切换目录
cd . 当前目录
.. 上级目录
~ 家目录
/ 根目录
xxx/xxx 某个目录
删除文件/文件夹(目录)
rm filename 需要确认
rm -r directory 需要确认,-r 代表递归(recursion),删除目标文件夹及下面所有文件
rm -f filename 强制删除,-f 代表强制(force)
rm -rf 强制递归删除目录及其文件
复制/粘贴/剪切
cp hello.txt hello-bak.txt 复制 & 粘贴文件
cp -r 复制 & 粘贴文件或目录
mv 移动文件或目录
远程复制
scp /root/hello.txt 192.168.188.100:/root 从本地 /root/hello.txt 到远程 192.168.188.100 中的 /root 目录下
-v 显示进度
-r 复制目录时使用
-q 静默复制模式
文件属性
drwxr-xr-x 3 root root 17 Mar 29 14:24 abc
1 2 3 4 5 6 7
第 1 段:权限
第 1 个字符,- (代表文件)、 d (代表目录)、 l (代表链接)
剩余字符每 3 个一组
第 1 组:文件所有者的权限是读、写、执行
第 2 组:与文件所有者同一组的用户的权限
第 3 组:不与文件所有者同组的其他用户的权限
第 2 段:目录/链接个数
第 3 段:所属用户
第 4 段:所属组
第 5 段:文件大小(字节)
第 6 段:最后修改时间
第 7 段:文件/文件夹名称
chmod 分配权限
chmod u+x hello.txt 给当前所有者添加执行权限,u(user)、+(增加)、x (执行权限)
chmod 777 hello.txt 添加 rwxrwxrwx 权限
内容查看
cat hello.txt 查看文本内容
cat -b hello.txt 显示行号
压缩、解压
tar -z 是否同时具有 gzip 的属性,是否需要用 gzip 压缩
-c 创建一个压缩文件 (create)
-x 解开一个压缩文件
-v 显示压缩的过程
-f 使用档案名字,是最后一个参数,后面只能接档案名
tar -zxvf jdk8.tar.gz
输出及显示
echo 将内容输出到设备
echo "hello\t\t world! " 不解析转义字符
echo -e "hello\t\t world! " 解析转义字符
echo $PATH 输出环境变量,echo {$PATH} 也可以
软件安装和卸载
yum install -y php 安装 php
yum update 更新全部
yum update php 更新 php
yum info 显示包信息
yum list 不跟,则显示以安装或可安装包
yum remove java 删除 java
yum clean all 清楚所有缓存(包含文件,旧软件)
查看操作历史
history 保留了最近执行的命令记录,默认 1000,历史清单从 0 开始
history N 显示最近 N 条命令
history -c 清除所有的历史记录
history -w hello.txt 保存历史记录到文本 hello.txt
查看服务器情况
df -h 查看磁盘使用情况
free -m 显示内存单位为 MB,查看内存和交换空间的使用情况
free -h 根据值的大小,显示易于识别的单位
关机重启
shutdown -h now 关机
reboot -h now 重启
exit 退出当前登录状态
编辑文件 vi
vi hello.txt
按 i 键,进入编辑模式,可以输入内容
按 esc 键,进入命令模式
命令模式:
保存:按 shift + : 再输入 wq 按回车,代表写入并退出,w(write 写入)、q(quit 退出)
查找:按 / 再输入想要查找的字符串,按回车,如:/JAVA_HOME
复制:在行上按 yy
粘贴:在空白处按 pp,每次按 pp 都会粘贴刚才复制的内容
删除:在行上按 dd 删除当前行,也可以先按数字再按 dd,如:10 dd 代表删除当前行及以下10行
跳转:gg 跳转第一行,G 跳转最后一行
文件内容统计
wc 统计字数相关信息
-c 获取文件内容的字节数量,包含换行符,wc -c hello.txt
-m 获取字节数量,包含换行符,wc -m hello.txt,以下雷同
-l 行数
-L 获取最长一行的内容,不包含换行符
-w 表示文件中单词的个数,默认使用空白符切割
日期
date 输出 --> Sun Mar 29 20:20:20 CST 2026,不友好
date --help 查看所有命令
年月日时分秒:date +"%Y-%m-%d %H:%M:%S"
毫秒:date +%s"000"
时间戳:date --date="2020-01-01 00:00:00" +%s,两次输出时间戳可计算差值
几天前:date --date="1 days ago" +"%Y-%m-%d"
获取日期:date --date="2020-03-01 1 days ago" +"%d",求二月最后一天
进程
ps 显示进程
ps -ef | grep java
ps 将某个进程显示出来
grep(Global Regular Expression Print) 是查找
| 是管道
ps -ef
UUID PID PPID C STIME TTY TIME CMD
root 1 0 0 20:46 ? 00:00:01 /usr/lib/systemd/systemd --swi
UUID:程序被该 UUID 所拥有的
PID:这个程序的 ID
PPID:则是其上级父程序的 ID
C:CPU 使用的资源百分比
STIME:系统启动时间
TTY:登入者的终端机位置
TIME:使用掉的 CPU 时间
CMD:所下达的是什么指令
kill PID
kill -9 PID
netstat 显示端口信息
yum install -y net-tools
netstat -anp,-a 显示所有、-n 不用别名显示只用数字显示、-p显示进程号和进程名
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1032/sshd
叫 sshd 的进程正在监听 22 端口
netstat -anp | grep 80
jps 显示已启动的 java 进程信息,包含进程号、简短的进程 command
top 动态监控进程信息,Centos7
top - 17:44:07 up 4:40, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 101 total, 1 running, 100 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 3861276 total, 3368820 free, 199932 used, 292524 buff/cache
KiB Swap: 4063228 total, 4063228 free, 0 used. 3430452 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 128144 6748 4172 S 0.0 0.2 0:01.33 systemd
第 1 行,任务队列信息
17:44:07:当前时间
up 4:40:系统运行时间,格式为 时: 分
2 users:当前登录用户数
load average: 0.00, 0.01, 0.05:
系统负载,即任务队列的平均长度,三个数值分别为 1分钟、5分钟、15分钟到现在的平均值
load average 如果这个数除以 CPU 的数量,结果高于 5,就表明系统在超负荷运转了
第 2 行,进程信息
101 total:进程总数
1 running:正在运行的进程数
100 sleeping:睡眠的进程数
0 stopped:停止的进程数
0 zombie:僵尸进程数
第 3 行,CPU 使用信息
0.0 us:用户空间占用 CPU 百分比
0.0 sy:内核空间占用 CPU 百分比
0.0 ni:用户进程空间内改变过优先级的进程占用 CPU 百分比
99.7 id:空闲 CPU 百分比
0.0 wa:等待输入输出的 CPU 时间百分比
0.0 hi:硬中断(Hardware IRQ) 占用 CPU 的百分比
0.0 si:软中断(Software Interrupts) 占用 CPU 的百分比
0.0 st:虚拟机占用百分比
第 4 行,内存使用情况
3861276 total:物理内存总量,kb
3368820 free:空闲内存总量,kb
199932 used:使用的物理内存总量,kb
292524 buff/cache:用作内核缓存的内存量,kb
第 5 行
4063228 total,交换区总量
4063228 free:空间交换区总量
0 used:使用的交换区总量
3430452 avail Mem:可用于进程下一次分配的物理内存数量
q 退出监控模式
Linux 三剑客
grep(查找)、sed(编辑)、awk(分析)
grep 查找符合条件的字符串
grep abc hello.txt,查找 hello.txt 中含有 abc 的字符串
grep ^a hello.txt,查找 hello.txt 中以 a 开头的字符串
grep -i ABC hello.txt 查找 hello.txt 中含有 abc 的字符串,大小写已过滤
ps -ef | grep java 查看服务器中运行的 java 进程,如果没查到返回 grep 本身,容易误会
ps -ef | grep java | grep -v grep,-v 忽略包含指定字符串的数据
sed,同时修改多个文件
添加
sed '2a\haha' hello.txt,在第 2 行下面添加内容,a(append)
sed '1i\haha' hello.txt,在第 1 行前面插入内容,i(insert)
上面两个操作都不会直接修改源文件数据,而是将数据复制到缓冲区中,在缓冲区修改后控制台输出
删除
sed '$i\haha' hello.txt ,在最后一行上面插入一行数据
sed '7d' hello.txt,删除第 7 行
sed '$d' hello.txt,删除最后一行
修改
sed [address]s/pattern/replacement/flags
address:指定要操作的具体行,是一个可选项
s:表示替换操作
pattern:需要替换的内容
replacement:要替换的新内容
flags:
1~512 之间的任意数字,要替换的字符串在一行中出现第几次时才被替换
g,一行中所有匹配到的内容全部替换
空,只在第一次匹配时做替换
sed 's/l/a/1' hello.txt,替换每一行中第一次出现的 l
sed 's/l/a/2' hello.txt,替换每一行中第二个匹配的 l
sed 's/l/a/g' hello.txt,替换每一行中所有匹配的 l
sed 's/l/a/' hello.txt,替换每一行中第一个匹配的l
sed '2s/l/a/g' hello.txt,替换第 2 行中出现的所有 l
若要修改源文件
sed -i '2s/l/a/g' hello.txt
例1:
修改 redis.conf 这个配置文件,修改第 61 行的 ip 信息,将 127.0.0.1 修改为 192.168.188.100
sed -i '61s/127.0.0.1/192.168.188.100/1' redis.conf
awk,对数据分析生成报告,以空白符为默认分隔符将每行内容切片,切开部分再进行各种分析处理
awk [option] programe file
option 通常指文件中数据的字段分隔符
programe 是具体的处理逻辑
file 表示要操作的文件
awk 在处理文本数据时,会自动给每行中的每个字段分配一个变量
$0 表示整个文本行的内容
$1 表示文本中的第 1 个数据字段
$2 表示文本中的第 2 个数据字段
awk '{print $1}' hello.txt
awk -F: '{print $1}' /etc/passwd,-F 指定字段分隔符
awk '/world/ {print $0}' hello.txt,正则表达式对数据进行过滤,每行包含 world 筛选出来
awk '($1 ~ /world/) {print $0}' hello.txt,过滤第 1 列,结果为空,第一列中不包含 world
awk '($2 ~ /world/) {print $0}' hello.txt,过滤第 2 列,除了被改的 heaao worad! 行都显示
如果使用不匹配则用,!~
cat hello.txt
hello world!
heaao worad!
hello world!
hello world!
hello world!
hello world!
版权声明: 本文为 InfoQ 作者【yuanhang】的原创文章。
原文链接:【http://xie.infoq.cn/article/25b20c4de3171effe6a589bba】。未经作者许可,禁止转载。
评论