常见 Linux 命令
这是一篇手册文章,总结了小编(曾经)常用的 linux 命令,以及它们的一些常用参数和场景。更新中……
source
执行某个文件,效果等同于 .
,都是在当前进程的上下文执行。
bash
以 bash 执行某个文件,作为子进程。
-x
参数可以查看调试信息。
gdb
用来调试 C 程序,打开一个调试:
gdb a.out
调试命令
break 16 # 断点行
break func # 断点函数
info break # 打印断点
r # run
n # next
c # continue
p i # print i
bt # 函数堆栈
finish # 退出函数
q # 退出GDB
${}
${str%.txt} # 最短匹配末尾.txt并删除
${str%%.txt} # 最长匹配末尾.txt并删除
${str#.txt} # 最短匹配开始.txt并删除
${str##.txt} # 最长匹配开始.txt并删除
该表达式支持通配符
awk
awk 'pattern {action}'
pattern(all by default) BEGIN, END
action(print by default)
builtin variables
NR: 已输入记录的条数。
NF: 当前记录中域的个数。记录中最后一个域可以以$NF的方式引用。
FILENAME: 当前输入文件的文件名。
FS: 域分隔符,用于将输入记录分割成域。其默认值为“空白字符”,即空格和制表符。FS可以替换为其它字符,从而改变域分隔符。
RS: 当前的记录分隔符。默认状态下,输入的每行都被作为一个记录,因此默认记录分隔符是换行符。
OFS: 输出域分隔符,即分隔print命令的参数的符号。其默认值为空格。
ORS: 输出记录分隔符,即每个print命令之间的符号。其默认值为换行符。
OFMT: 输出数字格式(Format for numeric output),其默认值为"%.6g"。
%0: 整个记录
%n: 第n个记录
sed
语法:
/模式/p # 打印
/模式/d # 删除
s/模式/替换文字/ # 替换
s/模式/替换文字/g # 替换所有
np # 匹配第n行
选项:
-f # 指定sed脚本
-i # 直接修改文件
-e # 正则表达式
-n # 不输出模式空间
解压缩
tar xvf file.tar
tar xvzf file.tgz
tar xvzf file.tar.gz
bzip -cd file.bz | tar xvf -
tar xvjf file.tar.bz2
unzip file.zip
unrar x file.rar
xz -d file.xz && tar xvf file.tar
rpm2cpio file.rpm | cpio -div
ark -bae file.deb [-o .]
cp
# 用`.`而不是`*`可以拷贝到隐藏文件
cp -r /opt/usr/20070723/. /backup/latest/
chmod
更改文件权限:
chmod [-cfvR] [--help] [--version] mode file...
mode
- 指定用户:u 所有者,g 与拥有者同一群,o 其他,a 皆是
- 操作权限:+ 增加,- 取消,= 设定
- 指定权限:r 读,w 写,x 执行,X 只有当该档案是个子目录或者该档案已经被设定过为可执行
参数
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
举例
chmod -R ug+w,o-w file1.txt file2.txt
chmod abc file a,b,c各表示User、Group、及Other,r=4,w=2,x=1 ,即chmod a=rwx file 与 chmod 777 file 相同
chmod 4755 file 总是作为文件的所有者而执行,只要它不是SHELL脚本就行
chown
更改文件所有者
chown username:groupname file
内核模块
lsmod
即可查看内核模块,也可以直接读取文件:/proc/modules/
。
modprobe +模块名、通用识别符
即可载入内核模块。其中,模块名是在 /etc/modprobe.conf
中指定的别名。这样,系统就会从 /lib/moudles/(uname -r)/modules.dep
查找依赖模块,再用 insmod
从 /lib/modules/(uname -r)/kernel/
加载。
insmod /lib/modules/(uname -r)/kernel/fat/fat.o
必须写全路径。
通过 rmmod sysdog
卸载内核模块。
系统信息
cat /proc/cpuinfo # CPU
cat /proc/pci(或lspci) # PCI板卡 eg. lspci |grep Ethernet 查看网卡型号
cat /proc/meminfo # 内存
cat /proc/bus/usb/devices # USB
cat /proc/bus/input/devices # 键盘鼠标
cat /proc/interrupts # 设备的中断请求(IRQ)
uname -a # 体系结构
cat /etc/issue # 查看发行版
#硬盘
lsblk # 查看分区使用情况
disk - l # 磁盘列表
fdisk # 磁盘分区工具
df -h # 查看文件系统使用情况
du -h # 查看当前目录的使用情况
主机名
在 /etc/hostname
中设置主机名,并在 /etc/hosts
中加入路由转发:
127.0.1.1 [主机名]
dd
逐字节刻录外存,包括:硬盘、闪存、光盘等。
dd if=/dev/sda1 of=/tmp/boot.disk # 备份分区
mount -o loop /tmp/boot.disk /mnt # 挂载分区文件
dd if=/tmp/boot.disk of=/dev/sda1 # 恢复分区
dd if=/dev/sda of=/tmp/mbr.disk bs=512 count=1 # 备份磁盘(前512字节为MBR+分区表)
dd if=/tmp/mbr.disk of=/dev/sda bs=512 count=1 # 恢复磁盘
dd if=/tmp/mbr.disk of=/dev/sda bs=512 skip=446 count=66 # 恢复分区表
kill -USR1 {dd-pid} # 查看dd进度
find
find [起始目录] 寻找条件 操作 \;
逻辑组合
-a(and,default),-o(or),!(not),括号('\(')
逻辑条件
-name 文件名;
-lname 符号链接文件;
-gid n ID为 n 的用户组(+n表示大于n,-n表示小于n);-uid n ID为 n 的用户
-group 用户组名;
-user 用户名;
-empty 查找大小为 0的目录或文件。
-path 路径;
-perm 权限(如711)
-size N[bckw] N为数字,后面的字符表示单位,缺省为 b,代表512字节的块。
-type [bcdpfls] b 块设备;c 字符设备;d 目录;p 命名管道;f 普通文件;l 符号链接;s socket
-xtype 只查找符号链接文件
-amin n 查找n分钟以前被访问过的所有文件
-cmin n 查找n分钟以前文件状态被修改过的所有文件
-mmin n 查找n分钟以前文件内容被修改过的所有文件
-mtime n n天
操作
-exec 命令名称 {}: 对符合条件的文件执行指定的命令,不询问,{}表示命令的参数即为所找到的文件
-ok 命令名称 {}:对符合条件的文件执行指定的命令,询问用户是否执行
-ls 详细列出所找到的所有文件。
-print 标准输出;-printf 格式:格式输出; -fprintf 文件名:写入文件。
示例:删除当前目录下所有一周之内没有被访问过的 a.out 或 *.o 文件。(当命令太长时,输入\换行)
find . \(- name a.out - o - name '*.o'\) \
本文采用 知识共享署名 4.0 国际许可协议(CC-BY 4.0)进行许可,转载注明来源即可: https://harttle.land/2015/05/17/linux-cmd.html。如有疏漏、谬误、侵权请通过评论或 邮件 指出。