这是一篇手册文章,总结了小编(曾经)常用的 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。如有疏漏、谬误、侵权请通过评论或 邮件 指出。