`
fujinbing
  • 浏览: 237304 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux常见命令

阅读更多

管道命令 | , 将前面命令的正确信息 传递给后面的命令作标准输入。 |仅能处理标准输出,对stderr没有直接处理能力.
$ls -al |more
ls 的结果被more读取。

选取命令 cut,grep

注意选取的信息是以行为单位的,即是逐行分析的。
cut  用于使用分割符切割每一行
-d '分割符'
-f m,n... 指定取出的第几段, 以逗号分隔,指定都是哪几个段,比如 -f1,3,4 指定取出第1,3,4段
-c 以字符为单位取出固定的字符范围 比如 cut -c 12- ,每行 第12个字符以后的所有内容, cut -c 12-20 ,每行 第12到20 字符之间的内容
例子
woody@xiaoc:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
woody@xiaoc:~$ echo $PATH |cut -d ':' -f 5
/sbin
woody@xiaoc:~$ echo $PATH |cut -d ':' -f 2,4 //第2段和第4段,:分隔
/usr/local/bin:/usr/bin
woody@xiaoc:~$

woody@xiaoc:~$ export
declare -x COLORTERM="Terminal"
declare -x DISPLAY=":0.0"
declare -x GTK_IM_MODULE="xim"
declare -x HISTCONTROL="ignoreboth"
declare -x HOME="/home/woody"
declare -x LANG="en_US.UTF-8"
declare -x LC_CTYPE="zh_CN.UTF-8"
declare -x LESSCLOSE="/usr/bin/lesspipe %s %s"
declare -x LESSOPEN="| /usr/bin/lesspipe %s"
declare -x LOGNAME="woody"
.....省略
woody@xiaoc:~$ export | cut -c 12-          //输出每行 第12个字符以后的内容
COLORTERM="Terminal"
DISPLAY=":0.0"
GTK_IM_MODULE="xim"
HISTCONTROL="ignoreboth"
HOME="/home/woody"
LANG="en_US.UTF-8"
LC_CTYPE="zh_CN.UTF-8"
LESSCLOSE="/usr/bin/lesspipe %s %s"
LESSOPEN="| /usr/bin/lesspipe %s"
LOGNAME="woody"
.....省略

grep : 分析每一行,如果行中有需要的信息,则输出该行
grep -[acinv] '搜索内容串' filename
-a 以文本文件方式搜索
-c 计算找到的符合行的次数
-i 忽略大小写
-n 顺便输出行号
-v 反向选择,即找 没有搜索字符串的行

例子
woody@xiaoc:~$ last | grep 'tty2'           //找出last结果中 有tty2 的行
woody    tty2                          Sat Aug 30 17:14 - 17:14 (00:00)   
woody    tty2                          Sat Aug 30 17:14 - 17:14 (00:00)   
woody    tty2                          Sun Jul 20 22:06 - down   (00:07)   
woody    tty2                          Sun Jul 20 22:06 - 22:06 (00:00)   
woody    tty2                          Sun Jul 20 21:35 - down   (00:29)   
woody    tty2                          Sun Jul 20 21:35 - 21:35 (00:00)   
woody    tty2                          Mon Jul 21 04:32 - down   (01:00)   
woody    tty2                          Mon Jul 21 04:32 - 04:32 (00:00)   
woody    tty2                          Mon Jul 21 04:08 - down   (00:00)   
woody    tty2                          Mon Jul 21 04:08 - 04:08 (00:00)   
woody@xiaoc:~$
woody@xiaoc:~$ last | grep -v 'tty2' //找没有tty2的行...
woody    pts/0        :0.0             Sat Aug 30 17:42   still logged in  
woody    pts/0        :0.0             Sat Aug 30 17:42 - 17:42 (00:00)   
woody    pts/0        :0.0             Sat Aug 30 17:41 - 17:42 (00:00)   
woody    tty1                          Sat Aug 30 17:23 - 17:23 (00:00)   
woody    tty1                          Sat Aug 30 17:23 - 17:23 (00:00)   
woody    tty1                          Sat Aug 30 17:19 - 17:20 (00:00)   
woody    tty1                          Sat Aug 30 17:19 - 17:19 (00:00)   
woody    tty1                          Sat Aug 30 17:17 - 17:17 (00:00)   
woody    tty1                          Sat Aug 30 17:17 - 17:17 (00:00)
省略。。。。

综合利用:
woody@xiaoc:~$ sudo cat /etc/shadow
root:!:14080:0:99999:7:::
daemon:*:14080:0:99999:7:::
bin:*:14080:0:99999:7:::
sys:*:14080:0:99999:7:::
sync:*:14080:0:99999:7:::
games:*:14080:0:99999:7:::
man:*:14080:0:99999:7:::
省略...
woody@xiaoc:~$ sudo cat /etc/shadow |grep 'root' |cut -d ':' -f 1,2 //找到有root的行,取出:分割的前两个段内容
root:!
woody@xiaoc:~$

排序命令
sort 帮助我们排序,排序的字符跟语系编码有关系,因此排序前建议使用LC_ALL=C,让语系统一。
-f 忽略大小写
-b 忽略前面空格
-M 以月份名字排序例如 JAN,DEC等
-n 以纯数字方式排序,默认是字符串模式
-u uniq 相同数据显示一次
-t 分割符号,默认是tab
-k 按哪个字段(分割开得)排序
具体看man手册
woody@xiaoc:~$ cat /etc/passwd |sort
backup:x:34:34:backup:/var/backups:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
dhcp:x:101:102::/nonexistent:/bin/false
dnsmasq:x:107:65534:dnsmasq,,,:/var/lib/misc:/bin/false
games:x:5:60:games:/usr/games:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
haldaemon:x:106:115:Hardware abstraction layer,,,:/var/run/hald:/bin/false
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
klog:x:103:104::/home/klog:/bin/false
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
......
woody@xiaoc:~$ cat /etc/passwd |sort -t ":" -k 3 -n //按照:分割的第三栏来排序, 数字方式
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh


uniq 将重复数据只显示一次

-i 忽略大小写,
-c 计数

wc 统计文件中多少字多少行多少字符。
-l ,只显示行数
-w 仅字(英文单词,连着的汉字字符串是一个字 )
-m 多少字符
vim 中好像总多一个不可见的结束符。utf-8编码下,一个汉字是3个字符大小.

tee 命令,双向重定向
我们知道> 会将数据传送给文件或设备,但是这样后标准输出中就没有内容了。如果想将信息既导向设备或文件,又分流到标准输出,可以用tee命令

tee [-a] file
-a 追加方式
woody@xiaoc:~$ last | tee last.list | cut -d ' ' -f1 //既将last输出保存到了last.list文件,又将last输出导向给cut命令.
woody
woody
woody
woody
woody
woody
woody
woody
....

字符转换命令 tr,col,join,paste expand
tr [-ds] charset
-d 删除消息中的char set 中包含的字符
-s 替换重复的字符

他的替换方式似乎是一一对应的,比如 tr 'woody' 'WOODY' 会将信息中所有的w替换为W,所有o替换成O..

例子,将小写变大写
$last | tr '[a-z]' '[A-Z]'

将输出中的:删除
$cat /etc/passwd | tr -d ':'

将dos文件中的^M删除
$cat file |tr -d '\r' > newfile
\r 表示^M. DOS文件中会在行尾添加^M,而linux没有。

col -x 用来将tab 替换成对等的空格
woody@xiaoc:~$ cat -A /etc/manpath.config
.......
# --------------------------------------------------------$
# MANDATORY_MANPATH^I^I^Imanpath_element$
# MANPATH_MAP^I^Ipath_element^Imanpath_element$
# MANDB_MAP^I^Iglobal_manpath^I[relative_catpath]$
#---------------------------------------------------------$
# every automatically generated MANPATH includes these fields$

我们看到许多^I ,是tab键的显示。
要将他们换成空格显示,可以这样:
woody@xiaoc:~$ cat /etc/manpath.config | col -x |cat -A|more


也不怎么常用。

join , 将两个文件中,有相同数据的行加在一起。
-t 默认以空格分割数据,并比较第一个字段的数据,相同则将两个数据连成一行。
-i 大小写忽略
-1 第一个文件用哪个字段分析
-2 第二个文件用哪个字段分析

例子:
woody@xiaoc:~$ sudo join -t ':' /etc/passwd /etc/shadow
root:x:0:0:root:/root:/bin/bash:!:14080:0:99999:7:::
daemon:x:1:1:daemon:/usr/sbin:/bin/sh:*:14080:0:99999:7:::
bin:x:2:2:bin:/bin:/bin/sh:*:14080:0:99999:7:::


因为passwd 和shadow以:分割的第一个字段都是帐号名, 因此有相同帐号名的两文件中的行合并了,
由于帐号名相同,第二个文件的帐号名就省略了。红色是第二个文件的。


例子
/etc/passwd 第四字段是GID,/etc/group 第三个字段是GID, 整合命令
woody@xiaoc:~$ sudo join -t ':' -1 4 /etc/passwd -2 3 /etc/group
0:root:x:0:root:/root:/bin/bash:root:x:
1:daemon:x:1:daemon:/usr/sbin:/bin/sh:daemon:x:
2:bin:x:2:bin:/bin:/bin/sh:bin:x:
...
/etc/passwd 第一行: root:x:0:0:root:/root:/bin/bash
/etc/group 第一行 root:x:0:
将第一个的第四栏0 与第二个文件的第三栏0 取出,放到行的最前方。
然后将剩余的东西加在一起放在后面,就得到输出了。

paste 这个比join简单,只是将两个文件的两行合并,以tab分隔
-d 加分隔符号 ,默认tab
- 说明内容是来自标准输入。
woody@xiaoc:~/tmp$ paste file1 file2
this is a file this is a file                //两个文件内容相同,因此结果是这样
this is a test this is a test
this file is using paste command.       this file is using paste command.
EOF     EOF
woody@xiaoc:~/tmp$ paste file1 - //使用标准输入作另一个文件来源
this is a file fuck //标准输入fuck后将fuck与第一行合并
fuck //这是标准输入的内容,不是文件合并后的显示
this is a test hello
hello
this file is using paste command.       Im the second
Im the second
.........

expand 将tab转成空格 ,col也可以完成该功能

-t 指定一个tab占多少空格
woody@xiaoc:~/tmp$ grep 'MANPATH' /etc/manpath.config | head -n 3|cat -A
# MANDATORY_MANPATH^I^I^Imanpath_element$
# MANPATH_MAP^I^I path_element^Imanpath_element$
# every automatically generated MANPATH includes these fields$
woody@xiaoc:~/tmp$ grep 'MANPATH' /etc/manpath.config | head -n 3|expand -t 6| cat -A
# MANDATORY_MANPATH                 manpath_element$
# MANPATH_MAP           path_element      manpath_element$
# every automatically generated MANPATH includes these fields$
woody@xiaoc:~/tmp$
tab是^I

unexpand命令可以完成逆向工作

split, 可以将大文件分割为小文件,方便复制传送等工作。
-b 后接拆分后单个小文件的大小,可加单位,b,k,m等
-l 按照行数拆分。
$split -b 100m movie.rmvb small_mov

得到结果 small_mova,small_movb.... 依次加上abcd..得到多个100m以内的小文件

要合并他们:
$cat small_mov* >> new_mov.rmvb

cat 可以将多个文件合并输出,比如 cat file1 file2 得到file1 和file2 的输出.
cat 不加参数,则从标准输入(键盘)获取,以ctrl+d 结束输入。


按行数
woody@xiaoc:~$ ls -al / |split -l 10 - lsroot
将结果生成10行一个的文件 lsroota,lsrootb....
注意那个红色的- 符号,在需要标准输入输出时,恰好没有文件时,则-当成输入/输出
这里split 的结果经过 -(输出) 到lsroota,lsrootb..

关于减号- 的作用,
在管道命令中,常常会用到前一个命令的stdout作后面命令的stdin, stdin/stdout 可以用减号-代替,比如
$tar -cvf - /home | tar -xvf -
这里将/home里的文件打包,但是不生成文件,而是将数据传送到 stdout ,即-,经过管道,将数据传送给
tar -xvf - ,后面这个- 则是取前一个命令的stdout 做stdin用,也就不需要文件了。


参数替换 xargs,以空格分隔输入,产生某个命令的参数,如果一些文件名之类的名字里含有空格,xargs可能会误判。
-0 如果输入的stdin中有特殊字符,如`, \, 空格等,使用-0 将其还原为一般字符
-e EOF的意思,-e后紧跟一个字符串,则分析到这个字符串(空格分割出来的单独参数,而不是参数的一部分)时就停止工作。忽略它并停止分析
-p 执行每个命令的参数时,询问用户
-n 每次后面的命令执行时需要几个参数,
当xargs后面没接命令时,默认echo输出。

woody@xiaoc:~$ cut -d':' -f1 < /etc/passwd | head -n 3 |xargs touch
woody@xiaoc:~$ ls
abc ok? bin      Desktop Downloads    playlist tmp         wallpapers
Backup   daemon doc      linux_c_src root       vbox_share xrgsu
woody@xiaoc:~$
这里 将passwd 前三行取出,使用cut 取出第一栏(帐户名) 作为参数传递给touch, 则创建了三个文件。

woody@xiaoc:~$ cut -d':' -f1 < /etc/passwd | head -n 3 |xargs -p touch   //带提示的用法
touch root daemon bin ?...y

使用-e 令当分析到某个参数是sys时,忽略它和后面的参数。
woody@xiaoc:~$ rm bin daemon root //删除之前创建的文件先
woody@xiaoc:~$ cut -d':' -f1 < /etc/passwd | head -n 5 |xargs -p -e'sys' touch
touch root daemon bin ?...y   //看,没有sys和后面的
woody@xiaoc:~$ ls
abc ok? bin     Desktop Downloads    playlist tmp         wallpapers
Backup   daemon doc      linux_c_src root      vbox_share xrgsu
woody@xiaoc:~$

使用-n ,指定命令需要的参数为2个,这样分析出的参数2个一组,每组分别执行后面的命令。
woody@xiaoc:~$ cut -d':' -f1 < /etc/passwd | head -n 5 |xargs -n 2       //默认echo 输出得到的参数
root daemon        //看两个一组
bin sys
sync

woody@xiaoc:~$

xargs命令很有用,具体参考man手册。

分享到:
评论

相关推荐

    实验室管理系统 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程.zip

    实验室管理系统 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程 项目启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS

    基于java的苹果网吧计费管理系统设计与实现.docx

    基于java的苹果网吧计费管理系统设计与实现.docx

    纸中世界-跳跃游戏.sb3

    纸中世界-跳跃游戏.sb3

    Keysight 网络分析仪新建校准件操作指导

    本操作指导用于在 ENA 系列网络分析仪 E5080B 上自定义校准件。目前 Keysight 网络分析仪的 PNA 系列 N52xxB、P50xx 系列、P937x 系列、PXI 板卡式网分以及 ENA 系列的 E5080B、E5081B 的操作界面均统一到如下界面,操作方式相同。

    调查海域浮游动物各类群栖息密度的空间分布表格.docx

    调查海域浮游动物各类群栖息密度的空间分布表格.docx

    ssm框架Java项目源码-高校毕业生就业管理系统+jsp毕设-大作业.zip

    本项目“高校毕业生就业管理系统”是一套基于SSM框架(Spring+SpringMVC+MyBatis)精心开发的Java Web应用,旨在为高校毕业生、高校就业指导部门以及企业用户提供一个高效、便捷的就业信息管理平台。 系统主要功能包括:学生用户可以查看和发布个人简历,搜索并筛选合适的工作岗位,申请心仪的职位;企业用户可以发布招聘信息,筛选和查看应聘者的简历,进行面试邀请等操作;高校就业指导部门则可以对学生的就业情况进行统计和分析,以更好地提供就业指导服务。 此外,系统采用了B/S架构,用户只需通过浏览器即可访问,无需安装客户端软件,方便快捷。数据库设计合理,数据存储安全,系统性能稳定。 本项目的开发,不仅为计算机相关专业的学生提供了一个实践SSM框架的好机会,帮助他们更好地理解和掌握Java Web开发技术,还能有效提升高校毕业生的就业效率和质量。

    使用 Python 进行视频编辑.zip

    电影剪辑 笔记MoviePy 最近升级到 v2.0,引入了重大的重大变化。有关如何更新 v2.0 代码的更多信息,请参阅本指南。MoviePy(在线文档在此处)是一个用于视频编辑的 Python 库剪切、连接、插入标题、视频合成(又名非线性编辑)、视频处理和创建自定义效果。MoviePy 可以读取和写入所有最常见的音频和视频格式,包括 GIF,并且可以在 Windows/Mac/Linux 上运行,并搭载 Python 3.9+。例子在此示例中,我们打开一个视频文件,选择 10 到 20 秒之间的子剪辑,在屏幕中心添加标题,然后将结果写入新文件# Import everything needed to edit video clipsfrom moviepy import *# Load file example.mp4 and keep only the subclip from 00:00:10 to 00:00:20clip = VideoFileClip("long_examples/example2.mp4").with_subcl

    基于java的视频播放器系统设计与实现.docx

    基于java的视频播放器系统设计与实现.docx

    基于java的车辆出租管理系统设计与实现.docx

    基于java的车辆出租管理系统设计与实现.docx

    mqtt等协议的pcap文件

    mqtt等协议的pcap文件

    小白的Python入门教程部分章节源码.zip

    学习python

    修木工施工规范及流程.docx

    修木工施工规范及流程.docx

    适用于 Windows,Linux 和 Python 3 (3.5,3.6,3.7) 的 Tensorflow Faster R-CNN.zip

    适用于 Windows/Linux 和 Python 3 (3.5/3.6/3.7) 的 Tensorflow Faster R-CNNtf-faster-rcnn使用 Python 3 在 Windows 和 Linux 上使用 Tensorflow Faster R-CNN这是在 Windows 和 Linux 上编译 Faster R-CNN 的分支。它深受这里和这里的出色工作的启发。目前,此存储库支持 Python 3.5、3.6 和 3.7。感谢@morpheusthewhite请注意我没有时间或意图修复此分支的所有问题,因为我不将其用于商业用途。我创建此分支只是为了好玩。如果您想做出任何承诺,我们非常欢迎。Tensorflow 已经发布了一个对象检测 API。请参考它。https: //github.com/tensorflow/models/tree/master/research/object_detection如何使用此分支安装 tensorflow,最好是 GPU 版本。按照说明操作。如果没有安装 GPU 版本,则需要注释掉代码中的所有 GP

    章节2:编程基本概念之python程序的构成

    Python是一种高级、解释型、面向对象的编程语言,以其简洁的语法、强大的功能和广泛的应用领域而著称。它无需事先编译,代码在运行时逐行解释执行,提供了极大的灵活性和快速开发的能力。Python支持多种数据类型,包括整数、浮点数、字符串、布尔值、列表、元组、字典和集合等,以及丰富的操作符和流程控制结构,使得开发者可以编写出复杂且灵活的代码。 Python拥有一个广泛的标准库,涵盖了文件操作、网络通信、文本处理、正则表达式、数学运算等多个领域,为开发者提供了大量的模块和函数。此外,Python还拥有丰富的第三方库,如NumPy、Pandas、Matplotlib等用于数据分析和可视化的库,以及Django、Flask等用于Web开发的框架,这些库和框架进一步扩展了Python的应用领域和功能。 Python在Web开发、数据科学、人工智能、自动化运维和游戏开发等多个领域都有广泛的应用。在Web开发方面,Python提供了Django和Flask等强大的Web框架,使得开发者可以轻松地开发出各种Web应用和网站。在数据科学领域,Python是数据科学家的首选工具,其强大的数据处理能力和丰

    毕设源码-基于python的西西家居全屋定制系统的设计与实现_ijsj--论文-期末大作业+说明文档.rar

    本项目是基于Python语言开发的西西家居全屋定制系统,旨在为家居行业提供一个高效、智能的定制解决方案。项目涵盖了从客户需求分析、设计方案生成、材料选购到最终订单生成的全过程,力求实现家居定制的数字化和智能化。 在主要功能方面,系统具备强大的客户管理模块,能够详细记录和分析客户的定制需求。设计模块则采用先进的三维建模技术,为客户提供直观、真实的家居设计方案预览。此外,系统还整合了丰富的材料数据库,方便客户根据自身喜好和预算进行材料选择。 框架方面,项目采用了B/S架构,确保了系统的稳定性和可扩展性。后端使用Python的Django框架,前端则结合了HTML、CSS和JavaScript等技术,实现了用户界面的友好和响应速度。 开发此项目的目的,不仅是为了满足家居行业对个性化定制的需求,也为计算机相关专业的学生提供了一个实践和学习的平台,有助于提升他们的实际开发能力。

    简单连接到 Binance Public API.zip

    Binance公共API连接器Python 这是一个轻量级库,可作为Binance 公共 API的连接器支持的 API/api/*/sapi/*现货 Websocket 市场动态现货用户数据流现货 WebSocket API包含测试用例和示例可定制的基本 URL、请求超时和 HTTP 代理可以显示响应元数据安装pip install binance-connector文档https://binance-connector.readthedocs.ioRESTful API使用示例from binance.spot import Spotclient = Spot()# Get server timestampprint(client.time())# Get klines of BTCUSDT at 1m intervalprint(client.klines("BTCUSDT", "1m"))# Get last 10 klines of BNBUSDT at 1h intervalprint(client.k

    离线安装eclipse的aptana插件详细中文最新版本

    Aptana是一个非常强大,开源,JavaScript-focused的AJAX开发IDE。 Aptana的特点包括: 1JavaScript,HTML,CSS语言的Code Assist功能。 2Outliner(大纲):显示JavaScript,HTML和CSS的代码结构。

    学习自律养成小程序 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程.zip

    学习自律养成小程序 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程 项目启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS

    认知能力评估表.docx

    认知能力评估表.docx

    数学建模学习资料 粒子群算法 先进算法讲义.pdf

    数学建模学习资料 粒子群算法 先进算法讲义.pdf

Global site tag (gtag.js) - Google Analytics