Linux Shell常用命令总结

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: 1.   find       find pathname -options [-print -exec -ok]       让我们来看看该命令的参数:       pathname find命令所查找的目录路径。

1.   find
       find pathname -options [-print -exec -ok]
       让我们来看看该命令的参数:
       pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
       -print find命令将匹配的文件输出到标准输出。
       -exec find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {} \;,注意{}和\;之间的空格,同时两个{}之间没有空格,
       注意一定有分号结尾。
       0) -ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行
       find . -name "datafile" -ctime -1 -exec ls -l {} \; 找到文件名为datafile*, 同时创建实际为1天之内的文件, 然后显示他们的明细.
       find . -name "datafile" -ctime -1 -exec rm -f {} \; 找到文件名为datafile*, 同时创建实际为1天之内的文件, 然后删除他们.

       find . -name "datafile" -ctime -1 -ok ls -l {} \; 这两个例子和上面的唯一区别就是-ok会在每个文件被执行命令时提示用户, 更加安全.
       find . -name "datafile" -ctime -1 -ok rm -f {} \; 

       1) find . -name   基于文件名查找,但是文件名的大小写敏感.    
       find . -name "datafile*"
    
       2) find . -iname  基于文件名查找,但是文件名的大小写不敏感.
       find . -iname "datafile*"
    
       3) find . -maxdepth 2 -name fred 找出文件名为fred,其中find搜索的目录深度为2(距当前目录), 其中当前目录被视为第一层.
        
       4) find . -perm 644 -maxdepth 3 -name "datafile*"  (表示权限为644的, 搜索的目录深度为3, 名字为datafile*的文件)
    
       5) find . -path "./rw" -prune -o -name "datafile*" 列出所有不在./rw及其子目录下文件名为datafile*的文件。
       find . -path "./dir*" 列出所有符合dir*的目录及其目录的文件.
       find . \( -path "./d1" -o -path "./d2" \) -prune -o -name "datafile*" 列出所有不在./d1和d2及其子目录下文件名为datafile*的文件。
    
       6) find . -user ydev 找出所有属主用户为ydev的文件。
       find . ! -user ydev 找出所有属主用户不为ydev的文件, 注意!和-user之间的空格。
    
       7) find . -nouser    找出所有没有属主用户的文件,换句话就是,主用户可能已经被删除。
    
       8) find . -group ydev 找出所有属主用户组为ydev的文件。
    
       9) find . -nogroup    找出所有没有属主用户组的文件,换句话就是,主用户组可能已经被删除。
    
       10) find . -mtime -3[+3] 找出修改数据时间在3日之内[之外]的文件。
       find . -mmin  -3[+3] 找出修改数据时间在3分钟之内[之外]的文件。
       find . -atime -3[+3] 找出访问时间在3日之内[之外]的文件。
       find . -amin  -3[+3] 找出访问时间在3分钟之内[之外]的文件。
       find . -ctime -3[+3] 找出修改状态时间在3日之内[之外]的文件。
       find . -cmin  -3[+3] 找出修改状态时间在3分钟之内[之外]的文件。
    
       11) find . -newer eldest_file ! -newer newest_file 找出文件的更改时间 between eldest_file and newest_file。
       find . -newer file     找出所有比file的更改时间更新的文件
       find . ! -newer file 找出所有比file的更改时间更老的文件
        
       12) find . -type d    找出文件类型为目录的文件。
       find . ! -type d  找出文件类型为非目录的文件。
       b - 块设备文件。
       d - 目录。
       c - 字符设备文件。
       p - 管道文件。
       l - 符号链接文件。
       f - 普通文件。
        
       13) find . -size [+/-]100[c/k/M/G] 表示文件的长度为等于[大于/小于]100块[字节/k/M/G]的文件。
    
       14) find . -empty 查找所有的空文件或者空目录.
    
       15) find . -type f | xargs grep "ABC" 
       使用xargs和-exec的区别是, -exec可能会为每个搜索出的file,启动一个新的进程执行-exec的操作, 而xargs都是在一个进程内完成, 效率更高.
    
2.   crontab: 
       文件格式如下(每个列之间是使用空格分开的):
       第1列分钟1~59
       第2列小时1~23(0表示子夜)
       第3列日1~31
       第4列月1~12
       第5列星期0~6(0表示星期天)
       第6列要运行的命令
    
       分 时 日 月 星期 要运行的命令
    
       30 21* * * /apps/bin/cleanup.sh
       上面的例子表示每晚的21:30运行/apps/bin目录下的cleanup.sh。
       45 4 1,10,22 * * /apps/bin/backup.sh
       上面的例子表示每月1、10、22日的4:45运行/apps/bin目录下的backup.sh。
       10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
       上面的例子表示每周六、周日的1:10运行一个find命令。
       0,30 18-23 * * * /apps/bin/dbcheck.sh
       上面的例子表示在每天18:00至23:00之间每隔30分钟运行/apps/bin目录下的dbcheck.sh。
       0 23 * * 6 /apps/bin/qtrend.sh
       上面的例子表示每星期六的11:00pm运行/apps/bin目录下的qtrend.sh。
    
       -u 用户名。
       -e 编辑crontab文件。
       -l 列出crontab文件中的内容。
       -r 删除crontab文件。
       系统将在/var/spool/cron/目录下自动保存名为<username>的cron执行脚本.
       cron是定时完成的任务, 在任务启动时,一般来讲都是重新启动一个新的SHELL, 因此当需要使用登录配置文件的信息,特别是环境变量时,是非常麻烦的. 
       一般这种问题的使用方法如下:
       0 2 * * * ( su - USERNAME -c "export LANG=en_US; /home/oracle/yb2.5.1/apps/admin/1.sh"; ) > /tmp/1.log 2>&1
       如果打算执行多条语句, 他们之间应使用分号进行分割. 注: 以上语句必须在root的帐户下执行.
    
3.   nohup:
       nohup command & 
       如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户之后继续运行相应的进程。
       Nohup就是不挂起的意思(no hang up)。
    
4.   cut:
       1) cut一般格式为:cut [options] file1 file2
       -c list 指定剪切字符数。
       -f field 指定剪切域数。
       -d 指定与空格和tab键不同的域分隔符。
       -c 用来指定剪切范围,如下所示:
       -c1,5-7 剪切第1个字符,然后是第5到第7个字符。
       -c2- 剪切第2个到最后一个字符
       -c-5 剪切最开始的到第5个字符
       -c1-50 剪切前50个字符。
       -f 格式与-c相同。
       -f1,5 剪切第1域,第5域。
       -f1,10-12 剪切第1域,第10域到第12域。
       2) 使用方式:
       cut -d: -f3 cut_test.txt (基于":"作为分隔符,同时返回field 3中的数据) *field从0开始计算。
       cut -d: -f1,3 cut_test.txt (基于":"作为分隔符,同时返回field 1和3中的数据)
       cut -d: -c1,5-10 cut_test.txt(返回第1个和第5-10个字符)
    
5.   sort:     
       1) 对文件内容进行排序,缺省分割符为空格,如果自定义需要使用-t选择,如-t:
       2) 使用分隔符分割后,第一个field为0,awk中为1
       3) 具体用法如下:
       sort -t: sort_test.txt(缺省基于第一个field进行排序,field之间的分隔符为":")
       sort -t: -r sort_test.txt(缺省基于第一个field进行倒序排序,field之间的分隔符为":")
       sort -t: +1 sort_test.txt(基于第二个field进行排序,field之间的分隔符为":")
       sort +3n sort_test.txt(基于第三个field进行排序,其中n选项提示是进行"数值型"排序) 
       sort -u  sort_test.txt(去除文件中重复的行,同时基于整行进行排序)
       sort -o output_file -t: +1.2[n] sort_text.txt(基于第二个field,同时从该field的第二个字符开始,这里n的作用也是"数值型"排序,并将结果输出到output_file中)
       sort -t: -m +0 filename1 filename2(合并两个文件之后在基于第一个field排序)

6.   pgrep和pkill:

       查找和杀死指定的进程, 他们的选项和参数完全相同, 这里只是介绍pgrep
       /> sleep 100&
       1000
       /> sleep 100&
       1001
    
       /> pgrep sleep
       1000
       1001
       /> pgrep -d: sleep    # -d定义多个进程之间的分隔符, 如果不定义则使用newline
       1000:1001
       /> pgrep -n sleep    # -n表示如果该程序有多个进程,查找最新的.
       1001
       /> pgrep -o  sleep    # -o表示如果该程序有多个进程,查找最老的.
       1000    
       /> pgrep -G root,oracle sleep # -G 表示进程的group id在-G后面的组列表中的进程会被考虑
       1000
       1001
       /> pgrep -u root,oracle sleep # -u 表示进程的effetive user id在-u后面的组列表中的进程会被考虑
       1000
       1001
       /> pgrep -U root,oracle sleep # -U 表示进程的real user id在-u后面的组列表中的进程会被考虑
       1000
       1001
       /> pgrep -x sleep # -x 表示进程的名字必须完全匹配, 以上的例子均可以部分匹配
       1000
       1001
       /> pgrep -x sle
    
       /> pgrep -l sleep # -l 将不仅打印pid,也打印进程名
       1000 sleep
       1001 sleep
       /> pgrep -lf sleep # -f 一般与-l合用, 将打印进程的参数
       1000 sleep 100
       1001 sleep 100
    
       /> pgrep -f sleep -d, | xargs ps -fp
       UID        PID  PPID  C STIME TTY          TIME CMD
       root      1000  2138  0 06:11 pts/5    00:00:00 sleep 1000
       root      1001  2138  0 06:11 pts/5    00:00:00 sleep 1000

7.   fuser:
       fuser -m /dev    # 列出所有和/dev设备有染的进程pid.
       fuser testfile    # 列出和testfile有染的进程pid
       fuser -u testfile # 列出和testfile有染的进程pid和userid
       fuser -k testfile # 杀死和testfile有染的进程pid

8.   mount:

   如何在unix下面mount一个windows下面的共享目录
       mount -t smbfs -o username=USERNAME,password=PASSWORD //windowsIp/pub_directory  /mountpoint   
       /> mkdir -p /mnt/win32
       /> mount -o username=administrator,password=1234 //10.1.4.103/Mine /mnt/win32
       /> umount /mnt/win32        # 卸载该mount.

9.   netstat:

   -a 表示显示所有的状态
   -l 则只是显示listen状态的,缺省只是显示connected
   -p 显示应用程序的名字
   -n 显示ip、port和user等信息
   -t 只显示TCP的连接
   /> netstat -apnt 
   /> netstat -lpnt      #如果只是显示监听端口的状态,可以使用该命令

10. tune2fs:

   调整ext2/ext3文件系统特性的工具

   -l 查看文件系统信息
   /> tune2fs -l /dev/sda1  #将会列出所有和该磁盘分区相关的数据信息,如Inode等。
   /> tune2fs -l /dev/sda1 | grep -i "block size"      #查看当前文件系统的块儿尺寸
   /> tune2fs -l /dev/sdb1 |grep -i "mount count"   #查看 mount count 挂载次数

11.  开启或关闭Linux(iptables)防火墙
      重启后永久性生效:
      /> chkconfig iptables on         #开启
      /> chkconfig iptables off         #关闭
    
      即时生效,重启后还原:
      /> service iptables start        #开启
      /> service iptables stop         #关闭  

 

12.  tar 分卷压缩和合并
      以每卷500M为例
      />tar cvzpf - somedir | split -d -b 500m    #tar分卷压缩
      />cat x* > mytarfile.tar.gz                      #tar多卷合并

 

13.  把man或info的信息存为文本文件
      /> man tcsh | col -b > tcsh.txt
      /> info tcsh -o tcsh.txt -s


14.  查看正在执行进程的线程数
      />ps -eo "args nlwp pid pcpu" 

 

15.  使用md5sum计算文件的md5
      /> md5sum test.c
      07af691360175a6808567e2b08a11724  test.c

      /> md5sum test.c > hashfile
      /> md5sum –c hashfile     # 验证hashfile中包含的md5值和对应的文件,在执行该命令时是否仍然匹配, 如果此时test.c被修改了,该命令将返回不匹配的警告.

 

16.  在ps命令中显示进程的完整的命令行参数
      />ps auwwx

17. chkconfig:

    1). 编辑chkconfig操作的Shell文件头。
    #!/bin/bash
    #
    # chkconfig: 2345 20 80
    # description: Starts and stops the Redis Server
    这个注释头非常重要,否则chkconfig命令无法识别。其中2345表示init启动的级别,即在2、3、4、5这四个级别中均启动该服务。20表示该脚本启动的优先级,80表示停止的优先级。这些可以在chkconfig的manpage中找到更为详细的说明。
    
    2). 编译Shell文件的内容:
    case "$1" in
    start)
        #TODO: 执行服务程序的启动逻辑。
        ;;
    stop)
        #TODO: 执行服务程序的停止逻辑。
        ;;
    restart)
        ;;
    reload)
        ;;
    condrestart)
        ;;
    status)
        ;;
    上面列出的case条件必不可少,如果确实没有就当做占位符放在那里即可,如上例。
    
    3). 添加和删除服务程序:
    #--add选项表示添加新的服务程序。
    /> chkconfig --add redis_6379
    #查看是否删除或添加成功
    /> chkconfig | grep redis_6379
    redis_6379      0:off   1:off   2:on    3:on    4:on    5:on    6:off
    #--del选项表示删除已有的服务程序。
    /> chkconfig --del redis_6379

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4天前
|
运维 监控 网络协议
Linux抓包命令tcpdump使用技巧大全
【7月更文挑战第10天】
22 4
Linux抓包命令tcpdump使用技巧大全
|
4天前
|
监控 数据挖掘 Linux
探索Linux中的`sort`命令:数据处理与分析的得力助手
`sort`命令是Linux下文本数据排序利器,用于按字典、数字顺序等对行排序。关键参数有:-n(数字排序),-r(逆序),-u(去重),-k(指定字段),-t(字段分隔符)和-o(输出到文件)。在处理大文件时注意内存使用,确保字符编码一致,灵活运用管道和重定向。通过熟练使用`sort`,能提升数据分析效率。
|
4天前
|
数据挖掘 Linux 数据处理
Linux命令sprof详解
**`sprof`是Linux下的共享库性能分析工具,补充`gprof`,专注分析`.profile`文件以识别性能瓶颈。通过调用次数、执行时间数据优化资源和代码。使用参数如`-F`、`-I`、`-d`进行定制化分析。示例:先设置`LD_PROFILE`环境变量,运行程序生成`.profile`,然后用`sprof`分析。注意需用`-g`编译程序,并在代表性的负载下分析。结合其他工具如`perf`、`valgrind`提升分析效果。**
|
4天前
|
存储 数据挖掘 Linux
Linux命令split详解:大文件处理的得力助手
`split`命令是Linux用于将大文件分割成小文件的工具,常用于日志处理、备份。它支持按行数(-l)、字节数(-b)分割,并能自定义输出文件名(-a, -d)。例如,`split -b 10M largefile.txt smallfile_`会按10MB切割`largefile.txt`,生成`smallfile_`开头的文件。注意确保磁盘空间充足,避免文件名冲突,并备份原始文件。结合其他命令使用,能提高文件管理效率。
|
4天前
|
数据挖掘 大数据 Linux
探索Linux中的snice命令:一个虚构但启发性的数据分析工具
`snice`是一个想象中的Linux命令,用于低优先级地从大数据集中抽样数据。它结合`nice`和`sampling`,支持多种抽样策略,如随机和分层。参数包括指定样本数、策略、输入输出文件和进程优先级。示例:`snice -n 1000 -s random -i large_log.txt -o sample_log.txt`。使用时注意资源管理、数据完整性及权限,并与其它工具结合使用。虽然虚构,但体现了Linux工具在数据分析中的潜力。
|
1天前
|
关系型数据库 MySQL Linux
Linux命令systemctl详解
`systemctl`是Linux系统用于管理systemd服务的核心命令,它与systemd守护进程交互,实现启动、停止、重启服务及查看服务状态等功能。主要参数包括`start`、`stop`、`restart`、`status`、`enable`和`disable`等。例如,启动Apache服务使用`systemctl start httpd.service`,查看服务状态用`systemctl status &lt;service&gt;`。使用时需注意权限,服务名通常以`.service`结尾,但命令中可省略。最佳实践包括利用tab键补全、定期查看服务状态和合理配置服务自启。
|
1天前
|
存储 安全 Linux
Linux命令sync详解
`sync`命令在Linux中用于将内存缓冲区的数据强制写入磁盘,保证数据持久性和一致性。它在关机、重启或重要文件操作前后使用,以防数据丢失。工作原理是强制将内存中的数据同步到磁盘,特点是阻塞式执行且通常无需参数。常见用法包括安全关机、数据备份和配置文件修改后确保更改生效。应注意,过度使用可能影响性能,应适时使用`fsck`检查文件系统一致性。
|
1天前
|
存储 算法 安全
Linux命令sum详解
`sum`命令在Linux中用于计算文件的校验和与磁盘块数,确保文件传输或存储时的完整性。它使用加法运算生成校验和,可与文件内容比较验证变化。支持不同算法(如CRC),能处理多个文件。基本用法包括:`sum file.txt`来计算校验和,`sum -c checksum.txt`来验证文件完整性。但要注意,更强的校验算法如MD5或SHA家族可能更适合安全性需求。结合`find`和`xargs`可用于目录的递归校验。定期校验和记录校验和是最佳实践。
|
1天前
|
安全 数据管理 Shell
Linux命令su详解
`su`命令在Linux中用于切换用户身份,常用于权限管理。它允许用户无须注销当前会话就切换到另一个用户,尤其是root。`su`有多种选项,如`-`或`--login`加载目标用户环境,`-c`执行指定命令后返回。使用时需注意权限安全,建议用`sudo`以减少风险。通过限制`/etc/pam.d/su`可加强访问控制。`su`在系统维护和数据管理中扮演角色,但不直接处理数据。
|
4天前
|
监控 安全 Linux
Linux命令truss详解:系统调用跟踪的利器
`truss`(或`strace`)是Linux调试利器,用于跟踪系统调用和信号。它帮助开发者优化性能、调试错误和进行安全审计。通过附加到进程,记录调用细节、参数、返回值和错误。使用参数如`-d`显示调试信息,`-e`跟踪特定调用,`-o`输出到文件,`-p`跟踪指定进程。注意其对性能的影响,通常需要root权限,并建议过滤输出和结合其他工具分析。