Linux linux 知识大战 (试运行)--linux 命令接龙

stack · 2017年05月03日 · 最后由 轻轻一· 回复于 2018年06月11日 · 547 次阅读

在决定进行为期 4 个月的分享后,Lihuazhang同学提出了 “搞一个 linux 知识大战” 的建议,多位同学表示支持和赞同。虽然关于 “大战” 或交流的形式,我并没有特别好的点子。但这个想法本身,我觉得很有意义,也会很有趣,因而觉得应当立即开始,在过程中完善它。

接龙的意义

linux 有着非常丰富的命令,我想,通过命令接龙,应该可以达到以下效果:

  • 增长见识
    让参与者见识和学习到不同的命令、不同的用法、不同的使用场景、不同的经验和坑等等;

  • 深入理解
    多个参与者对同一命令进行详尽的接龙,自然而然会使你更加深入地理解和掌握这些命令;

  • 用输出倒逼输入
    可以预见的是,在进行了一段时间的接龙后,对 linux 的掌握程度就容易见分晓了,要想跟得上接龙的节奏,就不得不去学习和钻研;

  • 每日复习
    每天的参与,阅读已有的接龙,思考要接龙的内容,梳理在接龙中的收获,这无形中就在不断地复习,艾宾浩斯遗忘规律也不能奈你何!

  • 挖掘需求
    相信在接龙的过程中,可以挖掘出更多的关于 “知识大战” 的想法和点子;

如何参与

具体到如何参与,我有一些初步的想法:

  1. 参与形式:在testerhome本帖的回帖区发一个命令或一个命令的某个参数,说明其作用和用法
    这里,我更加提倡你多说点什么,比如你在这个命令上走过的弯路,积累的经验,踩过的坑,这个命令适用的场景等等。比起一个命令的简单描述,这些才更有价值的,不是吗?另外,即便是新学习的命令,你有没有亲自使用和实践过,都直接影响了你参与的质量。反过来,通过你的接龙内容也能知道你对这个命令的掌握程度。
    虽然对一次接龙的最少要求是命令的某一个参数的用法,但如果你有能力和精力,大可对一个命令进行更加全面和详细的介绍。

  2. 不得重复
    发相同的或相似度极高的命令,对于接龙来说没有什么意义,对你自己的提高也没有意义。

  3. 拒绝拿来主义
    请不要直接从别的网站复制粘贴,接龙不仅仅是关于数量的玩法,更是关于内容和质量的玩法。

  4. 每日一个命令即可
    不要一天内发多次,或者至少,不要在接龙的前期就这么做。我更希望接龙的参与人数尽可能地多,每条接龙的内容质量尽可能地高,接龙玩法的持续时间尽可能地持久……

  5. 对接龙内容的认同
    如果别人的接龙内容给你带来了有价值的信息,不要回复那些礼貌用语,直接点赞是最礼貌的,反过来点赞数也体现了接龙内容的质量。

  6. 应当不同见解
    如果别人的接龙内容,你有不同的见解或发现了错误,不要直接回复,请先继续接龙,然后附带上你的不同见解,或者对错误的指正(你可以通过@的方式)。
    每一条回帖应当首先是一条接龙内容,其次才是其他内容。

  7. 回帖的格式
    建议使用 markdown 语法。

回头望去,一个试运行的活动,竟然有这么多条条框框,是不是过于苛责了?所以,大家有不同意见请提出来,一起改进。

关于总结

根据接龙活动参与的密集程度,我会阶段性地总结出来。同时,也建议任何一个参与者都能根据参与和学习的情况进行总结和分享。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 27 条回复 时间 点赞

挺好的

—— 来自 TesterHome 官方 安卓客户端

tar -cvf

tar -cvf /date/package.tar /package 

linux 是文件系统,把/package 下的文件不压缩打包到/date/package.tar
在游戏产业内,比较常用的。

zip -r compressed.zip path/to/dir -x *.git*

# 压缩同时不包含 .git 文件夹
zip -r compressed.zip path/to/dir -x \*.git\*

收集覆盖率这种场景经常需要把本次构建的整个文件夹(包括源码和生成的 class 文件)压缩上传服务端。此时 .git 文件夹一般是不需要一起上传的,通过这个命令就可以排除这个文件夹。

PS:一直在用一个很好用的 linux 命令帮助工具:tldr 。现在遇到命令忘了参数怎么写都直接用这个工具来查。tldr 是 too long don't read 的缩写,也非常好记。

rm -rf *

恶魔之命令,从删库到跑路的必备命令。
执行效果把 * 或者指定的文件 (夹) 及其子文件 (夹) 全部删掉

请问楼下,如何释放端口?

举例:假设我要释放 7071 端口

netstat -tln | grep 7071           # 查看7071端口的占用情况
lsof -i:7071                       # 查看7071端口的进程ID【root权限】
kill -9 进程ID

查询进程名后,9-15 正好是 pid 的位置,xargs 执行前面,批量杀进程

# 管道符隔开,查询出gamesever关键字和除开grep命令本身的进程
ps -ef | grep gamesever | grep -v grep | cut -c 9-15 | xargs kill -s 9
8楼 已删除

basename从文件名中去掉目录和后缀,用法:
basename NAME [SUFFIX]

可见,后缀 SUFFIX 是可选参数:
如果没有 SUFFIX,basename 将去掉 NAME 参数中的目录;

$ basename ../get_from_db/get_user_qun/getUserinfo.sh 
getUserinfo.sh

如果有 SUFFIX,除了去掉 NAME 参数中的目录,还会去掉 SUFFIX(如果与 NAME 的后缀匹配的话);
后缀不一定是.即后面的部分,如:

# 后缀匹配的情况
$ basename ../get_from_db/get_user_qun/getUserinfo.sh .sh
getUserinfo
# 后缀匹配的情况
$ basename ../get_from_db/get_user_qun/getUserinfo.sh h
getUserinfo.s
# 后缀匹配的情况
$ basename ../get_from_db/get_user_qun/getUserinfo.sh o.sh
getUserinf

# 后缀不匹配的情况
$ basename ../get_from_db/get_user_qun/getUserinfo.sh get
getUserinfo.sh

其实参数 NAME 不一定是一个真实存在的文件名:

$ basename this_file_not_exist
this_file_not_exist
$ basename this_file_not_exist st
this_file_not_exi

我对 basename 的使用场景,主要是在 shell 脚本中获取一个文件路径的纯文件部分,即basename NAME的作用,少数情况下会用到basename NAME SUFFIX

另外,建议大家回帖时首先参与接龙活动,然后可以提问,发表其他评论等。

每一条回帖应当首先是一条接龙内容,其次才是其他内容。

0x43 回复

fuser -n tcp -k <PORT>

mkdir 建立目录
mkdir -m 711 test2 建立时直接设定权限
mkdir -p test1/test2/test3/test4/test5 建立多层目录

#history检查历史命令,检索出使用频率最高的命令一列
#head在linux下默认是10行
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head 

测试还是会经常用到的。

stack #13 · 2017年05月07日 Author

dirname从文件名中去除非目录的后缀部分,dirname 也是在 shell 中常用的命令。
用法:
dirname NAME
举例:

$ dirname /a/b/c/
/a/b
$ dirname /a/b/c
/a/b
$ dirname a/b/
a

特殊情况:

$ dirname dir1
.
$ dirname /
/

同样地,dirname 不关心 NAME 是否是真实存在的。

批量删除某目录下的,所有匹配的文件。
下面的例子是删除 所有名称中有 soptran. 文件

cd /path/to/
ls -al |grep 'soptran.'|grep -v grep|awk '{print $9}'|xargs /usr/bin/rm

stack #15 · 2017年05月08日 Author

tee 从标准输入读取内容,将内容输出到标准输出设备,同时将这些内容保存到文件中。
有时候,你既希望看到标准输出,又希望它保存到文件中,我想,tee 命令就是为这种情况而生的。

比如,你执行ls -1时会输出什么内容,使用tee时就会显示什么内容,只不过它的另外一个作用是将这些内容保存到了temp文件中。

ls -1 | tee temp
bin
config
cat temp 
bin
config

注意:

  1. 如果 tee 后面的文件不存在,则会自动创建;
  2. 默认情况下,tee 会覆盖这个文件;
  3. 如果希望追加到文件中,可以使用-a参数;

当单独使用 tee 时,tee -i file_name表示不接受中断信号,即要想退出,需要使用ctrl-d,而不是ctrl-c

用 tail -f 命令查看 log,并将关键字 ERROR 以红色字体显示

tail -f log.log| perl -pe 's/(ERROR)/\e[1;31m$1\e[0m/g'

rmdir 删除空的目录
rm -rf 删除一个不为空的目录

在脚本中使用 sudo
echo <password> | sudo -S <command>
-S sudo 从标准输入读取密码

Ctrl+L 清屏
Ctrl+R 查找历史命令

stack #20 · 2017年05月09日 Author

date +%s获取当前的 unix 时间戳:

$ date +%s
1494307594

date -d @unix时间戳把 unix 时间戳转换为中央标准时间:

$ date -d @1494307594
Tue May  9 13:26:34 CST 2017

无论是编写脚本,还是分析日志,对 unix 时间戳的操作总是不可避免的。

alias ls='rm -f'

sudo iptables -A OUTPUT -p tcp -d 1.1.1.1 --dport 8088 -j REJECT 断开端口号

sudo iptables -L 查看端口断开情况

sudo iptables -D OUTPUT 1 恢复断开的端口

stack #23 · 2017年05月11日 Author
$ cat temp 
1    2  3

这样并不能清晰地知道文件中到底是哪些字符,这时可以使用 od 命令:

$ od -tc temp
0000000   1  \t       2           3  \n
0000010
$ od -ta temp
0000000   1  ht  sp   2  sp  sp   3  nl
0000010

还支持其它许多参数,有待研究。

stack #24 · 2017年05月12日 Author

time command
time 命令用来计算跟在它后面的 command 命令的用时,这样,当你有多条命令可以完成任务时,可以用 time 选择一个效率高的。

Chmod 命令

当需要删除几百 G 大小的小文件时,下面命令非常实用

find . -type f -name '*' | xargs -L 100 rm

find /Users/smzdm/Library/Developer/Xcode/DerivedData/WebDriverAgent-berhsukliphpjzfgfzczdrzojkap/Logs/Test/Attachments -type f -name '*' | xargs -L 100 rm

-L 100 表示每找到 100 个文件删除一次,直到删除完毕。
如果不加这个参数,会全部查找完毕后,再执行删除操作,消耗时间极度长。中间中断了,就需要重新来,之前的等待就浪费了。

stack #27 · 2017年05月16日 Author

有时候需要遍历一些目录去执行脚本或命令,你当然可以写个脚本,但这样的需求又不常用,这时写个一句话的循环会更高效些:

for i in `ls -1`; do ls -1 $i | wc -l ;done

gcc ... -o ...预编译

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册