Fork me on GitHub

常见的Linux命令操作学习(2)

  我是一个Linux系统的初学者,在这就记录一下自己学到的一些知识。

一,Linux使用nohup命令后台运行程序

  nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断的运行命令,退出终端不会影响程序的运行。

  nohup命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下(如果不指定的话),如果当前目录的 nohup.out 文件不可写,输出重定向到  $HOME/nohup.out文件中。

  在Linux服务器上搭建web服务器,用ssh客户端登录后使用 ./startservice.sh 脚本启动服务,但是当ssh断开连接后起的服务器也会停掉。这时就可以使用下面命令运行服务,这样在ssh断开后服务也不会停。

 nohup ./startservice.sh >>nohup.out 2 > &1 & 

  上面代码的用途:不挂断地运行命令。

  语法格式:nohup Command  [ Arg ...  ] [ & ]

  参数说明:Command:要执行的命令

          Arg: 一些参数,可以指定输出文件

          & : 让命令在后台执行,终端退出后命令仍然可以执行

  语法描述:nohup命令运行由Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup命令运行后台中的程序。要运行后台中的 nohup命令,添加 & (表示“and” 的符号)到命令的尾部。

  所以上面命令中带 & 的命令行,即使 terminal(终端)关闭,或者电脑死机程序依然运行(前提是将程序提交给服务器)。

1,2>&1是什么意思?

  2>&1就是将标准错误输出重定向到与标准输出同一个文件中保存

  &表示全部文件,文件不管对错,1表示标准输出文件,2表示标准错误输出。

  上面 2>&1 的意思就是把标准错误(2) 重定向到标准输出(1),而标准输出又导入文件 output里面,所以结果是标准错误和标准输出都导入文件output里面了。至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而 stdout 有。这就会导致 >output 2>output 文件被output 被打开两次,而 stdout 和 stderr 将会竞争覆盖,这肯定不是我们想要的。

  操作系统中有三个常用的流:

  • 0:标准输入流 stdin(Standard  input)
  • 1:标准输入流 stdout(Standard output)
  • 2:标准错误流 stderr(Standard error)

  一般当我们用 > console.txt,实际是 1>console.txt的省略用法;< console.txt ,实际是 0 < console.txt的省略用法。

2,实例

  以下命令在后台执行 root目录下的 runcode.sh 脚本:

nohup /root/runcode.sh &

   在终端如果看到以下输出说明运行成功:

appending output to nohup.out

   这时我们打开 root 目录 可以看到生成了 nohup.out 文件。

  如果要停止运行,你需要使用下面命令查找到 nohup 运行脚本的 PID,然后使用 kill 命令来删除:

ps -aux | grep "runcode.sh" 

   找到 PID后,就可以使用 kill  PID 来删除。

  以下命令在后台执行 root 目录下的 runcode.sh 脚本,并重定向到 runcode.log 文件:

nohup /root/runcode.sh > runcode.log 2>&1 &

 

二,ctrl+c,ctrl+d,ctrl+z在linux程序中意义和区别

  ctrl+c和ctrl+z都是中断命令,但是他们的作用却不一样.

  ctrl+c是强制中断程序的执行,,进程已经终止。

  ctrl+z的是将任务中止(暂停的意思),但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态,用户可以使用fg/bg操作继续前台或后台的任务,fg命令重新启动前台被中断的任务,bg命令把被中断的任务放在后台执行.

  例如:当你vi一个文件是,如果需要用shell执行别的操作,但是你又不打算关闭vi,因为你得存盘推出,你可以简单的按下ctrl+z,shell会将vi进程挂起~,当你结束了那个shell操作之后,你可以用fg命令继续vi你的文件。

ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。

注:在shell中,ctrl-d表示推出当前shell

 

三,Linux文件夹中的文件颜色

  今天看到Linux文件夹中的文件颜色,很是好奇,所以百度一下,满足了自己的好奇心。

绿色文件: 可执行文件,可执行的程序 
 
红色文件:压缩文件或者包文件
 
蓝色文件:目录
 
白色文件:一般性文件,如文本文件,配置文件,源码文件等 
 
浅蓝色文件:链接文件,主要是使用ln命令建立的文件
 
红色闪烁:表示链接的文件有问题
 
黄色:表示设备文件
 
灰色:表示其他文件
 
  在终端输入ls-l就会出现花花绿绿的东西,如下:
 

  共显示了七列信息,从左至右依次为:权限、文件数、归属用户、归属群组、文件大小、创建日期、文件名称。

1,Linux中 .bak 后缀文件是什么?

  记录一次重启错备份文件脚本造成的错误。

  .bak 后缀文件是该文件的备份

  备份文件内容很可能不是最新的备份,所以尽量不要执行备份中的脚本。


四,Linux中ls和ll的区别

  ll 列出来的结果详细,有时间,是否可读写等信息 ,像windows里的 详细信息
  ls 只列出文件名或目录名 就象windows里的  列表

ll不是命令,是ls -l的别名

ls 命令可以说是linux下最常用的命令之一。
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。
-c 输出文件的 i 节点的修改时间,并以此排序。
-d 将目录象文件一样显示,而不是显示其下的文件。
-e 输出时间的全部信息,而不是输出简略信息。
-f -U 对输出的文件不排序。
-g 无用。
-i 输出文件的 i 节点的索引信息。
-k 以 k 字节的形式表示文件的大小。
-l 列出文件的详细信息。
-m 横向输出文件名,并以“,”作分格符。
-n 用数字的 UID,GID 代替名称。
-o 显示文件的除组信息外的详细信息。
-p -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通

  

五,Linux里sh命令是做什么的?

    sh或是执行脚本,或是切换到sh这个bash里,默认的shell是bash,你
可以试试tcsh啊,csh啊,ksh,zsh什么的,看看别的shell是什么样子的。
当然,linux中sh是链接到bash上的,所以sh与bash在功能上是没有区别的。

    还有就是在执行脚本的时候是用sh + 脚本名的方式来执行,其实,大部
分的时候,简单脚本只要权限设置正确,可以直接执行,不需要sh命令的

---------------------

 

六,文件类型的详细说明

6.1  文件类型

普通文件(regular file)

  就是一般存取的文件,由ls -al显示出来的属性中,第一个属性为 [-],例如 [-rwxrwxrwx]。另外,依照文件的内容,又大致可以分为:

  1、纯文本文件(ASCII):这是Unix系统中最多的一种文件类型,之所以称为纯文本文件,是因为内容可以直接读到的数据,例如数字、字母等等。设 置文件几乎都属于这种文件类型。举例来说,使用命令“cat ~/.bashrc”就可以看到该文件的内容(cat是将文件内容读出来)。

  2、二进制文件(binary):系统其实仅认识且可以执行二进制文件(binary file)。Linux中的可执行文件(脚本,文本方式的批处理文件不算)就是这种格式的。举例来说,命令cat就是一个二进制文件。

  3、数据格式的文件(data):有些程序在运行过程中,会读取某些特定格式的文件,那些特定格式的文件可以称为数据文件(data file)。举例来说,Linux在用户登入时,都会将登录数据记录在 /var/log/wtmp文件内,该文件是一个数据文件,它能通过last命令读出来。但使用cat时,会读出乱码。因为它是属于一种特殊格式的文件。

目录文件(directory):

  就是目录,第一个属性为 [d],例如 [drwxrwxrwx]。

    1,连接文件(link):类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]。

  2,设备与设备文件(device):与系统外设及存储等相关的一些文件,通常都集中在 /dev目录。通常又分为两种:

  3,块设备文件:就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为 [b]。

  4,字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]。

  5,套接字(sockets):这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型。

  6,管道(FIFO,pipe):FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p]。

6.2 文件结构

  /:根目录,所有的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者。

  /bin:bin 就是二进制(binary)英文缩写。在一般的系统当中,都可以在这个目录下找到linux常用的命令。系统所需要的那些命令位于此目录。

  /boot:Linux的内核及引导系统程序所需要的文件目录,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录。

  /cdrom:这个目录在刚刚安装系统的时候是空的。可以将光驱文件系统挂在这个目录下。例如:mount /dev/cdrom /cdrom

  /dev:dev 是设备(device)的英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序。这一点和常用的windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。

  /etc:etc这个目录是linux系统中最重要的目录之一。在这个目录下存放了系统管理时要用到的各种配置文件和子目录。要用到的网络配置文件,文件系统,x系统配置文件,设备配置信息,设置用户信息等都在这个目录下。

  /home:如果建立一个用户,用户名是"xx",那么在/home目录下就有一个对应的/home/xx路径,用来存放用户的主目录。

  /lib:lib是库(library)英文缩写。这个目录是用来存放系统动态连接共享库的。几乎所有的应用程序都会用到这个目录下的共享库。因此,千万不要轻易对这个目录进行什么操作,一旦发生问题,系统就不能工作了。

  /lost+found:在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移到文件到原来的位置上。

  /mnt:这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom等目录。可以参看/etc/fstab的定义。

  /media:有些linux的发行版使用这个目录来挂载那些usb接口的移动硬盘(包括U盘)、CD/DVD驱动器等等。

  /opt:这里主要存放那些可选的程序。

  /proc:可以在这个目录下获取系统信息。这些信息是在内存中,由系统自己产生的。

  /root:Linux超级权限用户root的家目录。

  /sbin:这个目录是用来存放系统管理员的系统管理程序。大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin目录是相似的,凡是目录sbin中包含的都是root权限才能执行的。

  /selinux :对SElinux的一些配置文件目录,SElinux可以让linux更加安全。

  /srv 服务启动后,所需访问的数据目录,举个例子来说,www服务启动读取的网页数据就可以放在/srv/www中

  /tmp:临时文件目录,用来存放不同程序执行时产生的临时文件。有时用户运行程序的时候,会产生临时文件。/tmp就用来存放临时文件的。/var/tmp目录和这个目录相似。

  /usr这是linux系统中占用硬盘空间最大的目录。用户的很多应用程序和文件都存放在这个目录下。在这个目录下,可以找到那些不适合放在/bin或/etc目录下的额外的工具

  /usr/local:这里主要存放那些手动安装的软件,即不是通过“新立得”或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面、。

  /usr/share :系统共用的东西存放地,比如 /usr/share/fonts 是字体目录,/usr/share/doc和/usr/share/man帮助文件。

  /var:这个目录的内容是经常变动的,看名字就知道,可以理解为vary的缩写,

  /var下有/var/log 这是用来存放系统日志的目录。

  /var/ www目录是定义Apache服务器站点存放目录;

  /var/lib 用来存放一些库文件,比如MySQL的,以及MySQL数据库的的存放地。

七, Linux下的chmod +x是什么意思,为什么要使用这个?

  一个start.sh文件,本来是灰色的(普通的文件),如果执行chmod +x 给了权限,文件颜色就变成绿色。

  如果使用chmod -x 则就会变成灰色(普通的文本颜色),普通的文本颜色是不能执行的,执行会报错。

7.1  chmod +x 和 chmod u+x的区别

  设置谁拥有执行这个文件权限。chmod +x 和chmod a+x 是一样的,一般没有明确要求,就可以使用chmod +x。

  

八,Linux下输入,输出重定向的概念和用法学习

8.1,Linux 的标准输入与输出

  Linux标准输入设备指的是键盘,标准输出设备指的是显示器,标准错误输出指的是显示器。

在解释什么是重定向之前,再来说说什么是文件描述符。

8.2,Linux 文件描述符

  文件描述符可以理解为Linux系统为文件分配的一个数字,范围是0~3,用户也可以自定义文件描述符,但是自定义文件描述符不在这里的讨论范围。

  一般情况下,每个Unix/Linux 命令运行都会打开三个文件:

  • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
  • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
  • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

8.3,什么是输入重定向

  输入重定向:是指不使用系统提供的标准输入端口,而进行重新的指定。换言之,输入重定向就是不使用标准输入端口输入文件,而是使用指定的文件作为标准输入设备。(重定向简单理解就是使用 “<”符来修改标准输入设备)

  比如,默认情况下,cat命令会接受默认标准输入设备键盘的输入,并显示到控制台,但是可以通过“<”符号修改标准输入设备,指定文件作为标准输入设备,那么cat命令将指定的文件作为输入设备,并将文件中的内容读取并显示到控制台。

8.4,重定向基本概念

  a、I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9;(FD:file descripter,文件描述符)
  b、常用FD有3个,为: 0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor、monitor有关;
  c、用 < 来改变读进的数据信道(stdin),使之从指定的档案读进;
  d、用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案;
  e、0 是 < 的默认值,因此 < 与 0<是一样的;同理,> 与 1> 是一样的;
  f、在IO重定向 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料;
  g、管道“|”(pipe line):上一个命令的 stdout 接到下一个命令的 stdin;
  h、tee 命令是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去;
  i、bash(ksh)执行命令的过程:分析命令-变量求值-命令替代(``和$( ))-重定向-通配符展开-确定路径-执行命令;
  j、( ) 将 command group 置于 sub-shell 去执行,也称 nested sub-shell,它有一点非常重要的特性是:继承父shell的Standard input, output, and error plus any other open file descriptors。
  k、exec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除。exec 在对文件描述符进行操作的时候,也只有在这时,exec 不会覆盖你当前的 shell 环境。

5,基本IO

cmd > file                       把 stdout 重定向到 file 文件中

cmd >> file                    把 stdout 重定向到 file 文件中(追加)

cmd 1> fiel                    把 stdout 重定向到 file 文件中

cmd > file 2>&1            把 stdout 和 stderr 一起重定向到 file 文件中

cmd 2> file                    把 stderr 重定向到 file 文件中

cmd 2>> file                 把 stderr 重定向到 file 文件中(追加)

cmd >> file 2>&1         把 stderr 和 stderr 一起重定向到 file 文件中

cmd < file >file2           cmd 命令以 file 文件作为 stdin,以 file2 文件作为 stdout

cat <>file                      以读写的方式打开 file

cmd < file                      cmd 命令以 file 文件作为 stdin

cmd << delimiter          Here document,从 stdin 中读入,直至遇到delimiter 分界符

  

 

 

 

 

参考文献:https://www.jianshu.com/p/79579843e579

https://blog.csdn.net/world_zheng/article/details/83110029

posted @ 2018-08-17 19:54  战争热诚  阅读(589)  评论(0编辑  收藏  举报