linux
Linux 一切皆文件!!!
目录结构
目录层级 | 目录描述 |
---|---|
/ | 根目录,所有文件都挂载在这个节点下 |
/bin | bin 是 Binary 的缩写,这个目录存放着最经常使用的命令 |
/boot | 存放Linux系统启动核心文件,包括一些连接文件及镜像文件 |
/dev | Device(设备)的缩写,存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的的 |
/mnt | Linux 中用于用户临时挂载别的文件系统(如光驱,本地文件挂载等) |
/etc | 用于存放所有的系统管理所需要的配置文件和子目录 |
/home | 用户目录,每个用户都有一个属于自己的目录文件夹,一般目录名是以用户的账号命名的,类似于Win系统的 用户 目录 |
/lib | 用于存放系统最基本的动态链接库,其作用类似于Win系统中的dll文件 |
/lost+found | 一般为空,当系统非法关机后,这里就存放了一些文件 |
/media | Linux 会把自动失败的设备(U盘,光驱等等)挂载到这个目录下 |
/opt | 给系统额外安装的软件一般存放于该目录,如 oracle/mysql等 |
/proc | 系统虚拟目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息 |
/root | 系统管理员用户目录 |
/usr | 普通用户的目录,用户的很多应用程序和文件都放在这个目录下,类似于Win系统下的 program files 目录 |
/sbin | super bin 的意思,这里存放的是系统管理员使用的系统管理程序 |
/srv | 用于存放一些服务启动之后需要提取的数据 |
/sys | |
/tmp | 临时文件目录 |
/usr/bin | 系统用户使用的应用程序 |
/usr/sbin | 超级用户使用的比较高级的管理程序和系统守护程序 |
/usr/src | 内核源代码默认的放置目录 |
/var | 用于存放系统中的一些频繁变更的数据文件,如日志文件等 |
/run | 临时文件系统,存储系统启动以来的信息,当系统重启时,这个目录下的文件应该被删掉或清除 |
/www | 存放服务器网站相关的资源 |
目录管理
绝对路径 - 完整真实路径(都是以 / 开头)
相对路径 - 相对于当前目录下相对位置的路径(以 .. 开头)
cd # 切换目录(change directory)
cd ./ # 切换到当前目录
cd .. # 切换到上一级目录
cd ~ # 切换到当前用户目录
pwd # 打印当前用户所在目录(print work directory)
ls # 列出文件(list files)
➜ ls
linux mysql numpy pandas python
ls -a # 查看全部文件,包括隐藏文件
➜ ls -a
. .. .pytest_cache linux mysql numpy pandas python
ls -la # 列出所有的文件,包含文件的属性和权限,不包含隐藏文件
➜ ls -la
total 0
drwxrwxrwx 1 hhb hhb 4096 Feb 27 19:59 .
drwxrwxrwx 1 hhb hhb 4096 Feb 14 21:35 ..
drwxrwxrwx 1 hhb hhb 4096 Dec 7 21:37 .pytest_cache
drwxrwxrwx 1 hhb hhb 4096 Feb 27 19:59 linux
drwxrwxrwx 1 hhb hhb 4096 Feb 14 22:13 mysql
drwxrwxrwx 1 hhb hhb 4096 Dec 12 21:31 numpy
drwxrwxrwx 1 hhb hhb 4096 Dec 12 14:53 pandas
drwxrwxrwx 1 hhb hhb 4096 Jan 10 23:51 python
ls -i # 查看文件i节点号(可以认为是文件的唯一标识符)
➜ ls -i
28147497671235396 linux 28428972647985931 numpy 24769797950744437 python 7318349394703340 test 5629499534442283 testing
11821949022006849 mysql 23362423067194192 pandas 7318349394703342 target 7881299348124667 test.txt
# Linux 中所有文件都有一个i节点,硬链接不能跨分区,硬链接的文件对应的i节点是相同的
mkdir # 创建目录(make directory)
mkdir test # 创建一个名称为 test 的文件目录
mkdir -p test1/test1_1/test1_1_1 # 递归创建多个层级的文件夹
rmdir # 删除目录(remove directory) - 仅能删除空的目录,如果目录下面存在文件,需要先删除文件在删除目录
rmdir test # 删除 test 文件夹
rmdir -p test1/test1_1/test1_1_1 # 递归删除多个层级的文件夹
rm # 删除文件夹或文件(remove)
rm -f # 强制删除,忽略不存在的文件,不会出现警告
rm -r # 递归删除目录
rm -i # 交互式删除,会询问是否真的需要删除
rm -rf / # 将根目录下的所有文件强制删除(删库跑路) - 危险命令,不要使用
rm -rf ./test # 递归删除文件夹 test 及其该文件夹下的所有文件
rm -rf f1 f2 f3 # 删除多个文件(f1,f2,f3)
cp # 复制文件或目录(copy) - 如果目标文件已经存在,则会覆盖(y)或取消(n)
cp source target # 复制 source 文件或目录到 target 目录
mv # 移动文件或目录(move)
mv -f # 强制移动,忽略不存在的文件,不会出现警告
mv -u # 只替换已经更新过的文件
mv source target # 将source文件夹移动到target文件夹
mv source source2 # 将source文件夹重命名为 source2 - 当目标文件夹不存在时为重命名操作
文件属性
【基本属性】
➜ ls -ll /
total 1104
lrwxrwxrwx 1 root root 7 Apr 23 2020 bin -> usr/bin
drwxr-xr-x 2 root root 4096 Apr 23 2020 boot
drwxr-xr-x 8 root root 2720 Feb 26 14:15 dev
drwxr-xr-x 129 root root 12288 Feb 26 14:15 etc
drwxr-xr-x 3 root root 4096 Jul 5 2020 home
-rwxr-xr-x 2 root root 1392928 Jul 27 2021 init
lrwxrwxrwx 1 root root 7 Apr 23 2020 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Apr 23 2020 lib32 -> usr/lib32
lrwxrwxrwx 1 root root 9 Apr 23 2020 lib64 -> usr/lib64
lrwxrwxrwx 1 root root 10 Apr 23 2020 libx32 -> usr/libx32
drwx------ 2 root root 16384 Apr 11 2019 lost+found
drwxr-xr-x 2 root root 4096 Apr 23 2020 media
drwxr-xr-x 5 root root 4096 Dec 12 2020 mnt
drwxr-xr-x 2 root root 4096 Apr 23 2020 opt
dr-xr-xr-x 138 root root 0 Feb 26 14:15 proc
drwx------ 8 root root 4096 Feb 27 19:58 root
drwxr-xr-x 8 root root 160 Feb 26 14:20 run
lrwxrwxrwx 1 root root 8 Apr 23 2020 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Apr 10 2020 snap
drwxr-xr-x 2 root root 4096 Apr 23 2020 srv
dr-xr-xr-x 11 root root 0 Feb 26 14:15 sys
drwxrwxrwt 4906 root root 335872 Feb 27 20:26 tmp
drwxr-xr-x 14 root root 4096 Apr 23 2020 usr
drwxr-xr-x 13 root root 4096 Apr 23 2020 var
[l] # 链接文档(link file)
[d] # 目录
[-] # 文件
[b] # 块设备文件
[c] # 字符设备文件
[s] # 套接字文件
[p] # 管理文件
r # 读权限(read)
w # 写权限(write)
x # 执行权限(execute)
drwxr-xr-x
0 123 456 789
[文件类型] [属主权限] [属组权限] [其他用户权限]
其中:
第 1,4,7 位表示 读权限,如果用 r 表示,则有读权限,如果用 - 表示,则没有读权限
第 2,5,8 位表示 写权限,如果用 w 表示,则有写权限,如果用 - 表示,则没有写权限
第 3,6,9 位表示 执行权限,如果用 x 表示,则有执行权限,如果用 - 表示,则没有执行权限
NOTE: 注意属性中的属主和属组信息如下:
[属主] [属组]
drwxr-xr-x 2 root root 4096 Apr 23 2020 boot
NOTE: -R 表示递归作用于所有子目录
文件权限
chgrp # 更改文件属组(change group) - 语法:chgrp [-R] 属组名 文件名
chown # 更改文件属主(change owner) - 语法:chown [-R] 属主名 文件名
chmod # 更改文件权限(change mode) - 语法:chmod [-R] 权限 文件名
r: 4
w: 2
x: 1
-: 0
rw- => 4 + 2 = 6 - 可读可写不可执行
rwx => 4 + 2 + 1 = 7 - 可读可写可执行
--- => 0 + 0 + 0 = 0 - 不可读不可写不可执行
更改文件权限的两种方式:
1. 使用 chmod 命令
2. 使用 chmod 命令的简写形式(数字方式)
# 方式一:
u: user
g: group
o: others
a: all(所有的,等价于 ugo)
+: 添加权限
-: 删除权限
=: 设置权限
chmod ugo+r test.txt # 将文件 test.txt 设置为所有人可读
chmod a+r test.txt # 将文件 test.txt 设置为所有人可读
chmod ug+w,o-w file1.txt file2.txt # 将文件 file1.txt 和 file2.txt 设置为用户和组可读写,其他用户只读
# 方式二:
chmod 777 test # 赋予所有用户对文件夹 test 所有权限(可读可写可执行)
NOTE: 效的原因是:chmod改变文件权限是有限制的,它只能在linux分区下生效,否则权限改不了。(因为FAT或NTFS文件系统中根本没有Linux系统中的那些权限的概念)
# WSL 权限问题:https://my.oschina.net/xiaopei/blog/3213340
文件链接
硬链接 - A --- B, 假设B是A的链接,那么他们指向了同一个文件,允许一个文件拥有多个路径,删除了其中一个时,另一个仍然可以正常访问(用户可以通过这种机制建立硬链接到一些重要文件上,防止误删操作)
软连接 - 类似Win系统中的快捷方式,删除了源文件后,快捷方式也不可用了
ln file1 file2 # 将文件file1硬链接到file2
ln -s file1 file2 # 将文件file1软链接到file2
➜ mkdir f
➜ cd f
➜ f touch f1
➜ f ln f1 f2
➜ f ln -s f1 f3
➜ f ls -ll
total 0
-rwxrwxrwx 2 hhb hhb 0 Feb 28 22:02 f1
-rwxrwxrwx 2 hhb hhb 0 Feb 28 22:02 f2
lrwxrwxrwx 1 hhb hhb 2 Feb 28 22:02 f3 -> f1
# NOTE: 以上步骤中,f2 和 f3 都链接到了 f1,所以当 f1 文件内容改变时,f2 和 f3的内容也同步变更了
➜ f echo "i love linux" > f1
➜ f cat f1
i love linux
➜ f cat f2
i love linux
➜ f cat f3
i love linux
# NOTE: 删除源文件(f1)后,硬链接不受影响,软连接失效
➜ f rm f1
➜ f cat f3
cat: f3: No such file or directory
➜ f cat f2
i love linux
查看文件内容
【文件内容】
➜ test echo "teststart" > test.txt
➜ test echo "testend" >> test.txt
cat # 由第一行开始显示文件内容(concatenate)
tac # 与cat相反的过程,由最后一行开始显示文件内容
nl # 查看文件内容的时候显示行号
head # 查看头几行内容
head -n 20 # 查看前20行内容
tail # 查看末几行内容
tail -n 20 # 查看后20行内容
more # 按页显示内容,仅支持往后翻页(内容多于一页时) - 空格翻页,回车看下一行
less # 按页显示内容,比more更加灵活,可往前或往后翻页(内容多于一页时)
在使用 less 查看内容时:
- PgUp向上翻页,PgDn向下翻页,按 q 退出
- / + 字符,表示向下搜索字符串,n 表示继续搜索下一个,N 表示反向下一个
- ? + 字符,表示向上搜索字符串,n 表示继续搜索下一个,N 表示反向下一个
➜ cat test.txt
teststart
testend
➜ tac test.txt
testend
teststart
➜nl test.txt
1 teststart
2 testend
➜ more test.txt
➜ less test.txt
touch # 创建文件
echo # 输出内容
echo "i love linux" > test.txt # 将内容写入 test.txt
echo "i love linux" >> test.txt # 将内容追加到 test.txt
vim 编辑器
vim test.txt # test.txt 存在时编辑文件,不存在时创建文件
命令模式 -> 编辑模式:按 i
编辑模式 -> 命令模式:先按ESC退出编辑模式
命令模式 -> 底线命令模式:输入冒号
底线命令模式:
q - 退出
w - 保持
:qw - 保存并退出
用户管理
useradd # 新建用户
useradd -m tester # 新建用户 tester 并在 /home 目录下自动创建 tester 用户文件夹
useradd -G usergroup -m tester # 新建用户 tester 并在 /home 目录下自动创建 tester 用户文件夹且将该用户分配到 usergroup 用户组
userdel -r tester # 删除用户 tester 并删除/home 目录下tester 用户文件夹
usermod # 修改用户属性(修改后 /etc/passwd 配置文件会同步修改)
usermod -d /home/testernew tester # 更新用户 tester 的默认文件夹路径
passwd tester # 修改或设置用户 tester 密码(回车后输入密码,安全起见,密码输入不可见)
passwd -l tester # 锁定用户 tester (用户被锁定后,不能登录,-l 表示 lock)
passwd -d tester # 置空用户 tester 的密码(没有密码也不能登录,-d 表示 delete)
su tester # 切换用户为 tester(切换用户后执行 exit 可退到切换前的用户)
➜ ls -ll /home
total 4
drwxr-xr-x 28 hhb hhb 4096 Feb 28 22:46 hhb
useradd: cannot lock /etc/passwd; try again later.
➜ sudo useradd -m tester
[sudo] password for hhb:
➜ ls -ll /home
total 8
drwxr-xr-x 28 hhb hhb 4096 Feb 28 22:46 hhb
drwxr-xr-x 2 tester tester 4096 Feb 28 22:46 tester
# 理解一下本质:Linux中一切皆文件,这里的添加用户说白了就是往某一个文件中写入了用户信息 (/etc/passwd)
➜ sudo userdel -r tester
[sudo] password for hhb:
userdel: tester mail spool (/var/mail/tester) not found
➜ ls -ll /home
total 4
drwxr-xr-x 28 hhb hhb 4096 Feb 28 23:06 hhb
➜ sudo useradd -m tester
➜ sudo usermod -d /home/testernew tester
➜ cat /etc/passwd
tester:x:1001:1002::/home/testernew:/bin/sh
[root@huabo home]#
root -> 当前用户名
huabo -> 主机名
home -> 用户当前目录
# -> 超级用户标识
$ -> 普通用户标识
➜ sudo passwd tester
New password:
Retype new password:
passwd: password updated successfully
➜ su tester
Password:
➜ sudo passwd -l tester
passwd: password expiry information changed.
➜ su tester
Password:
su: Authentication failure
hostname # 查看主机名
hostname newname # 修改主机名(修改后重新连接即可生效)
【用户组管理】
groupadd # 创建一个用户组
groupadd usergroup # 创建一个用户组 usergroup
groupadd -g 520 usergroup # 创建一个用户组 usergroup 并设置用户组 ID 为 520 (如果不指定ID则会自增)
groupdel usergroup # 删除用户组 usergroup
groupmod -g 123 usergroup # 修改用户组 usergroup 的ID
groupmod -n newgroup usergroup # 修改用户组 usergroup 的名称
groupmod -g 123 usergroup -n newgroup usergroup # 同时修改用户组的ID和名称
➜ sudo groupdel usergroup
➜ sudo groupadd usergroup
[sudo] password for hhb:
➜ ls -ll /etc/group
-rw-r--r-- 1 root root 1018 Mar 1 21:50 /etc/group
➜ cat /etc/group
usergroup:x:1003:
➜ sudo groupmod -n newusergroup usergroup
➜ sudo groupmod -g 520 usergroup
更新某用户所属的用户组:
方式一:切换到需要更新的用户,然后执行 newgrp [新用户组名]
# su tester
$ newgrp usergroup # 将当前用户属组更新为 usergroup
方式二:新建用户的同时就指定用户组
useradd -G usergroup -m tester
➜ cat /etc/passwd
tester:x:1001:1002::/home/tester:/bin/sh
字段格式说明:
[用户名]:口令(登录密码,不可见,使用x代替):用户标识号:用户组标识号:注释性描述:主目录:登录shell
登录口令: 把真正的加密后的哦那个和口令放到 /etc/shadow 文件中(密码已作加密处理),保证我们密码的安全性
/etc/passwd #这个文件中的每一行都代表着一个用户,我们可以从这里看出这个用户的主目录在哪里,可以看到该用户所属的用户组
/etc/group #用户组信息
/etc/shadow #用户密码信息
进程管理
1. 在Linux系统中,每一个程序都有自己的一个进程,每一个进程都有一个ID
2. 每一个进程都会有一个父进程
3. 进程可以有两种存在方式:前台运行 和 后台运行
4. 一般的话服务都是后台运行的,基本的程序都是前台运行的
ps # 查看当前系统中正在执行的各种进程信息(process status)
ps -a # 显示当前终端运行的所有进程信息
ps -u # 以用户的信息显示进程
ps -x # 显示后台运行进程的参数
ps -ef # 可以查看到父进程信息
ps -aux | grep mysql # 查看mysql相关的进程信息
pstree # 将所有进程以树状图显示(display a tree of processes)
pstree -p # 显示父进程ID
pstree -u # 显示用户组
pstree -pu # 显示用户组和父进程ID
kill -9 [pid] # 强制终止进程(9是固定参数)
| # 管道符,将上一个命令执行的结果作为下一条命令的输入
grep # 查找文件中符合条件的字符串
➜ ps -a
PID TTY TIME CMD
6416 pts/5 00:00:22 du
11659 pts/1 00:00:00 git
11660 pts/1 00:00:00 ssh
12786 pts/5 00:00:00 ps
18488 pts/1 00:00:00 sh
18493 pts/1 00:00:00 sh
18496 pts/1 00:01:20 node
18516 pts/1 00:00:48 node
18560 pts/1 00:00:07 node
18587 pts/1 00:19:20 node
18783 pts/1 00:00:04 node
18939 pts/1 00:02:35 node
20967 pts/1 00:00:02 node
➜ ps -aux | grep mysql
mysql 2995 0.0 0.0 2608 1704 ? S Feb28 0:00 /bin/sh /usr/bin/mysqld_safe
mysql 3146 0.4 10.5 2521124 426772 ? Sl Feb28 6:22 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --log-error=/var/log/mysql/error.log --pid-file=Huabo.pid
hhb 12637 0.0 0.0 8028 736 pts/5 R+ 23:22 0:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox mysql
NOTE: ps 一般与 grep 搭配使用,只需要关注特定的进程就可以了,过滤掉不需要的信息
➜ pstree
init─┬─init───mysqld_safe───mysqld───39*[{mysqld}]
├─2*[init───init───node───6*[{node}]]
├─init───init───sh───sh───sh───node─┬─node─┬─zsh─┬─du
│ │ │ └─pstree
│ │ ├─zsh
│ │ └─12*[{node}]
│ ├─node───12*[{node}]
│ ├─node─┬─git───ssh
│ │ ├─git
│ │ ├─node───10*[{node}]
│ │ ├─node───21*[{node}]
│ │ ├─node───6*[{node}]
│ │ └─12*[{node}]
│ └─10*[{node}]
└─2*[{init}]
nohub /root/test.sh &
nohub /root/test.sh > log.log 2>&1 &
解压缩
gz:
压缩:tar -zcvf test.tar.gz *.txt
解压:tar -zxvf test.tar.gz -C abc
bz:
压缩:tar -jcvg test.bz2 *.txt
解压:tar -zxvf test.bz2 -C abc
tar
find
locate
NOTE: Linux 系统中严格区分大小写
tar -zxvf test.tar.gz # 解压文件
磁盘管理
【磁盘管理】
df # 列出文件系统整体的磁盘使用量(disk free)
df -h # 以人类可读的方式显示磁盘使用量
du # 查看文件空间使用量(disk usage)
du -a # 查看所有文件空间占用量,包括隐藏文件
du -h # 以人类可读的方式显示查看文件空间使用量
du -sm /* # 检查根目录下每个目录所占用的容量
NOTE: du 会显示所有子文件,按需使用,不然会返回大量内容
➜ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda 263174212 11142428 238593628 5% /
none 2013672 4 2013668 1% /mnt/wsl
tools 123767236 115735204 8032032 94% /init
none 2011384 0 2011384 0% /dev
none 2013672 12 2013660 1% /run
none 2013672 0 2013672 0% /run/lock
none 2013672 0 2013672 0% /run/shm
none 2013672 0 2013672 0% /run/user
tmpfs 2013672 0 2013672 0% /sys/fs/cgroup
drivers 123767236 115735204 8032032 94% /usr/lib/wsl/drivers
lib 123767236 115735204 8032032 94% /usr/lib/wsl/lib
drvfs 123767236 115735204 8032032 94% /mnt/c
drvfs 123208700 105413632 17795068 86% /mnt/d
➜ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda 251G 11G 228G 5% /
none 2.0G 4.0K 2.0G 1% /mnt/wsl
tools 119G 111G 7.7G 94% /init
none 2.0G 0 2.0G 0% /dev
none 2.0G 12K 2.0G 1% /run
none 2.0G 0 2.0G 0% /run/lock
none 2.0G 0 2.0G 0% /run/shm
none 2.0G 0 2.0G 0% /run/user
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
drivers 119G 111G 7.7G 94% /usr/lib/wsl/drivers
lib 119G 111G 7.7G 94% /usr/lib/wsl/lib
drvfs 119G 111G 7.7G 94% /mnt/c
drvfs 118G 101G 17G 86% /mnt/d
Size : 当前文件大小
Used : 已使用的空间
Avail : 可用空间
Use% : 已使用空间占比
Mounted on: 挂载目录
➜ du -h
0 ./.pytest_cache/v/cache
0 ./.pytest_cache/v
0 ./.pytest_cache
20K ./linux
64K ./mysql
8.0K ./numpy
16K ./pandas/splits
100K ./pandas
8.0K ./python
0 ./target/source
0 ./target
0 ./test
200K .
man # 帮助命令
man df # 列出df命令的帮助文档
clear # 清屏
挂载&卸载
mount /dev/hhb /mnt/hhb # 将外部设备hhb挂载到 mnt 目录下来实现访问
umount -f /mnt/hhb # 强制卸载
find
find /test -name test.txt # 在/test目录下查找test.txt文件
find /test -name "*test*" # 在/test目录下查找名字中含有test的文件 - 模糊匹配搜索(*匹配任意字符)
find /test -name "test?" # 在/test目录下查找名字中以test开头且test后有三个字符的文件 - (?匹配单字符)
find /test -iname test # -iname 表示不区分大小写
1数据块 = 512字节 = 0.5k
100MB = 102400kb = 204800数据块
find / -size +204800 # 查找根目录下文件大小大于100M的文件 (+表示大于, - 表示小于, 不带符号表示等于)
find / -size +100M
find /home -user hhb # 查找/home目录下所属用户为 hhb 的所有文件
find /etc -cmin -5 # 在 /etc 目录下查找5分钟内被修改过属性的文件和目录(+表示大于, - 表示小于, 不带符号表示等于)
-amin # 访问时间 access
-cmin # 文件属性 change
-mmin # 文件内容 modify
find /etc -size +163840 -a -size -204800 # 在/etc目录下查找文件大小大于80M小于100M的文件
-a 两个条件同时满足(and)
-o 两个条件仅满足一个即可(or)
find /etc -type f # 根据文件类型查找
f - 文件
d - 目录
l - 链接
find /test -type f | xargs grep "keyword"
find . -name test.txt -exec ls -l {} \; # 在当前目录下查找test.txt文件并显示其详细信息({} 表示查询结果,\表示转义符,; 表示命令结束符号)
➜ find . -name test.txt -exec ls -l {} \;
-rwxrwxrwx 1 hhb hhb 18 Feb 28 21:23 ./test/test.txt
-rwxrwxrwx 1 hhb hhb 10 Feb 28 22:29 ./test.txt
-exec/-ok 命令 {} \; # 对搜索结果执行操作 (-ok 表示询问命令是否需要执行,在一些删除场景中可以二次确认,避免误删)
➜ find . -name test.txt
./test/test.txt
./test.txt
find . -inum 7881299348124667 # 查找i节点ID为7881299348124667的文件
find . -inum 7881299348124667 -exec rm {} \; # 查找i节点ID为7881299348124667的文件(有时候文件名包含特殊字符无法删除,可以使用这种方式来删除)
➜ find / -size +204800
/home/hhb/hhbdata/go1.16.7.linux-amd64.tar.gz
/home/hhb/.local/share/kite/kite-v2.20210128.0/lib/libtensorflow.so.1.15.0
/home/hhb/.local/share/kite/kite-v2.20210128.0/kited
/home/hhb/.local/share/kite/kite-v2.20210128.0/linux-unpacked/kite
locate # 在文件资料库中搜索文件,文件资料库定期更新,查找速度很快(/tmp 目录下的文件不在 locate 查找范围内,所有无法通过 locate 查找到)
updatedb # 更新文件资料库(新建一个文件后,需要执行该命令来更新文件资料库,才能通过 locate 查找到)
locate test.txt # 查找test.txt文件
locate -i test.txt # 忽略大小写查找
which # 搜索命令所在目录及别名信息
whereis # 搜索命令所在目录及帮助文档路径
cp
➜ which cp
/usr/bin/cp
➜ whereis cp
cp: /usr/bin/cp /mnt/d/Software/Dev/Git/usr/bin/cp.exe /usr/share/man/man1/cp.1.gz
grep
grep -iv [指定字符串] [文件路径] # 在文件中搜索字符串匹配的行并输出
grep -i # 不区分大小写
grep -v # 排除指定字符串
➜ grep hello test.txt
hello vim
ping
➜ ping www.baidu.com
PING www.a.shifen.com (180.101.49.11) 56(84) bytes of data.
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=1 ttl=50 time=32.0 ms
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=2 ttl=50 time=34.1 ms
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=3 ttl=50 time=37.1 ms
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=4 ttl=50 time=28.7 ms
ping -c 3 www.baidu.com # 指定ping次数
➜ learning ping -c 3 www.baidu.com
PING www.a.shifen.com (180.101.49.11) 56(84) bytes of data.
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=1 ttl=50 time=12.9 ms
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=2 ttl=50 time=24.8 ms
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=3 ttl=50 time=14.9 ms
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2064ms
rtt min/avg/max/mdev = 12.932/17.535/24.783/5.186 ms
NOTE:
丢包率(0% packet loss),丢包率越高,表示网络环境越差
ifconfig
➜ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.174.199 netmask 255.255.240.0 broadcast 172.17.175.255
inet6 fe80::215:5dff:fe7e:6a0 prefixlen 64 scopeid 0x20<link>
ether 00:15:5d:7e:06:a0 txqueuelen 1000 (Ethernet)
RX packets 23229 bytes 6617537 (6.6 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17111 bytes 6637700 (6.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 81431 bytes 91608162 (91.6 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 81431 bytes 91608162 (91.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
last # 列出目前与过去登入系统的用户登录时间信息
lastlog # 列出最后登录用户信息
lastlog -u 123 # 列出指定用户uid的最后登录信息
traceroute www.baidu.com # 显示数据包到主机间的路径,用于跟踪路由信息
netstat # 显示网络相关信息
netstat -tlunp | grep 80 # 查看本机监听的端口
netstat -an # 查看本机的所有网络连接
netstat -rn # 查看本机路由表
crontab
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
DEMO:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart # 每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart # 每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart # 每周六、周日的1 : 10重启apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart # 每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart # 每星期六的11 : 00 pm重启apache。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart # 每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart # 晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart # 每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart # 一月一号的4点重启apache
*/30 * * * * /usr/sbin/ntpdate 210.72.145.44 # 每半小时同步一下时间
压测常用命令
命令 | 使用场景 |
---|---|
top | 查看服务器资源占用 |
cat /proc/meminfo | 查看内存信息 |
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l | 查看CPU个数 |
cat /proc/cpuinfo | grep "cpu cores" | uniq | 查看单个cpu的物理核数 |
cat /proc/cpuinfo | grep "processor" | wc -l | 查看总逻辑核数 |
常用命令
halt # 关闭系统,等同于 shutdown -h now 和 poweroff
shutdown # 关机
shutdown -h 10 # 10分钟后关机
shutdown -h now # 现在关机
shutdown -h 20:25 # 系统会在 20:25 关机
shutdown -h +10 # 10分钟后关机
reboot # 重启
shutdown -r now # 立马重启
shutdown -r +10 # 10分钟后重启
ps -aux | grep redis
kill -9 {pid}
netstat -tunlp | grep 80
find . -name test.txt -exec ls -l {} \;
ps -aux | grep firefox | awk '{print $2}' | xargs kill -9
killall firefox
# 全局替换文件内的字符串
sed -i "/s/{search_string}/{replace_string}/g" test.txt