Linux 基础命令总结



1. nohup

  • nohup的作用为忽略挂断信号,使得目标进程在session关闭后仍然可以继续运行。

  • 如果我们的目标是要进程持续运行下去,那么首先我们要在末尾使用"&",将进程挂在后台运行。但是这样仍然不能保证程序会一直运行,原因是,当我们使用远程终端登入Linux时,会开启一个session,随后启动的所有进程都是这个session进程的子进程。当用户退出session时,session进程会关闭,同时所有子进程都会收到挂断信号,也会关闭。

  • 因此,如果你想让你启动的进程不被关闭,就需要忽略挂断信号,这时就会使用到nohup命令了。

  • nohup使用示例

    ~$ nohup sh ./spark-submit.sh mainClass > spark.log 2>&1 &
    其中,">"表示标准输出的重定向,"2>&1"表示将标准错误流重定向到标准输出里,
     这样就会一并输出到spark.log文件中,通过这种方式启动的进程将不会受到终端断开的影响。
    

2. tar/zip/unzip

tar命令可以将多个文件或目录打成一个tar文件

# tar命令示例
# 打包压缩
~$ tar -zcvf dir.tgz dir/
# 上述命令表示将dir目录下面的文件和子目录,打包并使用gzip压缩为一个dir.tgz文件
# z表示使用gzip压缩,如果想使用bzip2压缩,可以将z替换为j;不想压缩可以去掉
# c表示压缩,建立新的归档文件
# v表示显示指令的执行过程,即都处理了哪些文件或目录
# f表示指定备份文件名
# 这里需要注意的是,dir/的路径尽量使用相对路径,不要使用绝对路径,否则很容易踩坑

# 解压文件
~$ tar -zxvf dir.tgz -C /tmp
# -x选项表示解压,从压缩状态还原为原始状态
# -C表示指定解压后的目录位置

zip命令也是打包,不同的是打出的是zip包,并且zip默认使用deflate算法进行压缩。常用形式如下所示:

# 打包
~$ zip -r dir.zip dir/
# -r表示递归处理,压缩的是目录时,此选项是必须的
# 这条命令会把dir目录及其下所有文件和子目录,压缩成dir.zip文件

# 解压
~$ unzip dir.zip

3. gzip/bzip/zcat/bzcat

gzip和bzip2常用于文件的压缩和解压

# gzip压缩
~$ gzip -v a.txt
# -v选项会打印出压缩的比例
# 命令执行后,源文件a.txt就不见了,会产生一个新文件a.txt.gz

# gzip解压
~$ gzip -dv a.txt.gz
# -d选项表示解压,由于有v选项,所以会打印出文件的压缩比
# 命令执行后,压缩文件a.txt.gz就不见了,但会多出一个源文件a.txt

# 查看gzip压缩文件的信息
~$ gzip -l a.txt.gz
# -l选项会展示压缩文件内部的文件列表及压缩比例

# bzip2压缩
~$ bzip2 -1 -k a.txt
# -1表示使用最小压缩比,压缩速度比较快(注意,这里是数字1不是字母l)
# -k表示保留源文件,如果去掉该选项将会和gzip命令一样,只有压缩后的文件,源文件会被删除

# bzip2解压
~$ bzip2 -d -k a.txt.bz2
# -d表示解压
# -k表示保留解压前的压缩文件

有时我们想要查看下压缩文件的内容,但是又不想去解压它,这时就要用到zcat和bzcat命令了,他们分别用于查看gzip压缩文件和bzip2压缩文件。使用示例如下:

# 查看gz文件
~$ zcat a.txt.gz

# 查看bz2文件
~$ bzcat a.txt.bz2

# 我们还可以配合管道查看hdfs上的压缩文件,例如:
~$ hdfs dfs -cat /data/a.txt.bz2 | bzcat

4. chmod/chown

chmod命令用于更改文件或目录的权限,而chown用于更改文件或目录的拥有者。

# chmod语法
chmod -R [ugoa][+-=][rwx] fileOrDir...
# -R选项表示递归处理所有子目录和文件
# u表示该文件的拥有者,g表示与该文件的拥有者属于同一组(group)的用户,o表示其他用户,a表示三者都包含。
# +表示增加权限,-表示取消权限,=表示唯一设定权限
# r表示可读取,w表示可写入,x表示可执行

# 还有一种写法是通过数字来标识权限,r用数字4表示,w用数字2表示,x用数字1表示,具体的权限就是三者之和,有这个权限就加上对应的数字,无这个权限则不加。例如
~$ chmod -R 755 b.sh
# 上述命令表示b.sh将要拥有的权限为rwxr-xr-x

# chown语法
chown -R user.group fileOrDir...
# 或者
chown -R user:group fileOrDir...
# 还有一种简写形式
chown -R user. fileOrDir...
# 上述命令会自动推断出user用户所在组
# -R选项表示递归处理所有子目录和文件

5. ifconfig/ip

这两个命令常用于查看本机的IP地址,有时在定位问题时会用到

~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1454
        inet 10.19.35.248  netmask 255.255.0.0  broadcast 10.19.255.255
# 输出结果的第二行inet后面就是本机IP,为减少篇幅占用,隐藏了部分输出结果

~$ ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1454 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:2d:2e:20 brd ff:ff:ff:ff:ff:ff
    inet 10.19.35.248/16 brd 10.19.255.255 scope global eth0
       valid_lft forever preferred_lft forever
# 输出结果中inet后面就是本机IP,为减少篇幅占用,隐藏了部分输出结果

6. df/du

df命令常用于查看磁盘使用情况,常用选项如下所示:

~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G   12G  8.2G  60% /
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  401M  3.5G  11% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vdb        200G   36G  165G  18% /data
tmpfs           783M     0  783M   0% /run/user/0
tmpfs           783M     0  783M   0% /run/user/1000
# -h选项表示以人类可读方式展示,而不是直接以字节数这种不直观的方式展示

du命令常用于显示目录或文件的总大小,常用选项组合如下所示:

~$ du -sch logs/ data/
1.8G  logs/
868M  data/
2.6G  total
# -s选项表示只显示汇总摘要,不显示明细
# -c选项表示显示总和大小
# -h选项表示以人类可读方式显示

7. grep

grep命令用于过滤出符合条件的内容,该命令使用频率很高,且经常和其他命令搭配一起使用。

# 语法
grep [options] pattern fileOrDir...

其常用的选项如下表所示:

选项 作用
-c 计算符合匹配条件的行数
-A 后面跟数字N,表示除显示匹配上的行外,还显示其后面N行
-B 后面跟数字N,表示除显示匹配上的行外,还显示其前面N行
-C 后面跟数字N,表示除显示匹配上的行外,还显示其前后各N行;也可以简写成在中划线("-")后面直接跟数字。
-E 支持正则语法
-i 忽略字母的大小写
-o 只显示匹配上的内容
-R 表示递归遍历目标目录

# 使用示例
~$ grep -i datanode hdfs-site.xml
# 忽略大小写,查找包含datanode的行

~$ grep -20 -i error namenode.log
# 忽略大小写,查找namenode.log文件中包含error字样的前后20行内容

8. top/free

  • top命令常用于查看当前占用cpu或内存资源最高的进程。直接执行top,将显示按照cpu使用率降序排列的进程列表,在展示页面输入大写字母"M",可以按照内存使用率降序排列。通过top命令,我们可以获取到占用cpu或内存资源最高的进程的pid,之后可以通过ps命令(见下一节),查看具体是什么进程。

  • free命令常用来查看内存的使用情况。通常搭配-h选项使用,以人类可读的方式显示内存使用信息,如下所示:
    ~$ free -h
    total used free shared buff/cache available
    Mem: 188G 123G 14G 410M 50G 63G
    Swap: 49G 39G 10G
    # total列表示总内存大小,used是已使用内存大小,free表示未分配内存大小,available表示可使用内存大小

9. ps

  • ps命令常用于查找某个进程的详细信息,通常会配合grep一起使用。常用的选项组合为-ef或-aux,两个选项组合的差别不大,只是显示结果的方式略有不同,使用哪个都可以。

    过滤出所有java进程
    ~$ ps -ef | grep java

    找出某个pid的详细信息
    ~$ ps -aux | grep 11543

    找出包含某个特定标识的进程
    ~$ ps -ef | grep -i datanode

10. jps

  • jps实际上并不是Linux命令,是java提供的用于查看java进程的命令,但是由于其使用频率很高,因此也在这里简单讲下。其常用方式如下:

    ~$ jps -lvm | grep -i zeppelin
    # -l选项表示显示程序主类的长类名
    # -v选项表示输出传递给JVM的参数
    # -m选项表示输出传递给主类的参数

  • 需要注意的是,jps命令只能查看当前用户下的java进程,如果要看所有用户的java进程,请使用ps命令配合grep,详见本文ps命令讲解的第一个示例。另外,只有配置了java环境变量(安装了java),才会有jps命令,否则是没有的。

11. ncftpgget/ncftpput

  • ncftpget命令常用于从ftp服务器下载文件,而对应的,ncftpput用于上传文件至ftp服务器,其常用方法如下:

    # 上传本地文件至ftp服务器
      ncftpput -z -uftpuser -p'ftppassword' -P21 ftp_ip ftp_dir/ local_file
      # -z选项表示使用断点续传功能
      # -u选项后面跟登录ftp的用户名
      # -p选项后面跟登录ftp的密码
      # -P选项后面跟ftp服务器的端口号
      # 后面的三个参数分别为ftp服务器的IP地址,要上传到ftp服务器的目标目录,要上传的本地文件名
    
    
    
    # 下载ftp服务器上的文件到本地
      ncftpget -z -uftpuser -p'ftppassword' -P21 ftp_ip loca_dir ftp_file
    # 和ncftpput命令相似,只是最后两个参数不同,local_dir表示要下载到本地的哪个目录下,ftp_file表示ftp服务器上的文件名称
    

12. crontab

Linux自带的非常强大的定时调度工具,非常的稳定。其常用的选项如下:

选项 作用
-e 编辑当前用户定时表,会默认使用内置的vi编辑器
-r 清空当前用户的定时表
-l 查看当前用户的定时表内容

crontab表达式的含义及写法,如下所示:这里需要重点关注的是,在键盘上字母e和字母r是挨着的,因此使用crontab命令时,千万不能手太快,要看清输入的是e还是r再按回车键,避免误操作把定时表给清空了。

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

如果你忘记了上述内容,没有关系,可以通过以下命令,查看到上面的解释:

~$ cat /etc/crontab
# 该命令输出的结果包含上述的表达式解释

# 这里我给出一个crontab的的具体示例
15 8,18 * * 1 /usr/bin/python /data/scripts/remove_expired.py > /dev/null 2>&1
# 上述crontab的含义为每周一的8点和18点的15分,执行一次后面的脚本,并忽略输出

13. su

su命令用于切换当前用户。其常见使用形式如下:

# 示例
~$ su spark
# 或者
~$ su - spark

上面两种方式的区别为,使用第二种方式时,不仅会切换用户而且还会切换当前工作目录到目标用户的home目录,shell环境也会一并切换。因此,强烈建议使用第二种形式,不然容易遇到各种坑爹的环境问题。

14. date

date命令用于获取系统的当前时间,可以配合格式化,获取你想要的时间形式。date命令的使用方法非常灵活,感兴趣的同学可以自行百度一下。我这里只举几个常用的例子:

# 获取今天的日期
~$ date '+%Y%m%d'
# 获取昨天的日期
~$ date -d '1 day ago' '+%Y-%m-%d'
# 针对指定日期进行加1天
~$ date -d '20190625 1 day' '+%Y%m%d'
# 第3条命令返回结果为20190626

15. wc

wc命令通常用于统计文件的行数、字数和字节数。比如,你要输出10000个选中的用户标识给业务方,在最后给出文件前,你可以使用这个命令验证下,是否刚好是10000行。其常用形式如下:

# 计算result.csv的行数
~$ wc -l result.csv
# 计算标准流内容的行数
~$ cat result.csv | wc -l

16. netstat/lsof

这两个命令都可以用于查看端口的监听情况,通常配合grep使用,其常用形式如下:

# 查看8080端口被哪个进程监听
~$ netstat -anlp | grep 8080 | grep LISTEN
# 或者
~$ lsof -i:8080 | grep LISTEN
# 如果没有输出结果,则说明无进程监听目标端口

# 查看8080端口上目前建立了多少个连接
~$ lsof -i:8080 | grep ESTABLISHED | wc -l

17. sh

shell命令,方便查看shell脚本的执行过程,常用于排查脚本问题。使用形式如下:

~$ sh -x submit.sh
# 将会输出运行过程中所有被执行的shell命令

转自 大数据分析工程师入门10-Linux命令基础

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值