写点什么

Linux 基础操作

用户头像
yuanhang
关注
发布于: 2020 年 09 月 09 日

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. 1~512 之间的任意数字,要替换的字符串在一行中出现第几次时才被替换

  2. g,一行中所有匹配到的内容全部替换

  3. 空,只在第一次匹配时做替换

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!



发布于: 2020 年 09 月 09 日阅读数: 42
用户头像

yuanhang

关注

坚定而执着的向生活索取宽广而伟大的梦想 2018.09.18 加入

一直在努力的路上的全栈工程师

评论

发布
暂无评论
Linux 基础操作