aliases:
- Unix
手册,而非教程。
Debian、Ubuntu、Fedora、CentOS、Arch Linux
scp -r yolo b19220422@223.2.27.225:/home/b19220422/projects
bhosts -gpu
bsub <lsf.sh
bkill
kill
htop
#联网
curl -d "username=你的校园网账号&password=你的密码" "http://192.168.16.20:80/portal_io/login"
su poweroff
ping mirrors.tuna.tsinghua.edu.cn -c 4 // To test that you can obtain an IPv6 address.
ping www.baidu.com -c 4
bash -c 'echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse" > /etc/apt/sources.list'
su - # we still need to switch to the root account first
adduser username sudo # change `username` to your user name
exit
whoami
sudo whoami
sudo !! #以root用户执行上一条命令
Ubuntu Debian、Arch Linux、Fedora、Kaili Linux、openSUSE、Red Hat、Rocky
more less WSL npm Node.js Shell rpm deb snap tee objdump make ping df fdisk wget curl iconv strace stat
文件管理:cd pwd mkdir rmdir ls cp rm mv tar man
tar
unar
lsar
rar
unrar
p7zip-full
系统监控 - jobs
, ps
, top
, kill
, free
, dmesg
, lsof
dpkg .deb
~ == $HOME
任务管理
<C-Z>
&
bg jobs
-p
-l
fg %1
ps aux
top
htop
kill -9 xxxxx
lsof -p 进程号
ls
alias ll = ls -l
ls -a
ls -l -a
man
man -k printf
man 3 printf
man 3 freopen
mkdir
mkdir -p , --parents
vim `which ls`
find
find . grep '\.c$\|\.h$' | xargs wc -l //统计一个目录中(包含子目录)中的代码行数
ps
ps
仅显示本终端中运行的相关进程ps aux
显示所有进程htop
K
显示内核进程PRI = nice + 20
<0
RT
renice -n 10 vim
renice -n 10 -p 12345
tmux
<^B>
:set -g mouse on
此时如何复制文本?
按下shift后再选中
快捷键(需先按下 Ctrl + B) | 功能 |
---|---|
% | 左右分屏 |
" | 上下分屏 |
↑ ↓ ← → | 焦点切换为上、下、左、右侧 pane,正在交互的 pane 被绿色框选中。 |
d (detach) | 从 tmux 中脱离,回到命令行界面 |
z (zoom) | 将 pane 暂时全屏,再按一次恢复原状 |
c | 新建窗口 |
, | 为窗口命名 |
s | 列出所有 session |
~/.tmux.conf
编辑后tmux source ~/.tmux.conf
重载配置set -g prefix C-a # 设置前缀按键 Ctrl + A。
unbind C-b # 取消 Ctrl + B 快捷键。
bind C-a send-prefix # 第二次按下 Ctrl + A 为向 shell 发送 Ctrl + A。
# (Shell 中 Ctrl + A 表示光标移动到最前端)。
set -g mouse on # 启动鼠标操作模式,随后可以鼠标拖动边界进行面板大小调整。
unbind -n MouseDrag1Pane
unbind -Tcopy-mode MouseDrag1Pane
unbind '"' # 使用 - 代表横向分割。
bind - splitw -v -c '#{pane_current_path}' # -v 代表新建的面板使用全部的宽度,效果即为横向分割(或者说,切割得到的新的面板在竖直方向 (vertical) 排列)。
unbind % # 使用 \ 代表纵向分割(因为我不想按 Shift)。
bind \\ splitw -h -c '#{pane_current_path}' # -h 则代表新建的面板使用全部的高度,效果即为纵向分割(切割得到的新的面板在水平方向 (horizontal) 排列)。
setw -g mode-keys vi # 设置 copy-mode 快捷键模式为 vi。
gdb
systemctl
$ systemctl start jupyter
$ systemctl stop jupyter
$ systemctl enable jupyter # enable 表示标记服务的开机自动启动
$ systemctl disable jupyter # 取消自启
at
crontab
yum
/etc/hostname
sudo passwd
scp /Users/mac_pc/Desktop/test.png root@192.168.1.1:/root
vim /etc/ssh/sshd_config
+ TCPKeepAlive yes
- ClientAliveInterval 0
+ ClientAliveInterval 300 秒
+ ClientAliveCountMax 3
//重启sshd服务:
service sshd restart
# add user
sudo useradd -m szy
sudo passwd szy
visudo
sudo
的配置存储在 /etc/sudoers
文件中,仅 root
用户有权查看和修改。不要直接修改此文件。对这个文件的任何修改,都应该使用 visudo
这个命令去做。
sudo vi /etc/sudoers
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
sudo vi /etc/passwd
# delete user
sudo userdel -r aaa
# 以另一个用户的身份登录
su -l [other_user_name]
# 以其他用户身份执行特定命令
su -c [command] [other_user_name]
# 以相同的环境中不同的用户
su -p [other_user_name]
brew
bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
usrmerge
chmod
chmod +x a.out
chown
sudo chown newowner:newgroup ustc101
/etc/shadow
find . |grep '\.c$\|\.h$' | xargs wc -l
du -sc /usr/share/* | sort -nr |more
vimdiff file1 file2
diff file1 file2
md5sum file1 file2
find . -name "*.[ch]" | xargs cat | grep "^#include" | sort | uniq
watch -t -n 1 "echo -n '现在是:';date"
seq 1 10 | shuf
seq 1 10 | shuf | head -n 1
while [[ `seq 1 10 | shuf | head -n 1` != "1" ]];do echo "retry";done
watch -n 1 "cat /proc/cpuinfo | grep MHz | awk '{print \$1 NR \$3 \$4 \$2}'"
find . -name "*.pdf" | xargs tar cj | ssh yzh@192.168.1.1 'cd ysyx; > pdf.tar.bz2'
echo $PATH | tr -t : '\n' | xargs -I{} find {} -maxdepth 1 -type f -executable | \ [](https://ysyx.oscc.cc/slides/2306/02.html#cb18-2)xargs file -b -e elf | sort | uniq -c | sort -nr
sudo systemctl set-default multi-user.target //关
sudo reboot
sudo systemctl set-default graphical.target。//开
sudo reboot
tgpt "我通过ssh远程到了我的服务器中,当我在客户端中运行xedit时,系统提醒我szy@240124 ~/O/minimal> xedit Error: Can't open display:,我应该如何配置使得我可以在windows客户端打开图形化窗口?"
要在Windows客户端通过SSH远程连接到Linux服务器并打开图形化窗口,你需要 使用X1转发。X1转发允许你在远程服务器上运行的图形应用
程序在本地Windows客户端上显示。以下是配置步骤:
ssh -X user@your_server_ip
或者,如果你使用的是PuTY,你需要在PuTY的配置中启用X1转发。
4. 运行图形应用程序:现在,你应该能够在远程服务器上运行图形应用程 序,并在Windows客户端上看到它们的窗口。
如果你在执行这些步骤时遇到问题,可能需要检查以下几点:
进程间通信机制。由于进程之间不共享内存空间,也就无法直接发送信息,必须要操作系统帮忙,于是信号机制就产生了。
信号 man 7 signal
“Pasted image 20240201233227.png” could not be found.
ping localhost
ps
kill
pgrep
/ pkill
killall
killall5
xkill
nohup
不被SIGHUP影响kill -l
显示所有信号名称man builtins
type 命令名
$ tmux new -s session-a # 启动名为 session-a 的 tmux 会话
$ tmux a -t session-a 再进入这个会话
进程属性 | 意义/目的 |
---|---|
PID | Process ID,标识进程的唯一性。 |
PPID | Parent PID,标识进程父子关系。 |
PGID | Process Group ID,标识共同完成一个任务的整体。 |
TPGID | 标识一组会话中处于前台(与用户交流)的进程(组)。 |
SID | Session ID,标识一组会话,传统意义上标识一次登录所做的任务的集合,如果是与具体登录无关的进程,其 SID 被重置。 |
fork()
setsid()
SysRq
cat /proc/sys/kernel/sysrq
状态 | 缩写表示 | 说明 |
---|---|---|
Running | R | 正在运行/可以立刻运行 |
Sleeping | S | 可以被中断的睡眠 |
Disk Sleep | D | 不可被中断的睡眠 |
Traced / Stopped | T | 被跟踪/被挂起的进程 |
Zombie | Z | 僵尸进程 |
journalctl
查看日志。journalctl
的 -u
参数可以指定 unit,$ sudo journalctl -u ssh # 查看 ssh 服务的日志
$ sudo journalctl -u ssh -f
$ sudo journalctl -f
/etc/shadow
里面,只有下文提到的根用户可以访问与修改。我们知道,root
用户可以对系统做极其危险的操作。当使用 root
权限执行命令时(如使用 sudo
),一定要小心、谨慎,理解命令的含义之后再按下回车。请不要复制网络上所谓的「Linux 优化命令」等,以 root
权限执行,否则可能会带来灾难性的后果。
以下是一些会对系统带来毁灭性破坏的例子。 再重复一遍,不要执行下面的命令!
rm -rf /
(删除系统中的所有可以删除的文件,包括被挂载的其他分区。即使不以 root
权限执行,也可以删掉自己的所有文件。)mkfs.ext4 /dev/sda
(将系统的第一块硬盘直接格式化为 ext4 文件系统。这会破坏其上所有的文件。)dd if=/dev/urandom of=/dev/sda
(对系统的第一块硬盘直接写入伪随机数。这会破坏其上所有的文件,并且找回文件的可能性降低。):(){ :|: & };:
(被称为「Fork 炸弹」,会消耗系统所有的资源。在未对进程资源作限制的情况下,只能通过重启系统解决,所有未保存的数据会丢失。)sudo !!
以sudo
执行上一条命令
setui
setgid
sticky
ELF 二进制文件,开头的十六进制是 7F 45 4C 46
「文件标识 (Signature)」
>
覆盖 >>
追加<
2>
stderr
合并到stdout
:2>&1
|
wget
选项 | 含义 |
---|---|
-i , --input-file=文件 |
下载本地或外部文件中的 URL |
-O , --output-document=文件 |
将输出写入文件 |
-b , --background |
在后台运行 wget |
-d , --debug |
调试模式,打印出 wget 运行时的调试信息 |
$ wget -i filelist.txt
curl
cURL选项 | 含义 |
---|---|
-o |
把远程下载的数据保存到文件中,需要指定文件名 |
-O |
把远程下载的数据保存到文件中,直接使用 URL 中默认的文件名 |
-I |
只展示响应头内容 |
下载 USTCLUG 的 logo:$ curl -O "https://ftp.lug.ustc.edu.cn/misc/logo-whiteback-circle.png"
wc
diff
head
tail
grep
sed
bash
alias
fish
foo.sh
首行为 #!/bin/bash
,则执行 ./foo.sh
就等于执行 /bin/bash ./foo.sh
chsh -s /usr/bin/fish
{ 命令1; 命令2; … }
,组命令在 shell 内执行,不会产生新的进程,注意花括号和命令之间的空格。(命令1; 命令2; …)
,组命令会建立独立的 shell 子进程来执行组命令,这里的圆括号周围并不需要空格。#! /bin/bash
set
unset
set -u
:如果变量未定义,就直接报错退出。export
特殊变量 | 说明 |
---|---|
$# |
命令行上的参数个数,不包括 $0 |
$? |
最后命令的退出代码,0 表示成功,其它值表示失败 |
$$ |
当前进程的 PID |
$! |
最近一个后台运行进程的进程号 |
$* |
命令行所有参数构成的一个字符串 |
$@ |
用双引号括起的命令行各参数拼接构成的一个字符串 |
$()
ufw
sudo ufw status
sudo ufw allow 8080
sudo ufw delete allow 8080
sudo ufw reload
firewalld
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
“Pasted image 20240201154019.png” could not be found.
“Pasted image 20240201183446.png” could not be found.
“Pasted image 20240202164749.png” could not be found.
fdisk -l
磁盘分区 引导 MBR GPT