本文介绍我常用的linux命令大全。知识和经验在于积累和总结。
1. cd
cd / 切换到根目录
cd 或者cd ~ 切换到当前用户主目录, 其中~表示用户主目录
cd .. 切换到上级目录
cd ../.. 切换到上上级目录
cd /mnt/sdcard 切换到/mnt/sdcard目录
cd - 切换到上次目录, 高级的用法的, 不是所有人都知道。
2. ls
ls 简单列举
ls -l 详细列举, 可用ll哦(当然, 这个是用了alias设置的)
ls -t 按时间列举
ls -r 逆向列举
(因此, ls -lrt就非常有用了, 按时间顺序逆向列举, 最新的在最下面, 非常便于眼睛观察! 我在实际中经常用ll -rt)
ls -rS 当前目录文件按大小排序(非常常用啊)
ls -a 理解所有
ls -lta 上述组合
ls /mnt/sdcard 不解释了
ls *.txt 列举所有的.txt文件
ll -Sr 文件从小到大排序
ll -h a.txt 计算a.txt的大小(以human readable的方式)
3. pwd
pwd 查看当前目录
4. touch
touch a.txt 用于创建一个a.txt空文件, 如果a.txt已经存在, 则不做任何操作
51. cat
cat a.txt 查看a.txt中的内容
cat -n a.txt会显示行号, 利用cat -n a.txt > b.txt可以将带行号的内容重定向到b.txt中.
cat -b a.txt会显示行号, 不过呢, 空白的编号就不显示了.
5.2 tac
看, tac和cat刚好相反, 是从文件最后一行开始显示。
5.3. nl
nl也是用于查看文件, 但带行号, 如nl a.txt实际上等价于cat -n a.txt
6. more
more a.txt, 分页查看a.txt中的内容
空格键表示下一页, enter键表示下一行, 合情合理啊, 空格键本来就比enter键大
b或ctrl b表示向前翻页
:f显示当前行数和文件名
q表示离开该文件, 也可用ctrl + c
7. less
less a.txt 分页查看a.txt中的内容, 比more稍微强大, 前后翻。
以后用more的时候直接用less.
/int 向下搜索int, 会把所有的int标出来, 所以随你滚动吧。
8. head
head -n 10 a.txt 查看a.txt中的头10行
9. tail
tail -n 10 a.txt 查看a.txt中的尾10行
问题:要看程序第10行到第20行的信息, 该怎么办呢? 没有这个命令啊, 其实, 用下面命令可以搞定:
head -20 a.txt | tail -11
另外, tail还有一个重要用途, 比如log.txt日志文件在动态变化, 那么如何观察到它的动态变化呢? 用tail -f log.txt即可。 非常有用。
10. grep
grep hello a.txt 在a.txt中查找hello串
grep "hello world" a.txt 找这种串, 必须有引号(另外, a.txt可用*.txt替换, 表示在所有.txt文件中搜索, 很有用啊)
grep -i xxx 忽略大小写
grep -v xxx 忽略有xxx的行,在过滤中很有用啊
(下面这个我常用)
grep -2 hello test.txt 搜索test.txt中的hello, 另外附上前后两行 有的shell还支持grep -C 2 hello test.txt, 意思跟这个一样。 实际中, 我经常把-C 2放在后面, 且可以写到一起, 看起来也爽。 比如:grep hello test.txt -C 2
grep -B 2 hello test.txt 搜索test.txt中的hello, 另外附上前两行 (before)
grep -A 2 hello test.txt 搜索test.txt中的hello, 另外附上前两行 (after)
那问一下, 如果要过滤某个单词xxx, 该怎么过滤呢? cat a.txt | grep -w xxx 千万要注意, -w不能少。
11. find
find a.txt 在当前目录下查找a.txt文件
find -name a.txt 在当前目录和子目录中查找a.txt文件
find -name "a*" 在当前目录和字母中查找以a开头的文件(其实也包括文件夹)
find -iname xxx 不区分大小地去找文件
(当然上述也可以针对文件夹)
find -L -name a.txt (考虑到某些软链目录下有a.txt, 必须加-L, 曾错过)
12. whereis
whereis ls 谁用谁知道
13. man
man ls 谁用谁知道
man socket 谁用谁知道
我差点就想说man万能了。
14. whatis
whatis ls 谁用谁知道
15. who
who 谁用谁知道
有一次, 大家在一个会议室开会, 某同事要做报告, 但不记得自己电脑的ip了, 也就无法远程了。 怎么办? 我突然想, 可以在linux服务器上用who命令查看大家的登录记录啊, 高。
16. whiami
whoami 谁用谁知道
17. uname
name -a 系统信息, 很重要很常用的命令啊
18. mkdir
mkdir test 建立test目录
make test1/test2 有误, 应该用mkdir -p test1/test2, 这样, 不管当前目录下有没有test1文件夹, 都不会有错。
18. rmdir
rmdir test 删除空的test目录, 如果目录不为空, 则删除不了, 所以rmdir基本就是个鸡肋
19. mv
mv主要用于移动文件或目录, 常用mv a.txt a.txt.bak对a.txt进行备份
20.1 cp
cp主要用于复制文件或者目录, 千万要注意, cp在执行复制操作的时候, 会自动跳过目录, 所以并没有复制目录, 但可以用下面的方式进行解决:
cp -r file test 将file目录拷贝到test目录下(不加-r是绝对不行的)
cp -r file/* test 将file目录下的所有东西拷贝到test目录下(不加-r是绝对不行的)
20.2 scp
scp主要是用来实现不同机器之间的拷贝, 比如我常常这么用:
scp -r user@1.1.1.1:/usr/local/bin/test ./ 把1.1.1.1机器上的/usr/local/bin/test目录拷贝到当前机器的当前目录, user是1.1.1.1机器的一个用户名, 执行完这条命令后, 系统会提示用户输入1.1.1.1的user用户的密码, 这个是必然的哈。
scp -r ./test user@2.2.2.2:/usr/local/bin 从本地复制到2.2.2.2这个机器上。
21 rm
rm 主要用来删除文件或者目录(加-r), 千万要注意, 一定要谨慎地使用这么命令。 使用的时候, 如rm -rf test, 一定要慢, 慢, 慢。没有回收站, 不可恢复哈。
22.1. chmod
chmod是用来改变权限的
22.2 chown
chown是用来改变owner的
23 重定向 > 和 >>
echo hello > a.txt 试一下吧. 其中>和>>类似, 但有区别。
24 管道 |
cat a.txt | grep hello
25. ping
ping用于网络探测
26. ifconfig 注意, 不是ipconfig
ifconfig用于查看ip
27. telnet
telnet用于远程连接
28. netstat
netstat用于查看网路状态
29. ps
ps用来查看当前进程信息, 在有得终端上, 要用ps -ef 或者ps -aux哈
30. top
top用来查看实时进程信息
31. date
date用于查看当前日期
date -d @0 显示1970年的时间, 这个很常用
32. df
查看挂载情况。 有意思的是, umount某设备后, 再查看, 就没有了(我在android手机中umount cache, 重启后, 挂载了cache,可访问)。
33. history
history查看最近使用的命令, 比如history 22 就是查看最近使用的 22条命令, 常用啊。
34. ifconfig
用来配置网络, 用过。
35. diff
diff a.txt b.txt 比较两个文件的差异, 其实也可以用于比较文件夹的差异。
36. umount
umount /cache 卸载cache分区。
37. su (英文全程是switch user)
su 获取root权限
su meinv 或者su - meinv 或者 su --meinv 切换到美女用户进行登录
38. sudo
可以理解为临时用一下root权限, 用完后就是普通权限了。 sudo -s用于切换到root用户, 相当于su
39. tar (英文全程是tape archive, 牛逼的命令, 牛逼的缩写)
tar -cvf material.tar material 将material文件、目录打包为material.tar文件, 原来的material文件、目录不会删除。
tar -xvf material.tar 解开包包。
我在实际中用的更多的是(打包后进行gzip压缩):
tar -zcvf material.tar.gz material 打包后压缩
tar -zxvf material.tar.gz 解压缩后解包
实际上, 为了更加简便, 上述的-符号是可以省略的, 所以我经常这么用:
tar zcvf material.tar.gz material 打包后压缩
tar zxvf material.tar.gz 解压缩后解包
另外, 如果是tar.bz2文件, 那么就把上述的z改为j即可。
40. gzip
gzip a.txt 压缩(会删除原来的a.txt文件)
gupzip a.txt.gz 解压缩, 或者用(gzip -d a.txt.gz) , 会删除原来的a.txt.gz
倾情奉献: gzip -c a.txt > a.txt.gz 不会删除原来的a.txt文件哈。解压的时候也可以使用类似的方法, 避免删除原来的压缩包包。
41. od
之前一直不知道有这个命令, 现在才知道它的用途了。 有一次, 需要查看一个二进制文件中的内容, 我居然自己去写了一个程序, 虽然也可以查看到, 但是浪费了时间。 其实, 有很多小工具可以查看二进制文件, 比如ultraEdit, 比如beyondCompare, 比如linux下的od命令。我们先来生成test二进制文件:
#include <iostream>
using namespace std;
int main()
{
char str[100] = "hello\0world";
str[99] = 'x'; // 本人故意写一个'x'
FILE *fp = fopen("test", "wb");
fwrite(str, 1, sizeof(str), fp);
fclose(fp);
return 0;
}
且看linux下的od命令:
$ od -c test
0000000 h e l l o \0 w o r l d \0 \0 \0 \0 \0
0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
0000140 \0 \0 \0 x
0000144
作为英语迷, 我自然会问, od是什么的缩写呢? 原来是octal dump, 所以,看到没, 上面默认的是八进制地址哈。
42.1 md5sum
md5sum filename 计算文件的md5值, 非常有用。 我经常需要判断在某个操作前后, 文件是否变化, 那么就可以在前后分别用这个命令。
42.2 sha1sum filename 计算文件的sha1值, 在实际应用中, 有md5sum就行, sha1sum的作用并不大。
43. /bin/bash --version 查阅bash版本号, 玩过, 但几乎没什么用。
44. mount 我靠, 这么重要的命令怎么没有介绍呢?
mount 查看挂载设备
mount /dev/xxx/yyy /cache 把cache分区挂载到dev/xxx/yyy目录下
45. exit 用于退出当前shell, 比如我们在父shell中进入子shell, 如果在子shell中执行exit, 则会退出到父shell中。
46. 一个tab键用于补全, 我经常用; 连续两个tab键用于列举, 我用得少, 我每次都是先用ls查看, 这样不好啊, 以后要多用两个tab.
47. locate a.txt 在所有地方查找a.txt, 而不限于当前路径。 这么强大的命令, 我居然很少用, 丢人啊。
48. ln -s a.txt b.txt 对a.txt创建软连接(符号连接), 符号连接为b.txt, 实际上b.txt相当于a.txt的一个快捷方式。 访问b.txt, 实际上就相当于访问了a.txt. 删除b.txt, 对a.txt毫无影响。但是, 如果删除了a.txt, 则b.txt就没啥用了。 注意: 软连接也可以针对目录, 如lin /usr/local/ xxx
ln a.txt b.txt, 对a.txt创建硬连接, 也就是a.txt和b.txt绑在一起, 修改一方后, 会相互影响; 删除一方后, 对另一方没什么影响, 我试过的。
49. & 经常用于在后台执行程序, 比如./a.out &
一般来说, 如果用ctrl c, 那么前台运行的程序会自动退出。
50. kill 100
杀死进程号为100的这个进程, 我也经常用这个。
52. lsof a.txt
查找正在用a.txt的进程, 用得不多。
53. id
这个很简单的命令, 我以前还真没有用过。 该命令主要用于查阅当前登陆用户的身份, 试试吧。
54. dos2unix a.sh (或者busybox dos2unix)
将dos格式的文件转化为linux格式的文件, 我常用。
54.1 既然有dos2unix, 那自然就有unix2dos啊。
55. seq 5 用来生成1 2 3 4 5这个序列
seq 3 7 用来生成3 4 5 6 7 这个序列
seq 3 2 7 用来生成3 5 7这个序列
56. expr 1 + 2
计算1 + 2的值, 注意, +的左右必须有空格, 否则不行。 哈哈, 以后就不用计算器啦。
57. wc a.txt
显示行数, 单词数, 字节数。 这个其实也是有点用的。注意, wc不是厕所, 而是word counts
58. sort a.txt 按行进行升序排列
sort -r a.txt 按行进行降序排列
这个命令, 不会改变源文件, 只会把排序后的结果输出。这么优秀的命令, 我用得不多了。
59. uniq
对于已经排序好的序列, 删除重复的行。 经常需要与sort一起用。 当然, 这个命令也不会改变源文件。 某次, 我居然自己去写一个函数来实现sort a.txt | uniq这个功能, 哎。
60. cal
显示日历, 比date更强大。另外cal还可以显示过去和未来的calendar.
cal -j 很有意思, 能让人有时间紧迫感哈。
61. man ascii
以后再也不用上网找ascii码了。
62. xxd test.txt
显示文件的十六进制值, 非常类似于UltraEdit上的一个功能, xxd这个命令, 还是很强大的, 我经常用。
63. tree
tree -L 2 列举当前目录的二级子目录的树形结构, 很有用也很有趣。如果你的linux上没有这个命令, 那就安装一个吧。
65. bc
进入计算器, 好棒。
66. passwd
修改用户的密码, 比如passwd user1就是用来修改user1的密码, 自然地, 如果要修改root的密码, 那就用passwd root吧, 我玩过, 靠谱。
67. wget
wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz 下载这个文件, 我常用。
现在就写这么多吧, 以后记起来了, 再慢慢补充。慢慢积累, 孰能生巧。另外, 一些相对复杂或者与linux开发、调试相关的命令, 我会在后续博文中逐步展开介绍。
68. du
求文件或者目录大小, 知道现在才介绍这个命令, 晕乎。 du有很多参数, man du一下就知道了。
69. watch
在linux终端上循环执行命令, 相见恨晚啊, 比如:watch -n 1 'date'
默认情况下, watch date是两秒刷新一次。
如果有-d参数, 则会动态显示变化的区域。
70. mysql
mysql -h 1.1.1.1 -u root -P 3306 -p123\!456 db_name
mysql登录,其中密码是123!456, 由于有!,故在命令行上执行上述语句时,需要转义,否则会出现-bash: !": event not found错误。
原文:https://blog.csdn.net/stpeace/article/details/24891093