axlezt 发表于 2023-10-21 02:40:15

Linux大神都是怎么记住这么多命令的?

如题,作为网络安全入行者,已经不得不好好用kali了,重度windows图形者是真记不住这么多linux命令

txsj 发表于 2023-10-21 02:40:26

谢邀,不算大神。离谱啊,哪儿来的近5000收藏!!亲自动动手行不?

[*]关于命令的广度--看原文:定义作用领域,再一张表格上,建立记忆的索引。
[*]关于知识的深度--看追更:从各技术板块寻找一个最有趣的小实验,实现并分享出来。
镜像问题:
如何更深入地学习 Linux?------------------追更-----------------------
关于知识的深度:
从记忆到应用,从应用到有趣的让人眼前一亮
其实作为一个在安全行业屹立十几年的资深部门之成员,命令记不记都已经是习惯性的了。
在自由度极高的技术中可以做到的有趣事实在太多了。
AI安全系列:
我在鹅厂做安全:AI系列之-考砸了!用GAN来模拟家长签名近期推荐:
当AI足够聪明时,我们的验证码还有用吗?------------------原文-----------------------
命令往往不是用背来记住,而是生活实用来刻意训练的,我大学时宿舍的电脑是树莓派的主机(本想防止自己玩游戏,结果就是树莓派都能搞出游戏来),在实验室的则是纯命令行 ubuntu,后来换成kali(你懂的)
定义作用领域,再一张表格上,建立记忆的索引。
核心索引是:
线上查询及帮助命令 (2 个)

文件和目录操作命令 (18 个)

查看文件及内容处理命令(21 个)

文件压缩及解压缩命令(4 个)

信息显示命令(11 个)

搜索文件命令(4 个)

用户管理命令(10 个)

基础网络操作命令(11 个)

深入网络操作命令(9 个)

有关磁盘与文件系统的命令(16 个)

系统权限及用户授权相关命令(4 个)

查看系统用户登陆信息的命令(7 个)

内置命令及其它(19 个)

系统管理与性能监视命令 (9 个)

关机 / 重启 / 注销和查看系统信息的命令(6 个)

进程管理相关命令(15 个)

<hr/>收藏是点赞的5倍( ・᷄ὢ・᷅ ),摆脱动动小指传播一下

命令        功能说明
线上查询及帮助命令 (2 个)
man        查看命令帮助,命令的词典,更复杂的还有 info,但不常用。
help        查看 Linux 内置命令的帮助,比如 cd 命令。
文件和目录操作命令 (18 个)
ls        全拼 list,功能是列出目录的内容及其内容属性信息。
cd        全拼 change directory,功能是从当前工作目录切换到指定的工作目录。
cp        全拼 copy,其功能为复制文件或目录。
find        查找的意思,用于查找目录及目录下的文件。
mkdir        全拼 make directories,其功能是创建目录。
mv        全拼 move,其功能是移动或重命名文件。
pwd        全拼 print working directory,其功能是显示当前工作目录的绝对路径。
rename        用于重命名文件。
rm        全拼 remove,其功能是删除一个或多个文件或目录。
rmdir        全拼 remove empty directories,功能是删除空目录。
touch        创建新的空文件,改变已有文件的时间戳属性。
tree        功能是以树形结构显示目录下的内容。
basename        显示文件名或目录名。
dirname        显示文件或目录路径。
chattr        改变文件的扩展属性。
lsattr        查看文件扩展属性。
file        显示文件的类型。
md5sum        计算和校验文件的 MD5 值。
查看文件及内容处理命令(21 个)
cat        全拼 concatenate,功能是用于连接多个文件并且打印到屏幕输出或重定向到指定文件中。
tac        tac 是 cat 的反向拼写,因此命令的功能为反向显示文件内容。
more        分页显示文件内容。
less        分页显示文件内容,more 命令的相反用法。
head        显示文件内容的头部。
tail        显示文件内容的尾部。
cut        将文件的每一行按指定分隔符分割并输出。
split        分割文件为不同的小片段。
paste        按行合并文件内容。
sort        对文件的文本内容排序。
uniq        去除重复行。oldboy
wc        统计文件的行数、单词数或字节数。
iconv        转换文件的编码格式。
dos2unix        将 DOS 格式文件转换成 UNIX 格式。
diff        全拼 difference,比较文件的差异,常用于文本文件。
vimdiff        命令行可视化文件比较工具,常用于文本文件。
rev        反向输出文件内容。
grep/egrep        过滤字符串,三剑客老三。
join        按两个文件的相同字段合并。
tr        替换或删除字符。
vi/vim        命令行文本编辑器。
文件压缩及解压缩命令(4 个)
tar        打包压缩。oldboy
unzip        解压文件。
gzip        gzip 压缩工具。
zip        压缩工具。
信息显示命令(11 个)
uname        显示操作系统相关信息的命令。
hostname        显示或者设置当前系统的主机名。
dmesg        显示开机信息,用于诊断系统故障。
uptime        显示系统运行时间及负载。
stat        显示文件或文件系统的状态。
du        计算磁盘空间使用情况。
df        报告文件系统磁盘空间的使用情况。
top        实时显示系统资源使用情况。
free        查看系统内存。
date        显示与设置系统时间。
cal        查看日历等时间信息。
搜索文件命令(4 个)
which        查找二进制命令,按环境变量 PATH 路径查找。
find        从磁盘遍历查找文件或目录。
whereis        查找二进制命令,按环境变量 PATH 路径查找。
locate        从数据库 (/var/lib/mlocate/mlocate.db) 查找命令,使用 updatedb 更新库。
用户管理命令(10 个)
useradd        添加用户。
usermod        修改系统已经存在的用户属性。
userdel        删除用户。
groupadd        添加用户组。
passwd        修改用户密码。
chage        修改用户密码有效期限。
id        查看用户的 uid,gid 及归属的用户组。
su        切换用户身份。
visudo        编辑 / etc/sudoers 文件的专属命令。
sudo        以另外一个用户身份(默认 root 用户)执行事先在 sudoers 文件允许的命令。
基础网络操作命令(11 个)
telnet        使用 TELNET 协议远程登录。
ssh        使用 SSH 加密协议远程登录。
scp        全拼 secure copy,用于不同主机之间复制文件。
wget        命令行下载文件。
ping        测试主机之间网络的连通性。
route        显示和设置 linux 系统的路由表。
ifconfig        查看、配置、启用或禁用网络接口的命令。
ifup        启动网卡。
ifdown        关闭网卡。
netstat        查看网络状态。
ss        查看网络状态。
深入网络操作命令(9 个)
nmap        网络扫描命令。
lsof        全名 list open files,也就是列举系统中已经被打开的文件。
mail        发送和接收邮件。
mutt        邮件管理命令。
nslookup        交互式查询互联网 DNS 服务器的命令。
dig        查找 DNS 解析过程。
host        查询 DNS 的命令。
traceroute        追踪数据传输路由状况。
tcpdump        命令行的抓包工具。
有关磁盘与文件系统的命令(16 个)
mount        挂载文件系统。
umount        卸载文件系统。
fsck        检查并修复 Linux 文件系统。
dd        转换或复制文件。
dumpe2fs        导出 ext2/ext3/ext4 文件系统信息。
dump        ext2/3/4 文件系统备份工具。
fdisk        磁盘分区命令,适用于 2TB 以下磁盘分区。
parted        磁盘分区命令,没有磁盘大小限制,常用于 2TB 以下磁盘分区。
mkfs        格式化创建 Linux 文件系统。
partprobe        更新内核的硬盘分区表信息。
e2fsck        检查 ext2/ext3/ext4 类型文件系统。
mkswap        创建 Linux 交换分区。
swapon        启用交换分区。
swapoff        关闭交换分区。
sync        将内存缓冲区内的数据写入磁盘。
resize2fs        调整 ext2/ext3/ext4 文件系统大小。
系统权限及用户授权相关命令(4 个)
chmod        改变文件或目录权限。
chown        改变文件或目录的属主和属组。
chgrp        更改文件用户组。
umask        显示或设置权限掩码。
查看系统用户登陆信息的命令(7 个)
whoami        显示当前有效的用户名称,相当于执行 id -un 命令。
who        显示目前登录系统的用户信息。
w        显示已经登陆系统的用户列表,并显示用户正在执行的指令。
last        显示登入系统的用户。
lastlog        显示系统中所有用户最近一次登录信息。
users        显示当前登录系统的所有用户的用户列表。
finger        查找并显示用户信息。
内置命令及其它(19 个)
echo        打印变量,或直接输出指定的字符串
printf        将结果格式化输出到标准输出。
rpm        管理 rpm 包的命令。
yum        自动化简单化地管理 rpm 包的命令。
watch        周期性的执行给定的命令,并将命令的输出以全屏方式显示。
alias        设置系统别名。
unalias        取消系统别名。
date        查看或设置系统时间。
clear        清除屏幕,简称清屏。
history        查看命令执行的历史纪录。
eject        弹出光驱。
time        计算命令执行时间。
nc        功能强大的网络工具。
xargs        将标准输入转换成命令行参数。
exec        调用并执行指令的命令。
export        设置或者显示环境变量。
unset        删除变量或函数。
type        用于判断另外一个命令是否是内置命令。
bc        命令行科学计算器
系统管理与性能监视命令 (9 个)
chkconfig        管理 Linux 系统开机启动项。
vmstat        虚拟内存统计。
mpstat        显示各个可用 CPU 的状态统计。
iostat        统计系统 IO。
sar        全面地获取系统的 CPU、运行队列、磁盘 I/O、分页(交换区)、内存、 CPU 中断和网络等性能数据。
ipcs        用于报告 Linux 中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。
ipcrm        用来删除一个或更多的消息队列、信号量集或者共享内存标识。
strace        用于诊断、调试 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。
ltrace        命令会跟踪进程的库函数调用, 它会显现出哪个库函数被调用。
关机 / 重启 / 注销和查看系统信息的命令(6 个)
shutdown        关机。
halt        关机。
poweroff        关闭电源。
logout        退出当前登录的 Shell。
exit        退出当前登录的 Shell。
Ctrl+d        退出当前登录的 Shell 的快捷键。
进程管理相关命令(15 个)
bg        将一个在后台暂停的命令,变成继续执行 (在后台执行)。
fg        将后台中的命令调至前台继续运行。
jobs        查看当前有多少在后台运行的命令。
kill        终止进程。
killall        通过进程名终止进程。
pkill        通过进程名终止进程。
crontab        定时任务命令。
ps        显示进程的快照。
pstree        树形显示进程。
nice/renice        调整程序运行的优先级。
nohup        忽略挂起信号运行指定的命令。
pgrep        查找匹配条件的进程。
runlevel        查看系统当前运行级别。
init        切换运行级别。
service        启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。-

lnfsmnb 发表于 2023-10-21 02:40:32

自己装个linux系统,比如ubuntu,然后学一下软件源码编译(无管理员权限下),再学一下新建用户与文件权限设置,所有用户密码规则配置,弄完这些相信你会进步不少的。PS:如果我发现有意思的命令,也会在这个回答里持续更新的~
最近更新2022.11.7
附常用的命令
1.CPU信息查看

#实时查看cpu频率
watch -n.1 "cat /proc/cpuinfo | grep \"^pu MHz\""
#查看cpu线程数(逻辑核数)
lscpu
或者
getconf _NPROCESSORS_ONLN   # getconf -a 可以查看系统所有信息
或者
egrep "^processor" /proc/cpuinfo
egrep "^processor" /proc/cpuinfo | wc -l # 直接查看数量
#查看cpu型号
cat /proc/cpuinfo | grep -i "model name" | uniq
#查看cpu温度
paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) | column -s $'\t' -t | sed 's/\(.\)..$/.\1C/'
其他方法如 lm_sensors 的方法不赘述参考:
在Ubuntu 18.04 下使用命令行查看英伟达GPU温度、CPU温度
2.查看系统分区、文件夹及其大小

#系统分区信息
df -h
#查看文件夹大小
du -h --max-depth=1
或者
du -h -d 1
上面的命令如果想具体到比如用MB或者GB 表示的时候,将 -h 替换成 --block-size=1M, --block-size=1G即可。3.清空回收站文件夹

rm -rf $HOME/.local/share/Trash/files/*4.实时查看内存

free -m -h 或者
watch -n 5 free -m -h
补充:watch 与 管道符号一起用,主要是加引号 ' '
watch -n 5 'free -m -h | grep -i swap'5.手动释放内存(上条命令中显示的 buff/cache)

sudo sh -c 'echo 1 > /proc/sys/vm/drop_caches'
sudo sh -c 'echo 2 > /proc/sys/vm/drop_caches'
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'6.挂载与读取硬盘,具体参考博文

a.查找硬盘
sudo fdisk -l

b.新建文件夹
cd $HOME
mkdir tempdir

c.查看原硬盘格式
df -T

d.挂载硬盘
mount -t ext4 /dev/sdb1 $HOME/data1

e.查看新挂载的硬盘
df -h7.mkdir 创建多级文件夹

mkdir -paa/bb/cc/dd/ee
或者
mkdir -pv aa/bb/cc/dd/ee多加一个v意思是在控制端会输出你创建的文件夹的路径,具体可以参考博文1,博文2 。
-p, --parents   no error if existing, make parent directories as needed
-v, --verbose   print a message for each created directory
8.查看GLIBC版本

ldd --version
9.查看系统版本信息

lsb_release -a

#查看内核信息
uname -a

# 查看 os 信息
cat /etc/os-release10.查看显卡信息

lspci | grep -i vga

#更详细的查看厂商的信息
lspci -vnn | grep VGA -A 1211.查看当前目录的绝对路径

pwd参考

12.用户信息查看
whoami## 查看当前用户名
hostname ##当前机器名称,修改位置 /etc/hostname
pwd      #当前路径

last    ## 查看用户登录记录
lastlog ##最近所有用户登录记录参考

13.查看输入命令的历史记录
cat ~/.bash_history ## 常用

#或者
history参考

14.查看IP地址
ifconfig         ## windows 下为 ipconfig /all

##这个命令如果没有的话,安装命令为
sudo apt-get install net-tools查看网关,参考
Linux下查看网关方法:

1、route -n

2、ip route show

3、traceroute www.prudentwoo.com -s 100 【第一行就是自己的网关】

4、netstat -r

5、more /etc/network/interfaces 【Debian/Ubuntu Linux】

6、more /etc/sysconfig/network-scripts/ifcfg-eth0 【Red Hat Linux】15. ubuntu 创建宽带连接

#通常通过 /usr/share/application 目录下的network应该就可以创建宽带连接
#但是也可以通过命令行创建
sudo pppoeconf

#然后默认设置,填写好账户和密码即可联网,注意设置断网自动重新连接
#如果掉了,也可以手动连接
sudo pon dsl-provider       # 启动
poff                        # 关闭个人建议还是使用/usr/share/application 目录下的network创建宽带连接,这样创建的连接相对比较稳定,用命令创建的不是很稳定
16.查看正在工作的网卡

#可以先用
ifconfig
#查看有哪些网卡
#再用
sudo mii-tool eth0
#查看哪个网卡正在工作17.内存,硬盘,主板型号查询

sudo dmidecode -t memory   // 内存信息   更具体的sudo dmidecode -t memory   | grep -i size
sudo hdparm -i /dev/sda      // 硬盘型号 sudo hdparm -i /dev/sda | grep -i model
sudo dmidecode | more       //主板型号 更具体的可以用 sudo dmidecode | grep -i "product name"

####其他
##读取速度
hdparm-Tt /dev/sda1 更加细节的一些查询内存的命令,参考
内存:
卡槽数量:sudo dmidecode -t memory |grep "Number Of Devices" |awk '{print $NF}' 或 sudo dmidecode -t memory |grep "Associated Memory Slots" |awk '{print $NF}'

内存数量:sudo dmidecode -t memory |grep -A16 "Memory Device$" |grep 'Size:.*MB' |wc -l

内存型号:
内存支持类型:sudo dmidecode -t memory |grep -A16 "Memory Device$" |grep "Type:"

每个内存频率:sudo dmidecode -t memory |grep -A16 "Memory Device$" |grep "Speed:"

每个内存大小:sudo dmidecode -t memory |grep -A16 "Memory Device$" |grep "Size:"


其他:
(1)CPU:
型号:grep "model name" /proc/cpuinfo |awk -F ':' '{print $NF}'

数量:lscpu |grep "CPU socket" |awk '{print $NF}'或lscpu |grep "Socket" |awk '{print $NF}'

每个CPU的核数:lscpu |grep "Core(s) per socket" |awk '{print $NF}'

(2)硬盘:
硬盘数量、大小:sudo fdisk -l |grep "Disk /dev/sd"

硬盘型号:sudo hdparm -i /dev/sda |grep "Model"18.三种方法重启网络连接

第一种方法: networking
sudo service networking restart   
或者
/etc/init.d/networking restart

第二种方法:ifdown up
ifdown eth0
ifup eth0

第三种方法:ifconfig
ifconfig eth0 down
ifconfig eth0 up19.查看硬盘实时读写速度

sudo iotop

# 如果没有这个命令,用apt 安装一下即可
sudo apt-get install iotop20.查看已经安装的软件包

apt list --installed | grep -i 软件(包)名
#
dpkg -l | grep -i 软件(包)名

#精准查询
dpkg -L 软件包名21.查看文件及文件夹数量

# 查看当前目录下的文件数量(不包含子目录中的文件)
ls -l | grep "^-" | wc -l

# 查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表子目录
ls -lR | grep "^-" | wc -l

# 查看当前目录下的文件夹目录个数(不包含子目录中的目录),同上述理,如果需要查看子目录的,加上R
ls -l | grep "^d" | wc -l

#如果是指定文件目录的,只需要在ls -l 后面加上目录加即可
ls -l traget_dir | grep "^-" | wc -l参考:Linux统计文件夹、文件数量的命令 - dttdx - 博客园
22. cp命令进阶

#向多个目录拷贝同一个文件,
echo /target_dir1 /target_dir2 /target_dir3 | xargs -n 1 cp -v /source_dir/source_file
#多个文件向同一个目录下拷贝,可以使用相对路径
cp /dir1/source_file1 /dir2/source_file2 /dir3/source_file3 /target_dir
#或者写成
cp {/dir1/source_file1,/dir2/source_file2 /dir3/source_file3} /target_dir
#如果dir1 和 dir2相同,那么可以进一步写成
cp /dir/{source_file1,source_file2,source_file3}/target_dir
#如果source_file本身名字上有规律,如连续的自然数等,可以使用 [],如
cp /dir/source_file/target_dir
#如果不连续的话,比如只想cp file1 和file3
cp /dir/source_file/target_dir

#最后向多个目录,复制多个文件
echo /target_dir1 /target_dir2 /target_dir3 | xargs -n 1 cp -v /source_dir/source_file

#保留软链接,否则会把软链接改成文件,占用多余的空间
cp -dsource_dir target_dir

#拷贝文件夹和目录结构, -r/-R 递归创建
cp -r = cp -R   

#加上 --parents 时候会自动检测, target dir 是否存在,不存在报错,存在则与 不加--parents效果一致,
#其实这个就是用来检测目标目录是否存在用的
cp -r --parentssource_dirtarget_dir

#只复制新文件,source_dir中新添加的或者新修改的文件才复制,旧文件不复制
cp -u source_dirtarget_dir

加参数 -p, 可以保持源文件的时间属性。否则新文件为当前时间
cp -rfp /data/upload/*/data/backup/Linux技巧:cp命令自动创建不存在的目录和只复制修改的文件
23.查看进程所在绝对路径

#方法一
top 命令后 按 c键 查看,但是要求的是执行软件的时候,使用的是绝对路径

#方法二
ll /proc/pid

#方法三(与方法二类似,用ps打印pid,不是通过top命令获取pid)
ps -ef | grep xxx
ll /proc/xxx的pid参考博文:
几种查看Linux进程路径的方法_lawenliu的专栏-CSDN博客_linux查看进程路径
linux 查看进程启动路径 - 糊涂执行 - 博客园
24.显卡限制功耗上限

sudo nvidia-smi -pl 200# 功耗限制在200w

#如果是多块gpu 加上 -i 指定哪几块,如
sudo nvidia-smi -i 0,1 -pl 200   # 0号和1号显卡的功率限制到200w

#显卡温度查询,参考cpu温度查询给出的链接
nvidia-smi -q -i 0,1 -d TEMPERATURE25.快速返回$HOME目录与返回上一次目录

#通常办法是
cd ~ /cd $HOME
#其实直接输入cd 回车就回到了主目录
cd

#万一要是手误打错了,直接返回主目录,想要回去的话
cd -26.查看GCC支持的C语言版本

gcc -dM -E - < /dev/null | grep -i __STDC_27.显示远程物理机上物理键盘按键

sudo showkey参考
28.查看带宽

lshw -C network29.创建空白文件

touch Filename执行touch 命令前如果有相同的文件,不会用一个新的空白文件覆盖原有文件,相当于 touch不执行了
30.查找动态库的位置

ldconfig -p| grep your_ld_name例如:
ldconfig -p| grep libc.so.6
31.以二进制查看文件

参考
xxd yourfile32.查看开关机、重启时间可用的6个命令

top       最上面一行就有

last reboot

who -b/ who -r (运行级别)

uptime

w

date -d "`cut -f1 -d. /proc/uptime` seconds ago"参考:查看linux系统重启时间历史记录_mygodhome的专栏-CSDN博客_linux查看系统重启时间
33.查看硬盘UUID

sudo blkid

ls -l /dev/disk/by-uuid/


其他附加命令:

sudo blkid /dev/sda
ls -l /dev/disk/by-path/
ls -l /dev/disk/by-id/参考:1,2
34.利用rm命令递归删除某一类文件

find . -name "*.o"| xargs rm -f利用rm 命令 和 xargs命令,递归删除当前文件夹及子文件夹下的所有.o文件
35.查看系统定义的所有环境变量

envwindows可以在cmd中输入set命令查看
36.查看硬盘是固态还是机械硬盘

cat /sys/block/sda/queue/rotational一块硬盘一般就是sda,两块硬盘,第一块是sda,第二块sdb,以此类推。
显示的结果是0,就是固态盘,显示是1,就是机械盘。
37. 用户进程号(PID)相关民命令

查看PID号上限:
cat/proc/sys/kernel/pid_max

top 命令查看当前所有PID号:
top -bcn 1

查看指定用户民的进程号:

top -u usrname参考连接:
1.为什么Linux的进程pid编号极限最大值( process pid max)是131070? - 知乎
2.top查看全部进程_shy_snow的博客-CSDN博客_top查看进程
<hr/>其他Linux命令:
Ubuntu 系统下创建用户,组,及用户,组权限
Ubuntu普通用以超级管理员权限执行的命令

夏天的小夜曲 发表于 2023-10-21 02:40:47

本来觉得这个问题不需要回答,所以一直忽略,但没想到这个问题被推送过来这么多次,看来还真有很多人有此疑问。鉴于此我也发表一下个人观点好了,毕竟“怎么记住XXX”这种事情肯定是仁者见仁智者见智的。
像题主描述的,从Windows转到Linux上的使用者一般都会先对Linux上这么多的命令行操作感到困扰,于是便有此一问“这么多命令怎么记住?”,我的回答是:这么多命令是不可能记住的。但是为什么"Linux大神(引用自题主使用的称呼)"会给人一种可以记住众多命令的感觉呢?我就说三点原因,欢迎补充:

[*]熟练使用高频核心
首先,任何的领域或者说任何领域的任何层面,都有很少一部分很核心、使用频率极高、极其重要的内容。这些内容是需要记住的,比如bash, ls, cd, cat, less, grep, find, yum/apt-get, rpm/dpkg, vi/emacs等,比如某部分程序员常用的git, make, gcc等。这些东西就像加减乘除一样,与其说它们是被记住的,还不如说它们是被使用的过于频繁而形成了习惯。即使都是Linux用户,因每个人所涉领域不同,所面对的工作不同,常用的东西会有一些不同。但是熟练使用高频核心的东西是首要条件。
可能将来某一个因为你换工作了或者其它原因,你的工作环境改变了,你所熟练的高频核心的东西也会改变,以前熟练的慢慢就会“退化”到只记住基本原理的地步。比如我很久以前是Debian系的工作环境,我对apt, dpkg,甚至deb包打包工作等都比较熟悉,但是后来我因为工作更换,切换到了Fedora系的工作环境,于是我开始对yum, rpm等东西渐渐熟悉,对原来dpkg的使用就变得慢慢生疏了。

[*]文档才是“记住这么多命令“的关键
像上面说的,我们有很多高频使用的命令,但即使是我们高频使用的命令我们也并不能记住它们的全部参数全部用法(全部记住是不可能的)。所以掌握查阅文档的本领就是能否自我提升的第一关了。前面了解自己所处领域的高频核心的东西可能是别人(通过面对面传授、视频讲解、博客、入门书籍等)告诉你的,但是这只能算是师傅领进门,后面的修行还是要靠个人。这个“修行靠个人”的首要条件就是会自己查阅理解文档。比如我上面说自己后来对dpkg之类的命令生疏了,但是这并不影响我需要的时候使用它们,因为我毕竟还是知道它的基本原理的,使用的时候查阅文档我就可以找到我需要的参数以及用法。
"Linux大神"也是记不住那么多命令的那么多参数的,甚至连它们自己写的命令怎么用他们也记不住(不是开玩笑,千真万确),他们需要翻看自己写的或别的作者写的权威文档,来了解/确认更细节的使用方式。比如我们都知道grep命令很常用,一般我们用它查找一个匹配内容,可能-r/-R/-n是我们常用的参数选项,这也确实能应付90%的使用情况,但是突然有一天,比如我想让grep打印匹配行的前或后几行的内容,该怎么办?
注意此时并不能通过你“知道用什么参数”和“不知道用什么参数”来评判水平高低,这只能说明你对这方面的用法是否有过些许或者经常的接触,并不能作为水平高低的评判。而能看出水平高低的,是你在不知道怎么做的情况下如何找到解决方式。可能有的人会先跑到知乎、QQ群等平台提问“求大神救救孩子吧,grep怎么打印找的行的后面几行阿?在线等,急!”,然后就放那先不管了。可能有的人会找度娘“百度:grep如何打印匹配的后面几行”,然后在众说纷纭的论坛、博客里边找边试,能工作就行。而有的人可能会先尝试查看grep的manual (man grep),在里面搜索如"after/before/context/line等等"这样的关键字,或者快速的翻越相关章节,寻找grep是否直接提供这样的用法,如果grep不提供则再想办法通过其它综合命令的途径达到目的。
有人可能会问,那要是我都不知道该用哪个命令怎么办,我们都不知道该man什么?即使面对全新的命令时,文档也是一把金钥匙。比如你面对一个需求,需要你在bash脚本里解析json文件。这时候你可能要先通过一些途径了解到都有什么能在bash下使用的工具能解析json文件,比如Google搜索关键字"bash json"(或者问有经验的人),你可能看到很多方案,你需要逐个简单了解并评估,然后你发现有一个叫"jq"的命令行工具既可以做这样的事又符合你的预期。这是一个对你来说全新的命令,但是如果你具备阅读jq相关文档的能力,你就可以在短时间(比如一天)内快速掌握其主要用法,然后一边参照其格式说明一边完成编程。
这种具备(快速及时地)查找、翻阅并掌握权威文档内容的能力,是让别人觉得你什么命令都记得住的关键,也是离开新手村的关键条件。“Linux大神”们就是因为具备这种能力,才让很多人以为是什么都记得住。

[*]命令下面的底层知识是终极限制器
虽然我们上面说文档是记住这么多命令的关键,但是还有一个更关键的问题是:即使你找到了文档或书籍,但是你可能发现自己看!不!懂!
每一份文档也都是有阅读基础要求的,不是我每个字都认识我就能理解所有用这些字写出来的东西。可能一些浅显的内容,比如ls的-i选项写着"print the index number of each file",但凡知道"inode number"是什么的就能知道这句的意思。当然连inode number是什么都还不知道的就连这句话也理解不了。有些命令则可能需要专业的理解,比如iptables,dmsetup,debugfs/xfs_db,crash等,你如果不具备相关领域的基础知识,光看使用说明也会是一头雾水,可能每一个术语都够一个新手看很多篇其它文档或论文来了解一番的了。当然如果你真的具备独立阅读这些文档或论文并掌握这方面知识的能力,那这种问题也是挡不住你的。就怕你和你的问题差不只一两层级的知识,那将是以指数级增加的差距。
总之,如果你具备理解文档所需的基础知识,翻阅文档对你来说就像家常便饭一样,比用字典查生僻字还容易。如果你和所需知识差越多的层级,那就像学渣问学霸问题的段子写的那样,能从一个问题追问到解放前。
所以不是"Linux大神"能“记住”这么多命令,而是"Linux大神"具备更多的知识和学习新知识的能力。不是他们命令记得多,而是他们的能力可以让他们快速理解并掌握很多命令的意思。
我就说这三点,不知道看到这里你是否还觉得"Linux大神"是靠什么神奇方法记住众多命令的。隐藏在小小命令行下面的是勤于动手、知识水平、学习能力等众多因素。

neverletgo 发表于 2023-10-21 02:41:15

实际上,我以前学英语也是很痛苦,直到后来上了一个纯英文论坛,跟人聊天吹水打屁,瞎扯淡了一整年,后来英语就突飞猛进,胜过死背几年四六级。当然,这种方案适合我这种,发帖欲望很强烈的人。
那么为什么我这里要提到英语呢?因为所有这些命令,本质上都是英文助记符。(例如 ls 记忆为 list ,ps 记忆为 process ,-v 记忆为 verbose,-q 记忆为 quiet ,-r 记忆为 recursive,-f 记忆为force。cat 记忆为 concatenate,cd记忆为 change directory ,rm 记忆为 remove,mv 记忆为 move,等等)你如果能找到合适的单词帮助理解,那么就不会还需要刻意记忆。如果你的英文水平欠缺一些,那么记忆起来难度就会很大。
当然,日常需要用到Linux的人,其实是根本不用专门去记命令的,用多了自然就记得了。
不过,即便你用得没那么多,如果真要记的话,搞清楚这些命令以及命令的参数本质上都是某个单词的缩写,那么在你有一定英文基础情况下,就没有什么难记的了。

wenchuantian 发表于 2023-10-21 02:41:22

曾经常年使用Linux,这题我会!先说结论,其实不需要记住太多命令和参数,刻意去背命令、背参数更没必要。
更新:没想到获得大家这么多认可,文末再更新2个实用技巧。1、真正常用的不多。
如果你的操作相对固定,只要记住20个左右的命令,基本就能满足需要了,大都是增删改查一些文件、目录或进程等,比如ls/cd/cp/mv/rm/ps/pwd/mkdir/vi等,其他不常用的,再去现用现查就行。
2、结合英文含义记忆。
什么?20个也记不住?结合命令的英文含义吧,是不是清晰了很多?比如
ls = list
cd = change directory
cp = copy
rm = remove
mv = move
pwd = print work directory
ps = process status
df = disk free
du = disk usage
mkdir = make directory
rmdir = remove directory
su = switch user
chown = change owner
chmod = change mode不只是命令,参数也是类似的,可以用英文含义辅助记忆,比如:
-a = all
-l = list
-f = force
-h = -human-readable
-n = number
-u = user
-z = zip3、活用补全和帮助
太长的命令记不住时,用tab补全,比如iptables那一堆;具体的参数记不住时,用man或者help。
输入很长的文件名或路径名时,也可以使用tab补全,很省劲,不用一点点敲了。
4、建立个人知识库
对于那些常用的、带有多个参数的命令行,或是用了awk/grep/sed进行了复杂嵌套的,不需要特地背下来,如果敲错一点点,整个命令的输出都会有问题,甚至有可能酿成大祸!
建议把这些用一个文档保存下来,不单单要保存命令,还要注明这些命令是做什么的。等到需要的时候,直接打开文档复制就好,又准确又省事。
5、TLDR工具
TLDR是著名的Linux命令行手册开源项目,是英语Too Long Didn't Read(太长不看)的缩写,就是想反对冗长的man和help内容,建立一个简化的、社区驱动的手册集合。

[*]TLDR的GitHub地址:tldr-pages/tldr
TLDR可以安装在Linux上,然后使用tldr<commandname>就能快速查找,也有Web、Android 和 iOS 版本可以使用。

[*]TLDR的Web页面:tldr | simplified, community driven man pages
6、Linux命令查询中文资源
TLDR虽好,但毕竟是英文网站。很多人遇到不会的命令,还是习惯随手去百度查,但查出来的不一定是最合适的命令,甚至可能是错误的。
那么有Linux命令查询的中文资源吗?当然有!我在大量查询和对比之后,推荐这两个:

[*]Linux命令大全(手册) - 真正好用的Linux命令在线查询网站
这个站应该是著名的《Linux就该这么学》的作者建立的,可以根据命令或功能进行双向查询。

[*]Linux(微信小程序)
是的,名字就叫Linux,是“Linux中国”公众号开发的,基于TLDR项目翻译,同样可以命令或功能双向查询。有兴趣的同学也可以参与编辑,共同完善。

http://picx.zhimg.com/v2-66a9a7e7d22d94ed55bb159bcfa7577d_r.jpg?source=1940ef5c
7、利用工具辅助
虽然不提倡死记硬背,但我认为,初学者还是有必要完整过一遍常用命令,可以对哪些命令能做什么有一个整体印象,对理解Linux也很有帮助。建议跟着纸质书学习,看起来更舒服一些,也可以作为工具书,放在手边随时翻阅。

[*]工具书
命令行方面的Linux工具书,强烈推荐以下几本经典教材,当时都看了不止一遍。
大家可以点进去看看目录,对比一下哪本更适合自己。


[*]鼠标垫
还有一种做法,就是买一个大鼠标垫,大小和内容都能定制,类似这样的:

http://pic1.zhimg.com/v2-07ca1d7ada2dac76d96997ced8f571af_r.jpg?source=1940ef5c

图片来自京东,侵删

不单单是Linux,连Java、Python、MySQL、Android等等,都不用刻意记了,低头就能查,哈哈。实在查不到或者更加冷门的,再去查书或者搜索也不迟。


[*]机械键盘
Linux命令记熟了,不展示一下怎么行,必须再配个机械键盘啊!噼里啪啦一通,命令行输入+各种快捷键,半天不碰鼠标,周围人不由地投来仰慕的眼神。
<a data-draft-node="block" data-draft-type="mcn-link-card" data-mcn-id="1370512443114840064">总结一下,以上主要介绍了这些办法:
1、常用的命令建议记住,其实没多少
2、记忆的时候结合英文含义,会更容易
3、善用自动补全和帮助
4、建立个人知识库
5、安装TLDR工具
6、使用中文网站或小程序
7、利用工具书或鼠标垫进行辅助
纯手打,如果各位觉得有帮助,别光收藏,请双击点个赞吧,抱拳感谢!

http://picx.zhimg.com/50/v2-c81f4913cc62a93e76a6a4324a2f3349_720w.jpg?source=1940ef5c
页: [1]
查看完整版本: Linux大神都是怎么记住这么多命令的?