Linux基础命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基础命令相关的知识,希望对你有一定的参考价值。

重定向及管道


linux下一切皆文件。文件又可分为:普通文件、目录文件、链接文件和设备文件

Linux系统中使用文件来描述各种硬件,设备资源等

例如:硬盘和分区,光盘等设备文件


brw-rw----+ 1 root cdrom    11,   0 6月  24 16:53 sr0


重定向的含义


文件描述符定义:

是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符;文件描述符是一个简单的非负整数,用以标明每一个被进程所打开的文件,程序刚刚启动的时候,第一个打开的文件是0,第二个是1,依此类推。也可以理解为是一个文件的身份ID

用户通过操作系统处理信息的过程中,使用的交互设备文件(键盘,鼠标)



number    Channel name descripton              default connection usage

0 stdin standard input keyboard read only 

1 stdout standard output terminal write only

2 stderr standard error terminal write only

3+ filename other  files none read and /or write 


0表示的是标准输入   键盘

1表示的是标准输出   相当于终端或显示器

2表示的是标准错误   通过键盘和终端组合显示




1.查看某个进程信息


打开两个终端界面 pts1代表终端1.pts2代表终端2


pts1

[[email protected] ~]# passwd 

更改用户 root 的密码 。

新的 密码:


pts2

[[email protected] fd]# ps aux | grep passwd 

root      3606  0.0  0.4 168080  1992 pts/0    S+   19:48   0:00 passwd

root      3832  0.0  0.1 103256   848 pts/1    S+   20:45   0:00 grep passwd

[[email protected] ~]# cd /proc/3606

[[email protected] 3606]# ls               #此目录下是有关此进程的所有信息

attr     coredump_filter  io         mountstats     pagemap      stack

autogroup   cpuset           limits     net            personality  stat

auxv        cwd              loginuid   ns             root         statm

cgroup      environ          maps       numa_maps      sched        status

clear_refs  exe              mem        oom_adj        schedstat    syscall

cmdline     fd               mountinfo  oom_score      sessionid    task

comm        fdinfo           mounts     oom_score_adj  smaps        wchan

[[email protected] 3606]# 


[[email protected] 3606]# ll

总用量 0

dr-xr-xr-x. 2 root root 0 6月  24 19:49 attr   #属性 

-rw-r--r--. 1 root root 0 6月  24 19:50 autogroup

-r--------. 1 root root 0 6月  24 19:50 auxv

-r--r--r--. 1 root root 0 6月  24 19:50 cgroup

--w-------. 1 root root 0 6月  24 19:50 clear_refs

-r--r--r--. 1 root root 0 6月  24 19:49 cmdline #此进程执行的命令

-rw-r--r--. 1 root root 0 6月  24 19:50 comm

-rw-r--r--. 1 root root 0 6月  24 19:50 coredump_filter

-r--r--r--. 1 root root 0 6月  24 19:50 cpuset

lrwxrwxrwx. 1 root root 0 6月  24 19:50 cwd -> /root

-r--------. 1 root root 0 6月  24 19:50 environ #环境变量 

lrwxrwxrwx. 1 root root 0 6月  24 19:50 exe -> /usr/bin/passwd

dr-x------. 2 root root 0 6月  24 19:49 fd #文件描述符相关信息

dr-x------. 2 root root 0 6月  24 19:50 fdinfo

-r--------. 1 root root 0 6月  24 19:50 io

-rw-------. 1 root root 0 6月  24 19:50 limits

-rw-r--r--. 1 root root 0 6月  24 19:50 loginuid

-r--r--r--. 1 root root 0 6月  24 19:50 maps

-rw-------. 1 root root 0 6月  24 19:50 mem

-r--r--r--. 1 root root 0 6月  24 19:50 mountinfo

-r--r--r--. 1 root root 0 6月  24 19:50 mounts

-r--------. 1 root root 0 6月  24 19:50 mountstats

dr-xr-xr-x. 6 root root 0 6月  24 19:50 net

dr-x--x--x. 2 root root 0 6月  24 19:50 ns

-r--r--r--. 1 root root 0 6月  24 19:50 numa_maps

-rw-r--r--. 1 root root 0 6月  24 19:50 oom_adj

-r--r--r--. 1 root root 0 6月  24 19:50 oom_score

-rw-r--r--. 1 root root 0 6月  24 19:50 oom_score_adj

-r--r--r--. 1 root root 0 6月  24 19:50 pagemap

-r--r--r--. 1 root root 0 6月  24 19:50 personality

lrwxrwxrwx. 1 root root 0 6月  24 19:50 root -> /

-rw-r--r--. 1 root root 0 6月  24 19:50 sched

-r--r--r--. 1 root root 0 6月  24 19:50 schedstat

-r--r--r--. 1 root root 0 6月  24 19:50 sessionid

-r--r--r--. 1 root root 0 6月  24 19:50 smaps

-r--r--r--. 1 root root 0 6月  24 19:50 stack

-r--r--r--. 1 root root 0 6月  24 19:48 stat

-r--r--r--. 1 root root 0 6月  24 19:50 statm

-r--r--r--. 1 root root 0 6月  24 19:48 status

-r--r--r--. 1 root root 0 6月  24 19:50 syscall

dr-xr-xr-x. 3 root root 0 6月  24 19:50 task

-r--r--r--. 1 root root 0 6月  24 19:50 wchan

[[email protected] 3606]# 



[[email protected] fd]# ll

总用量 0

lrwx------. 1 root root 64 6月  24 19:49 0 -> /dev/pts/0  #输出到第一个终端

lrwx------. 1 root root 64 6月  24 19:49 1 -> /dev/pts/0

lrwx------. 1 root root 64 6月  24 19:49 2 -> /dev/pts/0

lrwx------. 1 root root 64 6月  24 19:49 3 -> socket:[34114] #调用的api

[[email protected] fd]# 



文件描述符限制:

因为文件描述符是系统的一个重要资源,一般来说系统有多少内存就可以打开多少的文件描述符,但是实际系统内核还是会做一些限制的,正常情况下一个系统最大打开文件数是内存的10%左右,我们也叫系统级限制,可以通过以下命令查看

同时,系统内核为了不让某一个单独进程消耗掉所有的文件资源,它对单个的进程可以打开的最大文件数也做了限制,我们叫它用户级限制


[[email protected] fd]# sysctl -a |grep fs.file-max #最大可以占用46396,相当于总内存的%10

fs.file-max = 46396

[[email protected] fd]# free

             total       used       free     shared    buffers  

Mem:        494224     486948       7276          0     100636  

-/+ buffers/cache:     327680     166544

Swap:      2031608       3672    2027936

[[email protected] fd]# 



输入输出标准说明

STDIN 标准输入 默认的设备是键盘  文件编号为:0  

命令将从标准输入文件中读取在执行过程中需要输入的数据,数据来源于文件,

STDOUT 标准输出  默认的设备是显示器  文件编号为:1

        命令执行后的输出结果,发送到标准输出文件,结果输出到文件

STDERR 标准错误   默认的设备是显示器  文件编号为:2 

命令将执行期间的各种错误信息发送到标准错误文件,错误信息发送到文件

标准输入,标准输出和标准错误默认使用键盘和显示器作为关联设备与操作系统进行交互完成最基本的输入,输出操作.


重定向输出

定义:将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器的屏幕上

重定向输出使用”>” “>>” 操作符号

屏幕显示的内容(123)  >> 新的文件 (a.txt) 

1>  覆盖文件内容

>> 追加内容

若重定向的输出的文件不存在,则会新建该文件



标准输入


1.查看当前主机的CPU的类型保存到kernel.txt文件中(而不是直接显示到屏幕上)

[[email protected] ~]# cat /proc/cpuinfo > kernel.txt 

[[email protected] ~]# ls

anaconda-ks.cfg              install.log.syslog         公共的  文档

apache-tomcat-7.0.77         jdk-7u80-linux-x64.tar.gz  模板    下载

apache-tomcat-7.0.77.tar.gz  kernel.txt                 视频    音乐

install.log                  vmware-tools-distrib       图片    桌面

[[email protected] ~]# cat kernel.txt   #查看cpu信息

processor : 0

vendor_id : GenuineIntel

cpu family : 6

model : 78

model name : Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz

stepping : 3

cpu MHz : 2592.002

cache size : 4096 KB

fpu : yes

fpu_exception : yes

cpuid level : 22

wp : yes

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc up arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm 3dnowprefetch ida arat pln pts dts fsgsbase smep

bogomips : 5184.00

clflush size : 64

cache_alignment : 64

address sizes : 40 bits physical, 48 bits virtual

power management:


[[email protected] ~]# 

注:如果是错误信息他会直接显示出来,只有正确信息才会保存的文件中 


[[email protected] ~]# cat /proc/123  > a.txt     #默认>的左边是1

cat: /proc/123: 没有那个文件或目录               #错误信息,没有这个文件或目录

[[email protected] ~]# ls

anaconda-ks.cfg              install.log.syslog         模板  音乐

apache-tomcat-7.0.77         jdk-7u80-linux-x64.tar.gz  视频  桌面

apache-tomcat-7.0.77.tar.gz  kernel.txt                 图片

a.txt                        vmware-tools-distrib       文档

install.log                  公共的                     下载

[[email protected] ~]# cat a.txt 

[[email protected] ~]# 




2.将内核的版本信息追加到kernel.txt


[[email protected] ~]# uname -r      #查看内核版本信息

2.6.32-431.el6.x86_64

[[email protected] ~]# uname -r >> kernel.txt   #将内核版本信息追加到kernel.txt文件中

[[email protected] ~]# cat !$                   #查看kernel.txt文件 

cat kernel.txt

processor : 0

vendor_id : GenuineIntel

cpu family : 6

model : 78

model name : Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz

stepping : 3

cpu MHz : 2592.002

cache size : 4096 KB

fpu : yes

fpu_exception : yes

cpuid level : 22

wp : yes

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc up arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm 3dnowprefetch ida arat pln pts dts fsgsbase smep

bogomips : 5184.00

clflush size : 64

cache_alignment : 64

address sizes : 40 bits physical, 48 bits virtual

power management:



2.6.32-431.el6.x86_64

[[email protected] ~]# 




重定向输入

将命令中接收输入的途径由默认的键盘改为其他文件.而不是等待从键盘输入

从文件读取数据 操作符: “ < ” 等价于 0<

<< 表示结束输入的内容,常用来配合eof使用

好处:通过重定向输入可以使一些交互式操作过程能够通过读取文件来完成



1.过滤出/etc/passwd中所有有关root的相关信息


[[email protected] ~]# grep root < /etc/passwd    #将/etc/passwd中所有信息导入,前者是过滤root信息,后者即为输入

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[[email protected] ~]# grep root /etc/passwd      #过滤出/etc/passwd中所有有关root的相关信息

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[[email protected] ~]# 



2.在脚本中我们可以通过重定向来打印消息菜单


[[email protected] ~]# cat a.sh 

#!/bin/bash 


cat <<eof

________________________________________

1.mysql

2.php

3.puppet 

________________________________________

eof

[[email protected] ~]# sh a.sh 

________________________________________

1.mysql

2.php

3.puppet 

________________________________________

[[email protected] ~]# 



3.mysql的数据导入

[[email protected] ~]# mysql –uroot –p123456 < worepree.sql






错误重定向

将命令执行过程中出现的错误信息 (选项或参数错误) 保存到指定的文件,而不是直接显示到显示器

作用:错误信息保存到文件

操作符: 使用2>

2指的是错误文件的编号 (在使用标准的输入和输出省略了1、0 编号)

在实际应用中,错误重定向可以用来收集执行的错误信息.为排错提供依据;对于shell脚本还可以将无关紧要的错误信息重定向到空文件/dev/null中,以保持脚本输出的简洁


1.查找adfasdf 文件,如果报错,不显示在终端界面上,而是写入b.txt文件

[[email protected] ~]# grep root adfasdf     2>b.txt 

[[email protected] ~]# echo $?

2

[[email protected] ~]# cat b.txt 

grep: adfasdf: 没有那个文件或目录

[[email protected] ~]# 


注:使用 2> 操作符时,会像使用 > 一样覆盖目标文件的内容,若追加而不覆盖文件的内容即可使用 2>> 操作符



=======================================

从哪输出信息 (通过命令等) > 输出到哪个地方 (文件等)

输出到哪个地方grep root < 从哪输出信息 /etc/passwd

========================================

输入一个  >  会造成文件内容覆盖    

输入二个 >> 是属于追加,不会覆盖原有文件内容

========================================



null黑洞


把/dev/null看作"黑洞". 它等价于一个只写文件。所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而 /dev/null对命令行和脚本都非常的有用.

 

1.查看当前目录下是否有asdfasdfwer文件,如果没有把错误信息移到/dev/null


[[email protected] ~]# ls asdfasdfwer 2> /dev/null 

[[email protected] ~]# echo $?

2

[[email protected] ~]# ls asdfasdfwer

ls: 无法访问asdfasdfwer: 没有那个文件或目录

[[email protected] ~]# 


2.将/etc/hosts文件内容复制到当前目录下的a.txt文件中 


[[email protected] ~]# dd if=/etc/host

host.conf    hosts        hosts.allow  hosts.deny   

[[email protected] ~]# dd if=/etc/hosts of=a.txt   #或者dd < /etc/host > a.txt

记录了0+1 的读入

记录了0+1 的写出

158字节(158 B)已复制,0.000265443 秒,595 kB/秒

[[email protected] ~]# du -sh a.txt 

4.0K a.txt

[[email protected] ~]# cat !$

cat a.txt

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

[[email protected] ~]# 

[[email protected] ~]# diff /etc/hosts ./a.txt     #对比两个文件的差别

[[email protected] ~]# 

[[email protected] ~]#



3.新建一个10M的文件,命名为file.txt 


[[email protected] ~]# 

[[email protected] ~]# dd if=/dev/zero  of=file.txt bs=1M  count=10 #从/dev/zero 中复制10M到file.txt文件   

记录了10+0 的读入

记录了10+0 的写出

10485760字节(10 MB)已复制,0.061904 秒,169 MB/秒

[[email protected] ~]# echo $? #查看上一条命令的返回值,如果为0则为真,如果为1等数字则为假

0

[[email protected] ~]# ls   #查看是否生成file.txt文件

anaconda-ks.cfg              a.txt        install.log.syslog         公共的  文档

apache-tomcat-7.0.77         b.txt        jdk-7u80-linux-x64.tar.gz  模板    下载

apache-tomcat-7.0.77.tar.gz  file.txt     kernel.txt                 视频    音乐

a.sh                         install.log  vmware-tools-distrib       图片    桌面

[[email protected] ~]# du -sh file.txt    #查看file.txt文件的大小

10M file.txt

[[email protected] ~]# 

特殊符号

 

输出到不同文件


正确的写到一个文件,错误的再写到一个文件

1.查找当前目录是否有asdfasdfqwer文件,如果有将正确的写到abc.txt 文件里,如果出现错误信息请输入到def.txt文件中


[[email protected] ~]# ls sadfasdfasdf  > abc.txt 2>def.txt 

[[email protected] ~]# ls

abc.txt                      a.txt        install.log.syslog         模板  音乐

anaconda-ks.cfg              b.txt        jdk-7u80-linux-x64.tar.gz  视频  桌面

apache-tomcat-7.0.77         def.txt      kernel.txt                 图片

apache-tomcat-7.0.77.tar.gz  file.txt     vmware-tools-distrib       文档

a.sh                         install.log  公共的                     下载

[[email protected] ~]# cat abc.txt 

[[email protected] ~]# cat def.txt        

ls: 无法访问sadfasdfasdf: 没有那个文件或目录

[[email protected] ~]# 



 &>符号

 

 &> 混合输出    & :表示等同于的意思


 

个人描述:

1>&2  将正确的输出和错误的输出,一起输出到一个文件

2>&1  将错误的输出和正确的输出,一起输出到一个文件

 

 

官方描述: 

1>&2 意思是把标准输出重定向到标准错误

2>&1 意思是把标准错误输出重定向到标准输出

把正确和错误的信息都输入到相同的位置

&> filename 意思是把标准输出和标准错误输出都重定向到文件filename中




1.将正确的输出和错误的输出,一起输出到一个文件abc.txt文件


[[email protected] ~]# ls asdfasdf /root   > abc.txt 2>&1

[[email protected] ~]# cat abc.txt 

ls: 无法访问asdfasdf: 没有那个文件或目录

/root:

abc.txt

anaconda-ks.cfg

apache-tomcat-7.0.77

apache-tomcat-7.0.77.tar.gz

a.sh

a.txt

b.txt

def.txt

file.txt

install.log

install.log.syslog

jdk-7u80-linux-x64.tar.gz

kernel.txt

vmware-tools-distrib

公共的

模板

视频

图片

文档

下载

音乐

桌面

[[email protected] ~]#

2.将错误的输出和正确的输出,一起输出到一个文件abcd.txt文件

[[email protected] ~]# ls asdfasdfasd /root/   2> abcd.txt   1>&2

[[email protected] ~]# cat abcd.txt 

ls: 无法访问asdfasdfasd: 没有那个文件或目录

/root/:

abcd.txt

abc.txt

anaconda-ks.cfg

apache-tomcat-7.0.77

apache-tomcat-7.0.77.tar.gz

a.sh

install.log

install.log.syslog

jdk-7u80-linux-x64.tar.gz

vmware-tools-distrib

公共的

模板

视频

图片

文档

下载

音乐

桌面

[[email protected] ~]# 

3.将正确和错误输出都输出到qwer.txt文件里


[[email protected] ~]# ls asdfasdfasd /root/   &> qwer.txt 

[[email protected] ~]# cat !$

cat qwer.txt

ls: 无法访问asdfasdfasd: 没有那个文件或目录

/root/:

abcd.txt

abc.txt

anaconda-ks.cfg

apache-tomcat-7.0.77

apache-tomcat-7.0.77.tar.gz

a.sh

install.log

install.log.syslog

jdk-7u80-linux-x64.tar.gz

qwer.txt

vmware-tools-distrib

公共的

模板

视频

图片

文档

下载

音乐

桌面

[[email protected] ~]# 

管道 |


语法:command-a | command-b | command-c | ......


注意:

1、管道命令只处理前一个命令正确输出,不处理错误输出

2、管道命令右边命令,必须能够接收标准输入的数据流命令才行

3、管道符可以把两条命令连起来,它可以链接多个命令使用



1.查看root用户一共占用多少进程 


[[email protected] ~]# ps aux  | grep root | wc -l

148

[[email protected] ~]# 

2.查看/etc/passwd 文件中的每一行


加上xargs,它表示把前面的内容的数据流转换为一个个命令参数,然后传给ls使用


[[email protected] ~]# cat /etc/passwd | xargs ls 

ls: 无法访问root:x:0:0:root:/root:/bin/bash: 没有那个文件或目录

ls: 无法访问bin:x:1:1:bin:/bin:/sbin/nologin: 没有那个文件或目录

ls: 无法访问daemon:x:2:2:daemon:/sbin:/sbin/nologin: 没有那个文件或目录

ls: 无法访问adm:x:3:4:adm:/var/adm:/sbin/nologin: 没有那个文件或目录

ls: 无法访问lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin: 没有那个文件或目录

ls: 无法访问sync:x:5:0:sync:/sbin:/bin/sync: 没有那个文件或目录

ls: 无法访问shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown: 没有那个文件或目录

ls: 无法访问halt:x:7:0:halt:/sbin:/sbin/halt: 没有那个文件或目录

ls: 无法访问mail:x:8:12:mail:/var/spool/mail:/sbin/nologin: 没有那个文件或目录

ls: 无法访问uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin: 没有那个文件或目录

ls: 无法访问operator:x:11:0:operator:/root:/sbin/nologin: 没有那个文件或目录

ls: 无法访问games:x:12:100:games:/usr/games:/sbin/nologin: 没有那个文件或目录

ls: 无法访问gopher:x:13:30:gopher:/var/gopher:/sbin/nologin: 没有那个文件或目录

ls: 无法访问ftp:x:14:50:FTP: 没有那个文件或目录

ls: 无法访问User:/var/ftp:/sbin/nologin: 没有那个文件或目录

ls: 无法访问nobody:x:99:99:Nobody:/:/sbin/nologin: 没有那个文件或目录

ls: 无法访问dbus:x:81:81:System: 没有那个文件或目录

.....................

3.查找当前目录下所有以txt为后缀的文件全部删除 


[[email protected] ~]# find ./ -name "*.txt" | xargs rm -rf     

[[email protected] ~]# echo $?

0

[[email protected] ~]# ls

anaconda-ks.cfg              install.log.syslog         模板  音乐

apache-tomcat-7.0.77         jdk-7u80-linux-x64.tar.gz  视频  桌面

apache-tomcat-7.0.77.tar.gz  nohup.out                  图片

a.sh                         vmware-tools-distrib       文档

install.log                  公共的                     下载

[[email protected] ~]# 



管道与重定向的区别

管道

左边的命令应该有标准输出 | 右边的命令应该接受标准输入

管道触发两个子进程执行"|"两边的程序;而重定向是在一个进程内执行

管道两边都必须是shell命令

重定向

左边的命令应该有标准输出 > 右边只能是文件(可以是普通文件、文件描述符、设备文件)

左边的命令应该需要标准输入 < 右边只能是文件

tee命令


功能:读取标准输入的数据,并将其内容输出成文件。

语法:tee [-a][--help][--version][文件...]

参数:

-a或  --append  追加

--help  在线帮助

--version  显示版本信息

tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件


1.查看当前目录下权限为644(rw-,r--,r--的文件或目录信息写入到abc文件中并最终输出前10行文件或目录信息


[[email protected] ~]# find ./ -depth   -perm 644 | tee abc | head -10 

./apache-tomcat-7.0.77.tar.gz

./.local/share/gvfs-metadata/home-092f4bd9.log

./.local/share/.converted-launchers

./.local/share/applications/preferred-web-browser.desktop

./.local/share/applications/preferred-mail-reader.desktop

./install.log

./.imsettings.log

./.bashrc

./jdk-7u80-linux-x64.tar.gz

./.bash_profile

[[email protected] ~]# cat abc  | wc -l

69

[[email protected] ~]# 



本文出自 “linuxtouch” 博客,谢绝转载!

以上是关于Linux基础命令的主要内容,如果未能解决你的问题,请参考以下文章

Linux运维基础:Linux基础命令

Linux运维基础:Linux基础命令

Linux基础命令

Linux基础知识--命令的基础知识

⭐️《Linux 系列》⭐️ Linux 基础命令

⭐️《Linux 系列》⭐️ Linux 基础命令