简介
今天忙完开题报告,我又闲着无事想起了perf的事情,一直对perf情有独钟,奈何现在记忆力完全跟不上趟(因为熬夜吧),刚读完的书立刻就忘,甚是不爽,现先从linux命令一百条做起吧。本文是节选自linux perf master一书,我估计也看不完那么多东西,只能挑选一些感兴趣的歇一歇。
关于方式
目前打算使用执行命令,截图或者markdown呈现结果的方式,给人以直观的感受,每个命令都使用小标题。
adduser/addgroup
增加用户或者组,我使用的centos的命令是useradd, groupadd。
案例:系统增加用户lpstudy,以及设定密码为123
sudo useradd lpstudy (增加用户lpstudy)
sudo passwd lpstudy (输入123两次)
arch
显示本机的机器的架构,
[lpstudy@air test]$ arch
x86_64
- 解释一波什么是i386, i686以及x86_64
i386对应的是32位系统、而i686是i386的一个子集,i686仅对应P6及以上级别的CPU,i386则广泛适用于80386以上的各种CPU;x86_64主要是64位系统。
cal/ncal
显示本机日历,查看日历。本机并没有ncal命令,为何?
[lpstudy@air test]$ cal
November 2018
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
cat
显示文件内容
[lpstudy@air test]$ cat 1.txt
hello i am 1.txt
tips:cat的另一大小技巧,创建文件并写入内容
,例如创建文件2.txt并写入hello world该如何操作?
cat > 2.txt
开始输入内容:hello world
输入完成后,按键盘上的Ctrl+d,表明输入完成
cd
切换目录,有几个常用的cd选项
cd .. 切换到父目录
cd ~ 切换到个人用户目录
cd - 切换到上一次所在的目录
chgrp
设置文件或者目录的属组,支持-R选项用于递归设置
chgrp g1 1.txt 表明将文件1.txt的属组设置为g1
chgrp -R g1 dir1/* 表明将目录dir1下的全部文件的属组都设置为g1
chmod
设置文件或者目录的权限,同样支持-R参数递归设置
相信很多人用这个命令都是chmod +x run.sh
,用于./run.sh
执行shell命令。+x
表示给文件增加执行权限,如果有执行权限,就可以使用./fileToExecute
这种方式来执行。
chmod支持两种模式的权限设置
- 数字设置,4为读,2为写,1为执行
chmod 777 1.txt 所有人都可读可写可执行
chmod 600 2.txt 只有自己可读写,其他人都不可读不可写不可执行
- 字母设置,r为读,w为写,x为执行
chmod +w 1.txt 所有人都可写
chmod -x 2.sh 去掉2.sh的执行权限
chown
设置文件用户和组,同样支持-R参数递归设置
不是很明白为何有chgrp的命令,chown本身就可以设置属组
chown user:group test.txt 设置文件的owner为user,属组为group。
cksum
文件的CRC校验值以及文件的字节数目
当你需要将某个文件传递给某人的时候,为了确保文件没有被篡改,可以比较两个文件的cksum结果是否一致。
[lpstudy@air test]$ cksum 1.txt
1547019575 17 1.txt
clear
清空屏幕,最简单。
说实话,我很少用,基本都用Ctrl+L快捷键。
cmp
见名知意,文件内容比较,逐个字节的比较
[lpstudy@air test]$ cat 1.txt 2.txt
hello i am 1.txt
hello I am 1.txt
[lpstudy@air test]$ cmp 1.txt 2.txt
1.txt 2.txt differ: byte 7, line 1
comm
已经排序好的文件进行比较,逐行比较
支持的选项
-1:不显示只在第一个文件出现的内容;
-2:不显示只在第二个文件中出现的内容;
-3:不显示同时在两个文件中都出现的内容。
简单记忆法:
-1:可以看做减1,也就是说把只在第一个文件的内容减去
-2:同理
-3:可以看做减去1+2,也就是把只在第一个文件,或者只在第二个文件的统统减去。
这个命令非常有用,有一个文件有200个ip地址,另一个文件有180个ip地址,每个ip地址一行,想找出来两个文件的公共的ip地址。
sort 1.txt > sorted_1.txt
sort 2.txt > sorted_2.txt
comm -1 -2 sorted_1.txt sorted_2.txt 显示两个文件的公共部分
cp
复制文件到目的文件,或者目的目录,同样支持-R选项
cp test.txt ~/Desktop 将test.txt复制到个人桌面
cp test.txt another_copy.txt 创建一个新的文件,与test.txt文件内容相同
csplit
对文件进行切割,命令感觉过于复杂,split感觉就够用了
csplit file1 [10] 将一个文件拆成2个,第一个包含9行
date
打印系统时间
输出自1970年的UTC秒数
[lpstudy@air test]$ date +%s
1541509906
输出当前时间
[lpstudy@air test]$ date
Tue Nov 6 21:11:53 CST 2018
dd
创建文件,复制文件,硬刻录磁盘镜像等等
两大用途
dd if=/dev/sda of=/tmp/dev-sda-part.img 创建硬盘镜像
创建一个1GB的文件
[lpstudy@air test]$ dd if=/dev/zero of=1G.file bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.415416 s, 2.6 GB/s
[lpstudy@air test]$ ls -lh 1G.file
-rw-rw-r--. 1 lpstudy lpstudy 1.0G Nov 6 21:16 1G.file
df
查看文件系统的使用率以及剩余空间等
[lpstudy@air test]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 193G 149G 35G 82% /
tmpfs 16G 6.3G 9.3G 41% /dev/shm
/dev/sda5 1.4T 1.3T 9.9G 100% /home
diff
文本比较,行行比较
比较有价值的是它可以准确的输出两个文件不同的地方,并且输出结果能够用于从一个文件恢复到另一个文件。
diff file1 file2
用于恢复的
diff -u file1 file2 > diff.txt
patch -R file1 < diff.txt 用于恢复file2
patch -R file2 < diff.txt 用于恢复file1
diff3
比较三个文件,完全没有用过
dir
windows的命令吧,和ls啥区别,不知道。
dirname
给定一个路径path,得到其父路径
常用于得到一个文件的绝对路径
展开~,获取文件的父目录绝对路径
[lpstudy@air test]$ dirname ~/test/1G.file
/home/lpstudy/test
获取文件或者目录的父路径
[lpstudy@air test]$ dirname /a/b/c
/a/b
dmidecode
查看系统的硬件信息
各种硬件信息,非常全
[lpstudy@air test]$ sudo dmidecode
# dmidecode 2.11
SMBIOS 2.7 present.
117 structures occupying 4147 bytes.
Table at 0x000EB8C0.
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: American Megatrends Inc.
Version: 3505
Release Date: 03/13/2013
Address: 0xF0000
Runtime Size: 64 kB
ROM Size: 8192 kB
Characteristics:
PCI is supported
du
查看指定目录或者文件的磁盘占用率(disk usage)
重要参数: --max-depth=N
用来表示要查看当前目录到哪一层级别
du -sh . 查看当前目录下的全部数据的空间占用
du --max-depth=1 -h . 查看当前目录下的文件和目录的磁盘占用(每个文件或者目录一行)
echo
打印文本或者变量到控制台
echo hello 输出hello
echo $name 输出变量name的值
ed
文本编辑器
个人一次都没有用过,没啥建议,一直用vim,不再介绍。
eject
弹出光盘
env
显示或者设置环境变量
env BOOK=linux 设置
exit
退出当前的shell
expand
将tab替换为空格
expr
计算器,支持简单的+,-,*,/,%
expr 7 + 2
expr 7 - 2
expr 7 \* 2
expr 7 / 2
expr 7 % 2 求余
factor
分解质因子
[lpstudy@air test]$ factor 120
120: 2 2 2 3 5
fgrep
其实就是grep -F选项,不处理正则表达式
fgrep "." filename 在文件中查找点
find
查找文件,选项贼多
find . -name "1.txt"
find . -name "1.txt" -type f 查看文件类型的file
fmt
针对paragraph,对文本格式化输出
fold
文本处理,对文本进行折叠
$ fold -w 10
Hi my name is himanshu Arora
Hi my name
is himans
hu Arora
free
查看内存的占用情况
grep
查找指定的pattern
grep -C 5 hello 1.txt 搜索包含hello的行,以及这个行周围的几行
grep -o "a.*b" 1.txt 搜索以a开头,以b结尾的字符串,且只输出匹配的地方
groups
列出当前用户的属组,一个用户所隶属的组
gzip
压缩文件,后缀名为gz
gunzip
解压文件,支持gzip压缩的文件
head
显示文件的前10行
hostname
显示或者设置当前系统的hostname,主机名字
注意只会临时设置,重启失效
hostname 显示hostname
hostname magic 设置hostname为magic
id
显示用户以及组信息
[lpstudy@air test]$ id
uid=542(lpstudy) gid=543(lpstudy) groups=543(lpstudy) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
kill
向指定进程发送TERM信号,杀死进程
kill run.sh 发送TERM信号
kill -9 run.sh 发送强制终止信号
killall
向给定名字的进程发送信号,这会杀死多个具有相同name的进程
last
显示最近登录的用户
ldd
查看库的依赖
$ ldd /lib/i386-linux-gnu/libcrypt-2.19.so
linux-gate.so.1 => (0xb77df000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75da000)
/lib/ld-linux.so.2 (0x80088000)
ln
链接,包含软链接和硬链接
ln 1.txt hard_1.txt 创建1.txt的硬链接
lln -s 1.txt soft_1.txt 创建1.txt的软链接
locate
文件搜索
它与find的区别是find功能更强大,这个搜索非常快,它是基于db的。
每天由crontab来更新db,因此新创建的文件无法立刻被搜索到。要立刻搜索,需要updatedb
命令。
locate filename
logname
查看当前登录的用户名
[lpstudy@air test]$ logname
lpstudy
[lpstudy@air test]$ w
14:47:55 up 16 days, 20:52, 3 users, load average: 2.63, 2.69, 2.71
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
lpstudy pts/2 XXX 12:32 2:15m 0.01s 0.01s -bash
lpstudy pts/3 XXX 12:32 0.00s 0.31s 0.03s w
lpstudy pts/0 XXX 12:32 2:15m 0.00s 0.00s -bash
[lpstudy@air test]$ who
lpstudy pts/2 2018-11-08 12:32 (XXX)
lpstudy pts/3 2018-11-08 12:32 (XXX)
lpstudy pts/0 2018-11-08 12:32 (XXX)
未完待续。。。