|
Linux这么多命令,通常会让初学者望而生畏。下面是我结合日常工作,以及在公司的内部培训中,针对对Linux不是很熟悉的同学,精选的一批必须要搞懂的命令集合。 1 l/ B4 {$ W8 V4 t0 o" C : ~5 |& J. s9 y0 G9 i 任何一个命令其实都是可以深入的,比如tail -f和tail -F的区别。我们不去关心,只使用最常见的示例来说明。本文不会教你具体的用法,那是抢man命令的饭碗。这只是个引导篇,力求简洁。2 f4 w2 @$ D& k- N" A: d- h + u9 r8 p" N9 B) _1 u7 g 学习方式:多敲多打,用条件反射替代大脑记忆—如果你将来或者现在要用它来吃饭的话。其中,也有一些难啃的骨头,关注小姐姐味道微信公众号,我们一起用锋利的牙齿,来把它嚼碎。* Z0 h0 ~) J3 W: r& ~ 4 B2 k( E- D# G9 f% I 1 `2 S0 ^0 I9 G& ~1 \) [ 内容:" T4 r! ^# Q( M# B- y ✔ 目录操作 ✔ 文本处理 ✔ 压缩; x+ h% d: I2 d/ o* e+ T ✔ 日常运维 ✔ 系统状态概览 ✔ 工作常用2 b8 ` X: }) G m ) F& |8 H, Z+ r2 v0 y ) W4 E T, A" u0 c; c* J 目录操作6 U/ d$ p+ y* o8 x3 \ v * |& N. j+ x' k7 I 工作中,最常打交道的就是对目录和文件的操作。linux提供了相应的命令去操作他,并将这些命令抽象、缩写。# _7 M2 S; ~, }* W- @5 K& Y 基本操作 / F' e# X$ H5 B8 H. B% i" x 可能是这些命令太常用了,多打一个字符都是罪过。所以它们都很短,不用阿拉伯数字,一个剪刀手就能数过来。* r* h4 _/ ]* A( _ J0 {
3 @* M) Q( ~7 s3 [ 看命令。 mkdir 创建目录 make dir cp 拷贝文件 copy mv 移动文件 move rm 删除文件 remove) T3 r# `6 T% Z i9 P8 ~0 y! y5 U( m2 i . h5 ?1 I. P/ K 例子:: Q0 Q$ u$ \' k2 U% l8 E" A* m # 创建目录和父目录a,b,c,d mkdir -p a/b/c/d ' _9 j( t& p3 u& Q! b $ E' k7 B8 ~' K8 u # 拷贝文件夹a到/tmp目录 cp -rvf a/ /tmp/& r5 i4 ^. I/ n ( |0 a8 |/ O5 n) V) J/ g/ z1 t # 移动文件a到/tmp目录,并重命名为b& s3 ?$ r1 j# I( V# n% w! P mv -vf a /tmp/b" w6 q; B5 v, w$ U( R; e : M j- n9 y, H+ Y $ q" z( N3 _ F # 删除机器上的所有文件2 y( J+ n/ `6 @ r4 y6 V rm -rvf / T/ y" V/ K: Z2 D$ }6 i 漫游, S8 ~3 N" @0 B# y4 w2 D& y linux上是黑漆漆的命令行,依然要面临人生三问:我是谁?我在哪?我要去何方? : n+ T# {/ O+ b) |* U3 y ls 命令能够看到当前目录的所有内容。ls -l能够看到更多信息,判断你是谁。 pwd 命令能够看到当前终端所在的目录。告诉你你在哪。. `* n. m Q$ A, F cd 假如你去错了地方,cd命令能够切换到对的目录。 find find命令通过筛选一些条件,能够找到已经被遗忘的文件。 ) V9 X6 k2 l* m4 `/ G3 t2 o$ H8 _ 至于要去何方,可能就是主宰者的意志了。 文本处理8 Y9 p5 ^) i* ^7 d 这是是非常非常加分的技能。get到之后,也能节省更多时间来研究面向对象。小姐姐味道已经输出了“最常用的vim、sed、awk技巧系列”。下面附上链接。0 T7 p# L1 k# V% E2 ]! i 《Linux生产环境上,最常用的一套“vim“技巧》! ]! f, H2 x, i7 |/ z" _ 《Linux生产环境上,最常用的一套“Sed“技巧》4 ^4 r4 g; \! d0 o 《Linux生产环境上,最常用的一套“AWK“技巧》
5 H1 u; y7 B4 o' B6 f) i6 y. z* v ( a. W) t4 g! \) _) M/ A0 T Z! ^! u 查看文件 ) ?# A# ~( z- _. v1 {+ {2 X3 y) d % \+ q8 u f* t- t/ l3 h! f cat 最常用的就是cat命令了,注意,如果文件很大的话,cat命令的输出结果会疯狂在终端上输出,可以多次按ctrl+c终止。 3 w! u5 f$ b5 @3 ]; F$ z # 查看文件大小 du -h file8 p# I- v) i4 J; x( z # 查看文件内容 cat file( B; W3 C V7 H7 `0 s% f3 S& M. e d less. `+ j/ x9 Y" ]7 c4 } 既然cat有这个问题,针对比较大的文件,我们就可以使用less命令打开某个文件。 类似vim,less可以在输入/后进入查找模式,然后按n(N)向下(上)查找。+ `* s3 R$ M W- s, B6 { 有许多操作,都和vim类似,你可以类比看下。' H# Z* r; N' }' e: \& K1 S4 A ( S3 ?# K2 b1 \7 @; b' m2 ^ tail 大多数做服务端开发的同学,都了解这么命令。比如,查看nginx的滚动日志。0 _- N7 a0 H7 G# _; @ ! I. Q6 [' p- V6 @4 j tail -f access.log/ d# ~# Y- X W) _ tail命令可以静态的查看某个文件的最后n行,与之对应的,head命令查看文件头n行。但head没有滚动功能,就像尾巴是往外长的,不会反着往里长。 ' y! Z3 w" ^8 X' u2 } tail -n100 access.log( d5 e1 V4 N6 f, P. X4 w head -n100 access.log L( D' _, _& u 统计 % E9 w( X/ ^) ^" K" @. B; m- J: A sort和uniq经常配对使用。1 _( ^& p1 d) A: \ sort可以使用-t指定分隔符,使用-k指定要排序的列。 ; K: d6 N3 r4 D: s J8 M" p/ k 下面这个命令输出nginx日志的ip和每个ip的pv,pv最高的前10 & I ]/ C' j$ h1 X #2019-06-26T10:01:57+08:00|nginx001.server.ops.pro.dc|100.116.222.80|10.31.150.232:41021|0.014|0.011|0.000|200|200|273|-|/visit|sign=91CD1988CE8B313B8A0454A4BBE930DF|-|-|http|POST|112.4.238.213 2 u% F9 x1 J) | i awk -F"|" '{print $3}' access.log | sort | uniq -c | sort -nk1 -r | head -n105 k* ]0 D4 c) ~7 Y/ O- ~% { 其他 4 x& @5 H# N2 |' A! Y% `* { grep grep用来对内容进行过滤,带上--color参数,可以在支持的终端可以打印彩色,参数n则输出具体的行数,用来快速定位。4 b- g$ G$ u' B. B* n( Z 比如:查看nginx日志中的POST请求。 grep -rn --color POST access.log 推荐每次都使用这样的参数。6 v, r1 | O/ T5 t$ ~) v, N) g 1 ^# k# W8 t4 g3 y& W 如果我想要看某个异常前后相关的内容,就可以使用ABC参数。它们是几个单词的缩写,经常被使用。 A after 内容后n行/ N4 K6 t- V9 q& g8 @ B before 内容前n行 C count? 内容前后n行 就像是这样:5 |. n4 D# b% E / O3 [* j9 U& f) K' w6 _ 1 C0 x$ i5 S I# a grep -rn --color Exception -A10 -B2 error.log diff. q5 Z& u6 _3 n. Q$ K$ W! v 0 u8 P& x" z: ]9 l7 p. i- O" S diff命令用来比较两个文件是否的差异。当然,在ide中都提供了这个功能,diff只是命令行下的原始折衷。对了,diff和patch还是一些平台源码的打补丁方式,你要是不用,就pass吧。. j/ }, w7 _2 s- S- {. g# @ $ y8 [3 N$ _( r 压缩4 M( G( j* u3 _ , M. b# Y O9 \ ; U% H( Q1 o+ \6 W6 F/ j) W* M 为了减小传输文件的大小,一般都开启压缩。linux下常见的压缩文件有tar、bzip2、zip、rar等,7z这种用的相对较少。: S3 j* K2 E9 b( V/ z# m0 ~2 Y
2 K5 j9 F9 I, e7 K .tar 使用tar命令压缩或解压3 w3 C2 A/ l4 I .bz2 使用bzip2命令操作* Q$ I U9 v5 H; i) E .gz 使用gzip命令操作 .zip 使用unzip命令解压 .rar 使用unrar命令解压 8 k1 Q8 ^0 V S a 最常用的就是.tar.gz文件格式了。其实是经过了tar打包后,再使用gzip压缩。/ }& G0 z- y1 v) b 创建压缩文件$ z# s1 `( C; K' D) t) I$ j , T; a4 S6 x( j' S1 e/ L tar cvfz archive.tar.gz dir/9 z1 |7 V0 t. F/ @ 解压 3 t x. [: R: f q6 L tar xvfz. archive.tar.gz {% V. k; y! d6 c+ M 快去弄清楚它们的关系吧。 9 Q4 l) U+ k. u1 j5 c! T 日常运维' {& P0 {, F8 g 开机是按一下启动按钮,关机总不至于是长按启动按钮吧。对了,是shutdown命令,不过一般也没权限-.-!。passwd命令可以用来修改密码,这个权限还是可以有的。. r" d$ j8 G7 g! @
5 Y% D" s( D5 d V# L6 [$ e : t3 s! O0 [) N9 o0 T. u ) f3 N5 M2 z0 i# X mount0 f2 }, l. Y; }: f: c2 |: C mount命令可以挂在一些外接设备,比如u盘,比如iso,比如刚申请的ssd。可以放心的看小电影了。 1 @) `- p$ j/ i( J% u8 D, F: N mount /dev/sdb1 /xiaodianying4 ~* X9 j. U# X, Y% K) s chown chown 用来改变文件的所属用户和所属组。 chmod 用来改变文件的访问权限。 : D& u3 ] D# Y% ?' r" i$ W 这两个命令,都和linux的文件权限777有关。8 V+ g1 d$ m, n 示例: 5 b! \9 F6 z' p# g' X9 X; S+ `1 u' a # 毁灭性的命令8 K5 |2 T: J( E8 B+ G" g' K chmod 000 -R / 0 \/ x: h" P B+ B, C $ `8 O( j) Q3 p ^8 g+ @! G # 修改a目录的用户和组为 xjj$ w' J1 a( w2 v5 H4 G chown -R xjj:xjj a8 U8 w& h# r& `; n) n # 给a.sh文件增加执行权限(这个太常用了)* n" k( `4 `$ D) c4 @ chmod a+x a.sh) \3 s, T3 ?$ T' R, w3 D. u. b yum# t3 r: M3 {, X- _7 _ 假定你用的是centos,则包管理工具就是yum。如果你的系统没有wget命令,就可以使用如下命令进行安装。 / z7 i H9 v; o! S4 ` yum install wget -y systemctl 当然,centos管理后台服务也有一些套路。service命令就是。systemctl兼容了service命令,我们看一下怎么重启mysql服务。 推荐用下面这个。- Z/ s* m: a3 W" S/ ~" c7 [+ j& j9 N . r5 J3 d: |) A, m8 g service mysql restart systemctl restart mysqld* g6 q( k; }5 Y/ V/ l0 r, w. R 对于普通的进程,就要使用kill命令进行更加详细的控制了。kill命令有很多信号,如果你在用kill -9,你一定想要了解kill -15以及kill -3的区别和用途。9 {% G6 l. h+ s ; k6 ]& A1 k) C& f9 k su# r8 H8 J2 [7 {/ A7 E su用来切换用户。比如你现在是root,想要用xjj用户做一些勾当,就可以使用su切换。 : Q/ b+ F& a% ~, Z su xjj su - xjj -可以让你干净纯洁的降临另一个账号,不出意外,推荐。3 O9 g4 E5 L7 _( D . v& l4 b' }3 t! ]* W0 Q 3 @* ]- t, h) ^+ T7 a0 | 系统状态概览) J2 G. ]2 |4 U1 @. L 登陆一台linux机器,有些命令能够帮助你快速找到问题。这些命令涵盖内存、cpu、网络、io、磁盘等。如需要更多了解,参考五件套。比较高阶一些。 7 T U& ]. d. {) z' X ) T8 M& ^( |) d7 |( g; D Linux之《荒岛余生》(一)准备篇 Linux之《荒岛余生》(二)CPU篇* O& z5 ?$ K# G* t- w Linux之《荒岛余生》(三)内存篇/ a" u1 c8 Y2 k$ A& n, e Linux之《荒岛余生》(四)I/O篇 Linux之《荒岛余生》(五)网络篇0 m+ U+ U: t8 Z3 W+ r. i& c, N/ g
+ J! X- `/ r) n. {1 E% ] # ?& o5 U1 ]+ f, F, L7 }+ u: f. d # |! t9 `5 Y: I; z, F* w uname7 H- X$ J( J3 J9 G2 N r : a1 E* {' x. X* N' h. G uname命令可以输出当前的内核信息,让你了解到用的是什么机器。/ t* a. s) g& C! {* q, B' F/ f; h % a- W0 l& O: U8 L uname -a- q7 }% Y. {" e* W2 k1 {" ]% A7 S ps! B. d9 A) N1 J* Q" g ps命令能够看到进程/线程状态。和top有些内容重叠,常用。 ' V' y- l: [+ _/ i; |5 c1 J0 N # w% s R6 R- O7 m% r" G% l. P ^ # 找到java进程) `- C0 T5 H2 i; q5 E4 U( X ps -ef|grep java top( \$ ^6 J; S1 ]8 m# S$ U3 r 系统状态一览,主要查看。cpu load负载、cpu占用率。使用内存或者cpu最高的一些进程。下面这个命令可以查看某个进程中的线程状态。- n: q( n( b6 H1 @+ k6 v2 S1 U top -H -p pid free7 \9 ^: y- ~* I! T( `2 B top也能看内存,但不友好,free是专门用来查看内存的。包括物理内存和虚拟内存swap。 6 P; I6 g3 n7 l! o1 C df* `8 Z* m! |4 B x4 B( c/ o df命令用来查看系统中磁盘的使用量,用来查看磁盘是否已经到达上限。参数h可以以友好的方式进行展示。" Y" Q& B7 l7 L) z5 O / k- U& e' {" ~ df -h! h1 m& u( L( a' q Z ifconfig 查看ip地址,不啰嗦,替代品是ip addr命令。 3 z2 Q' k3 g8 j9 I. s& q2 ` ping 至于网络通不通,可以使用ping来探测。(不包括那些禁ping的网站) " f6 `7 B8 C' x5 }& I netstat9 A( ?9 M+ z' J* Y6 w1 ^ 虽然ss命令可以替代netstat了,但现实中netstat仍然用的更广泛一些。比如,查看当前的所有tcp连接。 6 A* k" G8 K8 \- l+ ^& O netstat -ant 此命令,在找一些本地起了什么端口之类的问题上,作用很大。 ! G$ s m6 V3 E& N 工作常用 ! u' B' _, F$ p4 O) V* d/ u 还有一些在工作中经常会用到的命令,它们的出现频率是非常高的 ,都是些熟面孔。7 X8 |. |. V7 {+ `9 x
) Y3 u' @" f8 O u % A4 p4 E' X, _5 p0 M$ I export 很多安装了jdk的同学找不到java命令,export就可以帮你办到它。export用来设定一些环境变量,env命令能看到当前系统中所有的环境变量。比如,下面设置的就是jdk的。 . c$ s* z) B6 d3 ^/ K3 S export PATH=$PATH:/home/xjj/jdk/bin 7 j K8 V) p2 E0 W9 X0 x U 有时候,你想要知道所执行命令的具体路径。那么就可以使用whereis命令,我是假定了你装了多个版本的jdk。# F: C& D. K* X( `% t) r9 f 3 `7 Z- s N' Q/ \7 n2 Z. m) C7 ` crontab2 Y# [; j. p( s" h& S& b: {% ] 这就是linux本地的job工具。不是分布式的,你要不是运维,就不要用了。比如,每10分钟提醒喝茶上厕所。/ b- X% J6 |% {& T F8 E$ E9 G. T 2 L4 j; ^7 t- G5 M" n0 `2 e / d' h; ]7 c/ h- \6 X */10 * * * * /home/xjj/wc10min date( H3 W- `9 e; e% Q: R date命令用来输出当前的系统时间,可以使用-s参数指定输出格式。但设置时间涉及到设置硬件,所以有另外一个命令叫做hwclock。 1 K0 V$ r' d" P' x: i" i- n" P8 `8 } xargs4 P3 J2 J! R# Z) v1 X" u xargs读取输入源,然后逐行处理。这个命令非常有用。举个栗子,删除目录中的所有class文件。 ; _9 ]' |8 E4 G find . | grep .class$ | xargs rm -rvf5 W' t5 J0 v9 m( z- s" @ #把所有的rmvb文件拷贝到目录2 {/ Q. H' I8 k8 ]% J( U% n2 f; ? ls *.rmvb | xargs -n1 -i cp {} /mount/xiaodianying 网络 linux是一个多作业的网络操作系统,所以网络命令有很多很多。工作中,最常和这些打交道。' r. [" b8 E2 ^, o0 O - b! N6 s7 w" U" Q/ o $ D3 ? y! V/ F' n8 Q/ c4 C7 x5 p ssh* ]. f7 N: Q9 A' T 这个,就不啰嗦了。你一定希望了解ssh隧道是什么。你要是想要详细的输出过程,记得加参数-v。 3 A! `3 X4 A8 @! |+ G3 E( c' q/ { scp scp用来进行文件传输。也可以用来传输目录。也有更高级的sftp命令。 7 Y* s' g& s r- p& M/ [0 v+ J0 x 3 ?1 a7 T; ^. Y. e# J# p scp a.txt 192.168.0.12:/tmp/a.txt9 b. n. E8 i n% Y. E% Q scp -r a_dir 192.168.0.12:/tmp/ wget 你想要在服务器上安装jdk,不会先在本地下载下来,然后使用scp传到服务器上吧(有时候不得不这样)。wget命令可以让你直接使用命令行下载文件,并支持断点续传。 * J! o, m( h% z$ K' |; \ wget -c http://oracle.fuck/jdk2019.bin+ ]1 ~0 H( u) m' \9 `. a mysql mysql应用广泛,并不是每个人都有条件用上navicat的。你需要了解mysql的连接方式和基本的操作,在异常情况下才能游刃有余。 mysql -u root -p -h 192.168.1.2# b+ P. U, n" `3 z, t3 S6 ^ 7 G1 J0 N2 R: B3 j- M |
微信公众号
手机版