title: Linux基础
date: 2018-12-15 11:11:23
tags:
- 基础
categories:
- Linux
💠
💠 2025-06-03 11:29:27
RUNOOB.COM 各种技术学习 文档资源
新手的话 特别注意不要随意 root权限 直接更改配置文件,容易导致系统crash(除非你明确的知道这个更改操作的作用, 即使如此也需要先备份原文件)
在线Linux终端
有浏览器虚拟化,以及远程主机多种类型的实现
安装和启动Linux
Ventoy
无需烧录,复制ISO进U盘即可使用
GNU GRUB GRand Unified Bootloader
set prefix=(hd0,msdos7)/grub
insmod normal
normal
sudo adduser test1
useradd
只新建用户不会创建对应的主目录sudo deluser username --remove-home
su
su -l username
当前用户的环境下登录用户(当成一个程序一样可以退出登录)sudo su -
相比于 sudo su 会加载root用户环境变量,切换到HOME工作目录su & su -
passwd
passwd user
echo "root:caishi" | chpasswd
如果是普通用户就是 sudo chpasswdusermod
verb | long verb | comment |
---|---|---|
-d | --home HOME_DIR | 用户的新主目录 |
-e | --expiredate EXPIRE_DATE | 设定帐户过期的日期为 EXPIRE_DATE |
-f | --inactive INACTIVE | 过期 INACTIVE 天数后,设定密码为失效状态 |
-g | --gid GROUP | 强制使用 GROUP 为新主组 |
-G | --groups GROUPS | 新的附加组列表 GROUPS |
-a | --append GROUP | 将用户追加至上边 -G 中提到的附加组中,并不从其它组中删除此用 |
-l | --login LOGIN | 新的登录名称 |
-L | --lock | 锁定用户账号 |
-m | --move-home | 将家目录内容移至新位置 (仅于 -d 一起使用) |
-p | --password PASSWORD | 将加密过的密码 (PASSWORD) 设为新密码 |
-R | --root CHROOT_DIR | chroot 到的目录 |
-s | --shell SHELL | 该用户账号的新登录 shell |
-U | --unlock | 解锁用户账号 |
less /etc/passwd
查看全部用户及其用户组passwd 选项 用户名
更改口令(密码)
-l 锁定口令,禁用账号
-u 口令解锁
-d 账号无口令
-f 强迫用户下次登录时修改口令
passwd
就是修改当前用户口令 超级用户就可以命令后接用户名,修改任意用户visudo
注:visodo 是编辑 /etc/sudoers 的命令;也可以不用这个命令,直接用vi 来编辑 /etc/sudoers 的效果是一样的;who /var/log/wtmp
查看登录记录/etc/security/faillock.conf
deny 输错密码次数锁定,unlock_time 锁定的时长单位秒添加用户组 groupadd
-g GID
指定新用户组的组标识号GID-o
一般和g共用 表示新用户组的GID可以与系统已有用户组的GID相同。显示用户所在组 groups [user]
缺省是当前用户, 或输出指定用户的用户组
修改用户组 sudo usermod -G 用户组 用户
删除用户组 groupdel
groupmod 选项 用户组
gpasswd -a user group
grpck 检查 /etc/group
文件是否正确
grpconv 注:通过/etc/group和/etc/gshadow 的文件内容来同步或创建/etc/gshadow ,如果/etc/gshadow 不存在则创建;
注:通过/etc/group 和/etc/gshadow 文件内容来同步或创建/etc/group ,然后删除gshadow文件
添加用户 test1 到sudo组 注意: 将用户加入sudo组,debian系有效 alpine和arch无效 只能改文件
包括当用户执行sudo命令,输入正确密码,仍提示不正确,切root用户改了密码也是提示不正确,这个时候也需要检查是否在sudoers配置文件中有这个用户,虽然不知道为什么这个配置就消失了。。
sudo gpasswd -a test1 sudo
或 usermod -G sudo test1
chmod 777 /etc/sudoers
然后直接 sudo visudo
就是调用vi来打开文件的简写test1 ALL=(ALL:ALL)ALL
注意 Centos:test1 ALL=(ALL) ALL
test1 ALL=(ALL) NOPASSWD: ALL
chmod 440 /etc/sudoers
绝对路径执行shell报错无权限
环境: a 和 b 用户都属于用户组 b 。当前工作目录是 /home/b/app/ 现象:
方案: 逐级排查shell所有父目录对于 sudo指定用户
是否有执行权限
sudo: 没有终端存在,且未指定 askpass 程序
通常Linux平台的终端模拟器新建tab时都是新建 pty, 但是Mac平台上则是新建tty
ibraheemdev/modern-unix
现代工具合集
cli · GitHub TopicsGithub 终端工具合集
Making Terminal Applications in Rust with Termion
Terminals Are Sexy
录制终端
切换配色方案
终端可视化监控面板
Web页面提供远程服务器的终端能力
列举出系统可安装终端
- Debian:
sudo apt search terminal | grep -E terminal.+amd64
- Arch:
yay terminal
- Github Topic: terminal-emulator
终端可参考功能点: 终端透明化,终端背景图,快捷键设置,终端内颜色自定义,下拉式,标签水平垂直拆分,鼠标键盘交互性,资源占用少 终极工具 Tmux 可以摆脱终端模拟器的对比和选择,选择最简单省资源的模拟器即可
终端 | 优点 | 缺点 | 备注 |
---|---|---|---|
xiki |
鼠标和键盘高度交互 交互性和复杂度比较高 |
||
qterminal |
设置设计清晰,功能完备 | 终端内容显示兼容性略有问题 资源消耗中等 | |
xfce4-terminal |
配合Xfce启动快,资源消耗少 | 配置繁琐 | |
gnome-terminal |
简洁 资源消耗少 | 多标签时,标签栏太大,标签页底部有白边;无法透明化 | 鼠标中键无法复制时需安装 parcellite
|
mate-terminal |
标签栏更简洁,和 gnome-terminal 一致 |
||
sakura |
外观上和前两个几乎一样,标签页可以更简洁 | 配置复杂 繁琐 | |
deepin-terminal |
功能很多,主题很多,功能最为强大 | 字体仅可选择内置不可自定义 | |
tilda |
内嵌于桌面上, 小命令方便 | 需要查看文件时不方便 | |
terminology |
样式高度自定义 |
备注 sakura xfce4-terminal 快捷键配置
~/.config/xfce4/terminal/accels.scm
Gtk3起 不支持所谓的鼠标悬浮改快捷键
(gtk_accel_path "<Actions>/terminal-window/copy" "<Primary>c")
(gtk_accel_path "<Actions>/terminal-window/paste" "<Primary>v")
现代终端
Manjaro Xfce 使用 sixel: 使用 mlterm 或者 konsole 终端模拟器,不支持 xfce4-terminal
ImageMagick
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
blue='\033[0;34m'
purple='\033[0;35m'
cyan='\033[0;36m'
white='\033[0;37m'
default='\033[0m'
256 color
# 测试 terminal 是否支持 256
for i in {0..255} ; do
printf "\x1b[48;5;%sm%3d\e[0m " "$i" "$i"
if (( i == 15 )) || (( i > 15 )) && (( (i-15) % 6 == 0 )); then
printf "\n";
fi
done
Gihub: LS_COLORScustomize bash prompt
curl https://raw.githubusercontent.com/trapd00r/LS_COLORS/master/LS_COLORS -o /etc/lscolor-256color
*sh.rc
if [[ ("$TERM" = *256color || "$TERM" = screen* || "$TERM" = xterm* ) && -f /etc/lscolor-256color ]]; then
eval $(dircolors -b /etc/lscolor-256color)
else
eval $(dircolors)
fi
鼠标中键
粘贴鼠标左键已选择的文本 VSCode中也适用
!num
history 中第 num 条命令!!
上一条命令ls !$
执行命令ls,并以上一条命令的参数为其参数!?string?
执行含有string字符串的最新命令Ctrl L
清屏等价于clear,清除所有这个 shell 提示屏幕中显示的数据。 Mysql也适用
reset
刷新 shell 提示屏幕。如果字符不清晰或乱码的话,在 shell 提示下键入这个命令会刷新屏幕。Ctrl ;
显示最近五条剪贴板内容但是deepin是F1为图形化
Delete
Controller | Key | comment |
---|---|---|
Ctrl | D | 删除光标后字符,等价于Delete键(命令行若无任何字符,则相当于exit;处理 多行标准输入时也表示EOF) |
Ctrl | H | 退格删除一个字符,相当于通常的Backspace键 |
Ctrl | U | 删除光标之前到 行首 的字符 (Zsh中是删除整行) |
Esc | W | 删除光标之前到 行首 的字符 |
Ctrl | K | 删除光标之前到 行尾 的字符 |
Ctrl | W | 删除光标之前的一个单词 |
Alt | D | 删除光标之后的一个单词 |
Ctrl | Y | 粘贴上次删除的所有字符 |
Ctrl | _ | 撤销修改 等价于 Ctrl x u
|
Convert
Controller | Key | comment |
---|---|---|
Ctrl | T | 互换当前字符,光标后移 |
Alt | T | 互换当前单词与前一个单词,光标后移 等价于 Esc T
|
Alt | D | 将当前单词全部转为大写,光标后移 |
Alt | C | 将当前单词首字母转为大写,光标后移 |
Alt | L | 将当前单词全部转为小写,光标后移(zsh无效) |
Jump
Controller | Key | comment |
---|---|---|
Ctrl | C | 取消运行当前行输入的命令,相当于Ctrl + Break |
Ctrl | A | 光标移动到行首(Ahead of line),相当于通常的Home键 |
Ctrl | E | 光标移动到行尾(End of line) |
Ctrl | F | 光标向前(Forward)移动一个字符位置 |
Ctrl | B | 光标往回(Backward)移动一个字符位置 |
Alt | F | 光标向前(Forward)移动一个单词位置 |
Alt | B | 光标往回(Backward)移动一个单词位置 |
Esc | F | 光标向前(Forward)移动到当前单词的头部 |
Esc | B | 光标往回(Backward)移动到当前单词的尾部 |
Search
Controller | Key | comment |
---|---|---|
Ctrl | P | 调出命令历史中的前一条(Previous)命令,相当于通常的上箭头 |
Ctrl | N | 调出命令历史中的下一条(Next)命令,相当于通常的下箭头 |
Ctrl | O | 运行上翻下翻出来的命令, 并且自动将下一条命令填入 |
Ctrl | R | 向上搜索相关命令(reverse-i-search)继续按 Ctrl R 则继续搜索上一条 |
Ctrl | S | 与 Ctrl R 类似, 但是是向下搜索 |
Control
Controller | Key | comment |
---|---|---|
Ctrl | Z | 暂停程序 |
Ctrl | S | 停止回显当前Shell |
Ctrl | Q | 恢复回显当前Shell |
.zshenv → [.zprofile if login] → [.zshrc if interactive] → [.zlogin if login] → [.zlogout sometimes].
Bash 环境变量加载顺序
alpine 里的sh和ash 默认是不登录shell 需要使用 sh -l 或者 ash -l 才会加载对应的文件
进程是由多个线程(至少有一个)以及持有资源的组合体, 线程可以理解为进程的执行单元
参考 深入理解计算机系统 书籍
cat /proc/sys/kernel/pid_max
参考: linux常见进程与内核线程
0 1 2 等内核进程
进程通信的一种标准化的方式
/bin/kill -L 可查看所有信号量
1 HUP 2 INT 3 QUIT 4 ILL 5 TRAP 6 ABRT 7 BUS
8 FPE 9 KILL 10 USR1 11 SEGV 12 USR2 13 PIPE 14 ALRM
15 TERM 16 STKFLT 17 CHLD 18 CONT 19 STOP 20 TSTP 21 TTIN
22 TTOU 23 URG 24 XCPU 25 XFSZ 26 VTALRM 27 PROF 28 WINCH
29 POLL 30 PWR 31 SYS
编号为 1 ~ 31
的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为 32 ~ 63
的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,只是负责发送, 不负责存储和接收, 可能会造成信号丢失,而后者不会。
常用信号
Linux内核的信号量用来操作系统进程间同步访问共享资源
信号量在创建时需要设置一个初始值,表示同时可以有几个任务可以访问该信号量保护的共享资源,当初始值为1时就变作互斥锁(Mutex),即同时只能有一个任务可以访问信号量保护的共享资源。
PV操作由P操作原语和V操作原语组成(原语是指不可中断的过程)
PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥。PV操作属于进程的低级通信
使用PV操作实现进程互斥时应该注意的是:
每个程序中用户实现互斥的P、V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区。若有多个分支,要认真检查其成对性
P、V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环
互斥信号量的初值一般为1
一个父进程退出,而它的子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
注意, 也有意外, 并不总是被 init 进程收养 Ubuntu15.04 删除/sbin/upstart与孤儿进程收养的问题
一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中, 这种进程称之为僵死进程。 因为直到父进程结束后, 该僵死子进程会成为孤儿进程且是僵死进程, 会被 init 收养, 从而被回收, 但是如果父进程一直没有结束, 僵死子进程会一直存在
常规解决方案 Github: 代码示例
处理信号
: 子进程退出时向父进程发送SIGCHILD信号,父进程处理SIGCHILD信号。在信号处理函数中调用wait进行处理僵死进程。fork两次
: 原理是将子进程成为孤儿进程,从而其的父进程变为init进程,通过init进程可以处理僵死进程。暴力方案: 直接 kill 掉父进程, 父进程和僵死状态的子进程就一起被回收了
wikipedia: File descriptor
参考: Linux下 文件描述符(fd)与 文件指针(FILE*)
每一个进程在PCB(Process Control Block)即进程控制块中都保存着一分文件描述符表.
文件描述符就是这个表的索引文件,描述符表中每个表项都有一个指向已打开文件的指针。现在我们明确一下:已打开的文件在内核中用file结构体表示,文件描述符表中的指针指向file结构体。
FD方式管理的范畴
问题
无法查看创建时间
,但是/proc/pid的目录时间是对的
ulimit -s
ps -T pid
cat /proc/sys/kernel/threads-max
默认值 256287/usr/sbin/ntpdate -q cn.pool.ntp.org
查看差异时间同步
cp -y /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
/usr/sbin/ntpdate -u cn.pool.ntp.org
| 没有就先安装 ntpdate
hwclock -r
hwclock -w
因为系统重启后用硬件时间初始化的
同步时间 扩展
chrony 比 ntpupdate 功能更多,可定时同步时间
服务器领域 ntpd 会更合适,因为 ntpupdate是立刻修改时钟 会带来时钟跃变的问题,但是ntpd是将误差的时间在一段时间内平缓的调整。Linux 时间同步服务 -- ntp 和 chrony
自动同步时间
vim /etc/rc.d/rc.local
/usr/sbin/ntpdate -u cn.pool.ntp.org> /dev/null 2>&1; /sbin/hwclock -w
crontab -e
00 10 * * * root /usr/sbin/ntpdate -u cn.pool.ntp.org > /dev/null 2>&1; /sbin/hwclock -w
实际上服务注册在了 /etc/systemd/system/ 目录下的 serviceName.service 文件
command | 作用 |
---|---|
start/stop | 启动/停止服务 |
enable/disable | 开机启用/禁用 |
restart | 如果服务在运行中,则重启服务,若不在运行中,则将会启动 |
try-restart | 只在服务已存在运行的状态下启动服务 |
reload | 重新加载配置文件 |
edit | 修改服务配置 |
status | 查看运行状态 |
系统电源管理
systemctl 命令 | 作用 |
---|---|
systemctl poweroff | 关闭系统 |
systemctl reboot | 重启系统 |
systemctl suspend | 进入待机模式 |
systemctl hibernate | 进入休眠模式 |
systemctl hybrid-sleep | 进入混合休眠模式 |
/etc/init.d/ 是服务的存放目录
service --status-all
service ssh start/stop
sudo update-rc.d -f mysql remove
sudo update-rc.d mysql defaults
update-rc.d mysql defaults 90
数字越小, 启动顺序越前系统运行级别
0 系统停机状态
1 单用户或系统维护状态
2~5 多用户状态
6 重新启动
lspci
more /proc/meminfo
df -l
查看某进程limit状态 cat /proc/xxxpid/limits
执行ulimit修改命令只对当前终端(tty)生效
持久化修改设置: /etc/security/limits.conf 文件中添加,注销或重启后生效
* soft nofile 4096
* hard nofile 4096
查看CPU信息:more /proc/cpuinfo
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
cat /proc/cpuinfo | grep "cpu cores"
cat /proc/cpuinfo | grep "processor" | wc -l
Usage 和 Load 的区别, 使用率针对于Cpu 时间,负载针对于等待和进行中的线程
使用uptime、top或者 cat /proc/loadavg
都可以看到CPU的load 1 5 15 分钟的负载。
运行进程
和正在等待CPU
的进程,状态为R
注意: 一个逻辑核且负载为1时表示有线程一直在等待或运行(满载),四个逻辑核且负载为4时表示四个核心都一直有线程在等待或运行(满载)
lscpu 展示CPU信息
taskset 将任务绑定在指定cpu核心上
taskset -c 0,1,2,3,4 command
对于Linux来说, 有内存就去分配使用, 只有内存不够申请的大小,才会去释放 buffer或cache, 对于服务器来说, 交换内存会带来性能的明显下降 一般是不会配置的
内存组成
空闲内存, 已使用, buffers, cached
Virtual Memory 虚拟内存
Resident Memory 持久内存
Shared Memory 共享内存(多进程间共享)
查看内存大页设置 cat /sys/kernel/mm/transparent_hugepage/enabled
关闭内存大页 echo never > /sys/kernel/mm/transparent_hugepage/enabled
Linux下允许程序申请比系统可用内存更多的内存,这个特性叫Overcommit。
这样做是出于优化系统考虑,因为不是所有的程序申请了内存就立刻使用的,当你使用的时候说不定系统已经回收了一些资源了。
不幸的是,当你用到这个Overcommit给你的内存的时候,系统还没有空闲内存的资源的话,OOM killer就跳出来了。
内核参数: vm.overcommit_memory
cat /proc/meminfo | grep commit
oom-killer
当操作系统认为内存不足时,会选择分数值较高的进程kill掉(用户进程,非内核进程)
内核参数
深入了解Linux OOM Killer:一次可怕的内核事件-腾讯云开发者社区-腾讯云
OOM相关参数配置与原因排查_Huawei Cloud EulerOS_华为云
Kubernetes 触发 OOMKilled(内存杀手)如何排除故障-腾讯云开发者社区-腾讯云
Alibaba Cloud Linux出现OOM Killer强制释放进程占用内存的原因及解决方案_Alibaba Cloud Linux(Alinux)-阿里云帮助中心
很重要的设计,隔离了物理内存,降低应用端负担。
参考: What does Virtual memory size in top mean?
参考: The Right Way to Monitor Virtual Memory on Linux
swapon, swapoff - enable/disable devices and files for paging and swapping
sudo sysctl vm.swappiness=15
临时修改重启注销失效, 查看:cat /proc/sys/vm/swappiness
/etc/sysctl.conf
文件中设置开始使用交换分区的触发值: vm.swappiness=10
10%
才会开始使用交换分区建议,笔记本的硬盘低于 7200 转的不要设置太高的交换分区使用,会大大影响性能,因为交换分区就是在硬盘上,频繁的交换数据
交换内存分析 VIRT = SWAP + RES or equal SWAP = VIRT - RES
grep -i VmSwap /proc/*/status
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less
smem
Report memory usage with shared memory divided proportionally清空交换内存
sudo swapoff 交换分区文件
sudo swapon 交换分区文件
swapoff -a && swapon -a
/etc/fstab
中配置注意: 读 cache 写 buffer, 设计是为了提高读写效率,如果内存不足时可以考虑释放这部分内存,但是也会带来读写缓存失效重新读磁盘的性能问题,需慎重考虑。
参考: 如何在 Linux 中清除缓存(Cache)?
注意要切换到root再运行命令
参考: Linux 内存中的Cache,真的能被回收么?
silenceshell/hcache: showing top X biggest cache files global
按进程查看cache和buff使用量
设置值 sync; echo 1 > /proc/sys/vm/drop_caches
设置值 | 作用 |
---|---|
1 | 仅清除 page cache |
2 | 表示清除回收 slab 分配器中的对象(包括目录项缓存和 inode 缓存) |
3 | 表示清除 page cache 和 slab 分配器中的缓存对象 |
注意sync命令是为了将内存中buffer写入磁盘,避免这部分内存被直接释放导致数据不一致
glibc, musl, jemalloc, System Alloc 等等实现
Optimizing Rust Binaries: Observation of Musl versus Glibc and Jemalloc versus System Alloc
glibc本身是C的实现,封装了系统调用,大部分Linux发行版的默认内存管理都是glibc中的malloc 一篇文章彻底讲懂malloc的实现(ptmalloc) - yooooooo - 博客园
查看glibc 版本 ldd --version
注意 ptmalloc 来源 dlmalloc,不支持多线程,使用全局锁来对一个arena分配, ptmalloc2 改进支持多线程,引入 thread arena。glibc2.11开始支持
Malloc per-thread arenas in glibc
Understanding glibc malloc – sploitF-U-N
深入理解glibc malloc | BruceFan's Blog
glibc 对具有大量并发线程的程序进行了优化,通过避免竞争来提升吞吐量。而竞争规避是通过为每一个核来维护一个内存池实现的。
这种优化方式的本质是:操作系统会为给定的进程捕获(抢占)内存,每个内存块的大小为 64MB,这样的内存块被叫做 thread arena
当一个线程需要分配内存时,先找当前核最近使用的内存池分配,如果锁定失败或者不够连续内存用于分配申请的大小,则找池内其他arena,否则新建一个(看起来像JVM垃圾回收领域的碎片问题)。
该设计是为了在高并发的场景申请内存时直接从Arena内存申请,而不需要再通过 mmap sbrk等系统调用,并且为了降低多线程申请时的竞争,会最多创建cpucore*8个Arena,此类可以称为 thread arena ,进程只有一个 main arena 作为兜底空间
thread arena 的最大数量:32位系统是 2倍CPU,64位是8倍CPU。 即 10核CPU的系统,理论上最大会占用 10 X 8 X 64 Mib
pmap -x $pid | sort -nrk 3 | grep -E '[0-9]+' | grep 'anon' | awk '{print $3}' | awk '{sum+=$1}; END {print sum}'
MALLOC_ARENA_MAX=1 与 MALLOC_ARENA_MAX=4有什么区别? | easyice极端情况下设置了MAX也不生效,需设置为1直接关闭thread arena
高并发场景下,存在很多生命周期比较长的对象,如果这些对象能够及时释放,虽然进程可能会在短时间创建许多 thread arena,但实际上并不占据 RES,所以根本问题还是那些具有长生命周期的对象
当只使用 main arena 的情况下,虽然具有长生命周期的对象不变,但是内存池中的空间被重用的几率比多个 thread arena 更高,进程占据的的 RES 要相对少一些
注意: 这里只是为了降低虚拟内存申请的块,实际物理内存高导致pod被kill, 不是glibc的问题,根本问题不在glibc
Java in K8s: how we’ve reduced memory usage without changing any code | by Mickael Jeanroy | malt-engineering如何理解
优化方案:
java -Djava.library.path=/path/to/jemalloc -jar YourApplication.jar
export MALLOC_ARENA_MAX=4
一般建议不要超过 CPU 核心数的 4 倍, glib2.12以下可能该变量无效
当Java虚拟机遇上Linux Arena内存池_禁用per thread arenas-CSDN博客
Arena "leak" in glibc
jemalloc/jemalloc
为什么说jemalloc比系统带的malloc快,怎么写个简单的测试程序来证明? - 知乎
Change skip list P value to 1/e, which improves search times by sean-public · Pull Request #3889 · redis/redis
# Java 应用替换 jemalloc
export LD_PRELOAD=/usr/lib/libjemalloc.so
export MALLOC_CONF="background_thread:true,metadata_thp:auto,dirty_decay_ms:30000,muzzy_decay_ms:30000"
java -jar xxx.jar
google/tcmalloc
Alpine发行版所使用
从一次 CTF 出题谈 musl libc 堆漏洞利用本文通过一道 CTF 题目展示 musl libc 堆溢出漏洞的利 - 掘金
目前 Linux 大多采用 ext4, Btrfs
Btrfs 的快照功能很适合 Arch 系统,滚动更新挂掉的话可以通过历史快照恢复回来
gnome mutter
设计的桌面环境,小bug略多,而且渲染会占用较多资源,容易卡顿,但是美观操作方便
dde-kwin
,流畅了一些,但是窗口顶部有个大的Title 隐藏Deppin大标题栏
有单窗口,双列,命令,简洁轻量,笨重完整 各种各样的选择
nautilus
Gnome默认 挺好用,但是不能自动挂载分区deepin-filemanager
deepin默认,较为方便,但是打开手机会卡根本打不开pcmanfm
左边侧栏目录树 会同步nautilus的配置rox-filer
特别小,单击打开,迅速定位文件,适合找东西用thunar
解决了nautilus的缺点,内存也很省dolphin
多标签页,目录树方式查看nemo
mint默认的,功能齐全,会同步nautilus的配置,同样有目录树而且是两边都有tuxcmd
Tux Commander 双列,小,直接的目录树,学习成本高点ranger
命令行内文件浏览和操作简单来说类似于Windows平台的Exe,一个文件就是一个应用程序,通过静态链接和低版本系统打包来解决各发行版的兼容问题。
只能从Ubuntu公司私有运营的商店下载软件,且apt安装部分软件时会替换为snap安装,因此被抨击背离Linux文化。 snap应用都是整个打成压缩包并且将每个软件单独挂载在只读的squashfs格式的分区下,应用启动时解压再执行
man help 后接使用的命令,就可以得到用户手册和帮助文档
&&
第2条命令只有在第1条命令成功执行之后才执行 根据命令产生的退出码判断是否执行成功(0成功,非0失败)
||
执行不成功(产生了一个非0的退出码)时,才执行后面的命令
;
顺序执行多条命令,当;号前的命令执行完(不管是否执行成功),才执行;后的命令。
&
并行执行命令,没有顺序
Centos上which并不是命令, 而是别名!
which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
运行的命令不因 用户注销,网络中断等因素而中断 nohup, disown, screen, setid
(command &)
示例
nohup
就能屏蔽hup信号,标准输出会输出到当前目录下的nohup.out文件. nohup 命令 &
nohup 命令>/dev/null 2>&1
(dde-file-manager . &) >/dev/null 2>&1
1 -> /dev/pts/10 (deleted)
strace -e write -p pid
(但局限于echo printf pwd等命令的输出,其他命令的输出不会被trace)sudo hostname linux
重启终端即可看到修改sudo gedit /etc/hostname
也许需要更改 /etc/hosts
hostname -F /etc/hostname
xdg-open 命令
机器的环境中充满了各种各样的噪声,如硬件设备发生中断的时间,用户点击鼠标的时间间隔等是完全随机的,事先无法预测,以此作为熵池来源。
查看当前熵池大小 cat /proc/sys/kernel/random/entropy_avail 熵池最大值 cat /proc/sys/kernel/random/poolsize
当熵池不够时,会导致 gpg tomcat 等应用出现阻塞
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )