[Linux]常用命令、组合命令以及输入输出重定向

2020-03-10阅读 1580
 
原创文章

文章目录

  • 0.切换目录
  • 1.复制文件和目录`cp`
    • 1.1.复制文件
    • 1.2.复制目录
    • 1.3.扩展参数
  • 2.删除文件和目录`rm`
    • 2.1.删除文件
    • 2.2.删除目录
    • 2.3.扩展参数
  • 3.创建文件和目录`touch`、`mkdir`
    • 3.1.创建文件
    • 3.2.创建目录
    • 3.3.创建目录和中间必要的子目录
  • 4.移动和重命名文件`mv`
  • 5.变更到其他用户`su`
    • 5.1.一般用法
    • 5.2. 扩展
  • 6.查看命令`ls`
    • 6.1.总览
    • 6.2.显示权限、所有者等详细信息
  • 7.组合命令
    • 7.1. 连续运行多个命令
    • 7.2. 只有前面的命令运行Ok,才能运行下一个命令
    • 7.3. 只有前面的命令运行Fail,才能运行下一个命令
    • 7.4. 将一个命令的输出插入到另一个命令
    • 7.5.输入\输出流
    • 7.6. 将一个命令的输出 用作 另一个命令的输入
    • 7.7. 将命令的输出重定向到文件
    • 7.8. 防止重定向时 覆盖文件
    • 7.9. 将命令的输出追加到文件
    • 7.10.将文件作为命令的输入
  • 8.参考文献

0.切换目录

  • cd ~:切换到Home目录;
  • cd -:切换到以前的目录;
  • pwd:显示当前目录路径。

1.复制文件和目录cp

1.1.复制文件

命令cp

# 将/etc/下的文件source.cpp复制到/home/下,变成dest.cpp
cp /etc/source.cpp /home/dest.cpp # 将/etc/下的文件source.cpp复制到/home/下
cp /etc/source.cpp /home/

1.2.复制目录

要加上一个参数-r

# 将/etc/下的目录dirSource复制到/home/下
# 此时/home/下多了一个dirSource目录(包括里面的子文件和子文件夹)
cp -r /etc/dirSource /home/

1.3.扩展参数

  • cp -v:
  • cp -i:
  • cp -a:

2.删除文件和目录rm

命令rm

2.1.删除文件

# 删除/etc/下的source.cpp文件
rm /etc/source.cpp

2.2.删除目录

要加上一个参数-r

# 将/etc/下的目录dirSource复制到/home/下
# 可以将目录及该目录中的所有文件全部删除
rm -r /home/dirSource

删除非空目录,还有一种更为简单的方法:把-R(或recursive)和-f(或--force)选项结合起来使用。-r选项告诉rm命令进入到它发现的每个子目录中去删除文件,而-f选项只是告诉rm命令完成任务但不要因为些细节问题(比如文件夹非空)而烦扰用户。

2.3.扩展参数

  • rm -v:
  • rm -i:

3.创建文件和目录touchmkdir

3.1.创建文件

方法很多,用touch命令可以创建一个空的文件,如果touch后面跟的是一个已经存在的文件,则会修改该文件的修改日期。

touch newFile1.cpp

或者直接用>生成一个文本文件:

echo "the str you want to write." > newFile2.txt

3.2.创建目录

命令mkdir

# 在当前目录下创建了两个目录 dir1 和 dir2
mkdir dir1 dir2

3.3.创建目录和中间必要的子目录

如果在当前目录下创建一个新目录,然后在再这个新目录中创建一个新的子目录,然后再创建子目录的子目录,怎么高效率完成? 用mkdir的一个参数-p或者--parents

# 在当前目录下创建一个son_dir目录
# 如果没有grand_pa和father_dir目录会先创建这两个目录
mkdir -p grandpa_dir/father_dir/son_dir

使用-v选项(或--verbose)能告诉你mkdir命令所执行的每一步操作,你就不需要再进行实际检查来确定mkdir命令是否正确完成了任务。

root@HP-xw4600:/home# mkdir -pv grandpa_dir/father_dir/son_dir
mkdir: 已创建目录 'grandpa_dir'
mkdir: 已创建目录 'grandpa_dir/father_dir'
mkdir: 已创建目录 'grandpa_dir/father_dir/son_dir'

4.移动和重命名文件mv

cp命令基本一致。

警告 对于mv命令,有个非常重要但又很容易被忽略的细节需要知道。如果你在移动一个指向目录的软链接,就需要特别注意输入的内容。假设在你的home目录中有一个名为dogs的软链接指向/home/scott/pictures/dogs,而你想将这个链接移动到/home/scott/libby子目录中。以下这个命令只移动软链接:

$ mv dogs ~/libby

而以下这条命令移动的是软链接所指向的目录:

$ mv dogs/ ~/libby

区别在什么地方呢?就是在软链接的末端加了一个简单的斜杠(“/”)。

  • 没有斜杠的话,移动的是软链接本身,而且只是这个链接;
  • 有了斜杠的话,移动的将是软链接指定的目录,而不是软链接本身。

一定要小心啊!

5.变更到其他用户su

5.1.一般用法

su命令代表“switch user”(切换用户),并不是大多数人想象的“super user”(超级用户),能够让某个用户暂时以另一个用户的身份进行操作。当在shell中想快速成为root用户时,这个命令最常用,运行一两个命令,然后恢复到普通的非root用户。

调用su命令并不难。只要输入su,后面跟上你想要采用的用户身份就可以了。

root@HP-xw4600:/home# whoami
root
root@HP-xw4600:/home# su qfx
qfx@HP-xw4600:/home$ whoami
qfx
qfx@HP-xw4600:/home$ cd ~
qfx@HP-xw4600:~$ pwd
qfx@HP-xw4600:~$ /home/qfx
qfx@HP-xw4600:~$ su root
密码:
root@HP-xw4600:~# whoami
root
root@HP-xw4600:~# pwd
/root

5.2. 扩展

  • su: 只输入su相当于输入了su root,即拥有了root的名义和能力,而且只有这些了。实际上,非root环境变量仍然存在;
  • su -l username: -l或者--login
  • su -: 当使用su -时,不但用户变更成了root,而且还使用了root的环境变量;

6.查看命令ls

6.1.总览

  • ls -R: 用一个命令来查看多个子目录的内容;
  • ls -r: 以相反的顺序来排列显示内容,-r--reverse
  • ls -X:按文件的扩展名排序,-X--sort=extension
  • ls -t:按日期和时间排序,-t--sort=time
  • ls -S:按文件大小进行排序,-S--sort=size
  • ls -h: 用K、M和G显示文件大小;
  • ls -1: 用单独一列的方式来查看ls命令的结果;
  • ls -l: 显示权限、所有者等详细信息,使用-l选项(或--format=long);
  • ls -a: 查看隐藏文件和文件夹;
  • ls -m:另外一种显示格式选择就是-m选项(或--format=commas),用逗号分隔开;
  • ls --color:用不同颜色显示各种类型的文件和文件夹;
  • ls -F:ls命令默认不会告诉你更多其他的信息。仅凭名称,很难区分清楚某项是文件、目录,或是其他什么东西。为了解决这一问题,可以让ls命令提供更多的信息,一种简单方法就是使用-F选项(或--classify)。

ls -F命令使用后,显示文件后面跟的字符的含义:

显示文件(文件夹)后面的字符

ls -F命令对应含义

*

可执行文件

/

目录

@

符号链接文件

|

管道(FIFO)

=

嵌套字(socket)

6.2.显示权限、所有者等详细信息

ls -l: 显示权限、所有者等详细信息,使用-l选项(或--format=long);

drwxr-xr-x  2 qfx   qfx   4096      11月  2 22:42 桌面
drwxrwxr-x 2 qfx qfx 4096 11月 2 21:32 HDD_sdb1
brw-rw---- 1 root disk 8, 5 11月 6 13:07 sda5
brw-rw---- 1 root disk 8, 16 11月 6 13:07 sdb
brw-rw---- 1 root disk 8, 17 11月 6 13:07 sdb1
crw-rw---- 1 root disk 21, 0 11月 6 13:07 sg0
crw-rw----+ 1 root cdrom 21, 1 11月 6 13:07 sg1
crw-rw---- 1 root disk 21, 2 11月 6 13:07 sg2
drwxrwxrwt 2 root root 140 11月 6 13:07 shm
crw------- 1 root root 10, 231 11月 6 13:07 snapshot
drwxr-xr-x 3 root root 200 11月 6 13:07 snd
brw-rw----+ 1 root cdrom 11, 0 11月 6 13:07 sr0
lrwxrwxrwx 1 root root 15 11月 6 13:07 stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 11月 6 13:07 stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 11月 6 13:07 stdout -> /proc/self/fd/1
crw-rw-rw- 1 root tty 5, 0 11月 6 13:07 tty
crw--w---- 1 root tty 4, 0 11月 6 13:07 tty0
crw--w---- 1 root tty 4, 1 11月 6 13:07 tty1
  • 每行最右边1列,显示的是文件的名称;
  • 向左一列,显示的文件最后被修改的时间(日期和时间);
  • 再向左一列,显示文件的大小(单位是字节B,byte);
  • 再向左一列,显示文件所属的(以上的例子组有qfxrootdiskcdrom等);
  • 再向左一列,显示文件的所有者(以上的例子所有者只有qfxroot);
  • 在向左一列,包含了一个数字。如果你正在处理一个文件,这个数字可以告诉你该文件有多少个硬链接(hard link);如果它是目录,这个数字是指该目录中包含有多少项内容。
  • 最左边1列,包含每个文件和目录的真正权限。每个代码有10个字符,分成了4组:

将最左边1列分成4组,例如第二行的HDD_sdb1,它的代码为drwxrwxr-x分成4组,为d|rwx|rwx|r-x

  • 第1组:由1个字符组成;
  • 第2组:由3个字符组成,字符2~4;
  • 第3组:由3个字符组成,字符5~7;
  • 第4组:由3个字符组成,字符8~10;

第1组 告诉我们它是什么类型的文件,这个d表示HDD_sdb1是个目录,具体其他的类型如下表所示:

每行显示第1列字符

ls -l命令对应含义

-

普通文件

-

可执行文件

d

目录

l

符号链接文件

s

嵌套字(socket)

b

块设备(block device)

c

字符设备(character device)

p

命名管道(named pipe)

第2组:文件所有者的权限; 第3组:文件的组的权限; 第4组:系统中其他用户的权限;

其中: r : 表示允许读取w : 表示允许改写(可以修改和删除); x : 表示允许执行

位置排列分别是rwx,如果原本要出现rwx的位置出现了-,就表示不允许读写不允许改写不允许执行

7.组合命令

7.1. 连续运行多个命令

命令1 ; 命令2

如果需要连续运行多个命令,但是其中一些命令运行的时间比较长,而你不想长时间地守候在计算机旁,这个时候应该怎么办呢? 命令栈command stacking)可以解决这一问题。 命令栈是将所有需要运行的命令放到shell的一行上,再用分号(;)隔开每个具体的命令。接着依次顺序执行每个命令,只有一个命令结束运行(无论成功或失败),才会运行下一个命令。

root@HP-xw4600:~# sheep 3; import -frame pic.tif

这个例子中的sleep命令会等待3秒钟,然后使用import命令截取屏幕截图。有几秒钟的延迟,你就有时间最小化终端控制台应用程序,把你想让截图中出现的任何窗口调到前面来。分号(;)便于从逻辑上分隔各个命令,这样你就能最大程度地使用这些命令。

7.2. 只有前面的命令运行Ok,才能运行下一个命令

命令1 && 命令2

依次顺序运行每个命令,但只有当前面一条命令运行成功之后,才能执行下一条命令[从技术上讲,每条命令返回的退出状态(exit status)码必须为0,才能运行下一条命令]。如果一条命令运行失败,整个命令链就会停下来。

root@HP-xw4600:~# unzip /home/qfx/mars.zip && rm /home/qfx/mars.zip

7.3. 只有前面的命令运行Fail,才能运行下一个命令

命令1 || 命令2

只有第一个命令失败了(从技术上讲,命令返回的退出状态码不为0),第二条命令才会运行。可以把它看作这样的短语:不是运行第一个命令,就是运行第二个命令

当一个处理失败时,经常用||给管理员发送警告。例如,为了确保特定的计算机开启和正在运行,管理员可能不时地使用ping命令对它进行查询。如果ping不通,则发送一封电子邮件给管理员,通报这一情况。

root@HP-xw4600:~# ping -c 1 -w 15 -n 72.14.203.104 ||
{
echo “Server down” | mail -s 'Server down' admin@google.com
}

7.4. 将一个命令的输出插入到另一个命令

$()

命令替换(command substitution)是接受一个命令的输出,并将它插入到另一个命令中,好像你直接手工输入这一输出的内容一样。用$()最初运行的命令括起来(这个命令将产生要被插入的输出内容)。

date "+%Y-%m-%d"产生的字符串作为,mkdir的参数,用于创建一个以年月日为名字的文件夹。

root@HP-xw4600:~# ls
drwxr-xr-x 2 root root 4096 11月 2 22:39 ruleFTP/
root@HP-xw4600:~# date "+%Y-%m-%d"
2018-11-08
root@HP-xw4600:~# mkdir $(date "+%Y-%m-%d")
root@HP-xw4600:~# ls
drwxr-xr-x 2 root root 4096 11月 8 19:59 2018-11-08/
drwxr-xr-x 2 root root 4096 11月 2 22:39 ruleFTP/

7.5.输入\输出流

需要理解Linux shell的三种输入/输出流

  • 标准输入流(standard input)
  • 标准输出流(standard output)
  • 标准错误流(standard error)

每种输入/输出流都有一个文件描述符(或数字标识符)、一个常用的缩写名和一个可用的默认设备

例如:

  • 用键盘输入时,其实就是将输入发送到标准输入流,缩写为stdin,标识为0
  • 当计算机将输出显示到终端时,使用的就是标准输出流,缩写为stdout,标识为1
  • 如果计算机需要报告错误,并在终端上显示错误信息,使用的就是标准错误流,缩写为stderr,标识为2

使用ls这个普通的命令,查看这三种输入/输出流。在键盘上输入ls,使用的是stdin。输入ls后按Enter键,目录中文件和文件夹的列表通过stdout显示出来。如果对并不存在的文件夹来运行ls命令,终端上出现的错误信息就是通过stderr而提供的。

文件描述符(标识符)

名称

常用缩写名

典型的默认设备

0

标准输入流

stdin

键盘-K

1

标准输出流

stdout

终端-T

2

标准错误流

stderr

终端-T

重定向输入和输出:

例如,不让输出呈现在终端上,可以将输出重定向到其他程序。不从键盘接受输入,程序从文件获取输入

7.6. 将一个命令的输出 用作 另一个命令的输入

命令1 | 命令2

Unix是由一些小片段松散连接在一起的,这是句真理。除了管道(pipe)的概念,没有什么比它更能体现这一原则了。管道就是键盘上的“|”符号,当把它放在两个命令之间时,它可以将第一个命令的输出作为第二个命令的输入。换句话说,|重定向stdout,将它发送到第二个命令的stdin

下面的例子是,用ls -1命令显示/etc/apt/目录中所有的文件和目录,将其输出通过管道传递给grep命令,让在这里搜索包含apt的文件或目录。

root@HP-xw4600:/etc/apt# ls -1
apt.conf.d
preferences.d
sources.list
sources.list.bak
sources.list.d
trusted.gpg
trusted.gpg~
trusted.gpg.d
root@HP-xw4600:/etc/apt# ls -1 | grep apt
apt.conf.d

7.7. 将命令的输出重定向到文件

command > file

通常,输出是显示在屏幕上的,因此称其为标准输出(stdout)设备。如果不想将输出结果显示到屏幕上,则可以使用>大于号)字符将输出存到文件中。

root@HP-xw4600:~# ls -1
ruleFTP
root@HP-xw4600:~# ls -1F > newFile.txt
root@HP-xw4600:~# ls -1
newFile.txt
ruleFTP

注意: 在使用>之前,文件newFile.txt并不存在。

  • 当使用>将输出重定向到并不存在的文件时,就会创建这个文件
  • 特别需要注意的是,如果文件newFile.txt早已存在,它将被完全覆盖

7.8. 防止重定向时 覆盖文件

有一种办法可以防止重定向时覆盖文件,即noclobber选项。如果将noclobber设置为onbash就不允许重定向覆盖已经存在的文件,除非得到你的明确许可。要打开noclobber,使用以下命令:

$ set -o noclobber

从现在起,如果要使用重定向并覆盖文件,应该用>|代替>

root@HP-xw4600:~# ls -1
newFile.txt
ruleFTP
root@HP-xw4600:~# set -o noclobber
root@HP-xw4600:~# ls -1F > newFile.txt
-bash: newFile.txt: 无法覆盖已存在的文件
root@HP-xw4600:~# ls -1F >| newFile.txt
root@HP-xw4600:~#

如果觉得不喜欢或不需要noclobber,可以把它关了:

$ set +o noclobber

要一直开着noclobber选项,需要在.bashrc文件中增加一行set -o noclobber

7.9. 将命令的输出追加到文件

command >> file

记住,使用>重定向时:

  • 如果文件不存在,就会创建一个新文件
  • 如果文件已经存在,则会覆盖已有的文件

但是: 如果使用>>来代替>,就会把输出追加到指定文件的底部(如果文件不存在,就会创建它)。

7.10.将文件作为命令的输入

command < file

通常,通过键盘提供命令的输入,因此称其为标准输入(stdin)设备。与将stdout重定向到文件一样,也可以重定向stdin,让它接受来自文件而不是键盘的输入

这有什么用呢?

有些命令不能直接打开文件,在这种情况下,<小于号)就是你需要的解决方法。

计算 newFile.txt文件中的行数,可以使用下面的命令:

  • 例子1: wc -l newFile.txt
  • 例子2: wc -l < newFile.txt
  • 第一个例子,会输出文件名;
  • 第二个不会,因为它仅仅知道从标准输入读取内容。

cat -n命令可以看出,这个文件一共有3行。

root@HP-xw4600:~# cat -n newFile.txt
1 this is first line!
2 2nd line!
3 3rd line!
root@HP-xw4600:~# cat newFile.txt
this is first line!
2nd line!
3rd line!
root@HP-xw4600:~# wc -l newFile.txt
3 newFile.txt
root@HP-xw4600:~# wc -l < newFile.txt
3

8.参考文献

[1].Linux命令速查手册:https://book.douban.com/subject/4046184/


OK! 以上,Enjoy~

[Linux]常用命令、组合命令以及输入输出重定向的更多相关文章

  1. ## 本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘

    本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘一,磁盘管理1.显示当前目录位置 pwd2.切换目录 cd ...

  2. Linux 常用的压缩命令有 gzip 和 zip

    Linux 常用的压缩命令有 gzip 和 zip,两种压缩包的结尾不同:zip 压缩的后文件是 *.zip ,而 gzip 压缩后的文件 *.gz 相应的解压缩命令则是 gunzip 和 unzip ...

  3. linux常用60条命令 转

    Linux必学的60个命令   Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命 ...

  4. LINUX常用配置及命令

    一.   Fedora系统配置 1.      [设置网卡IP] 步骤如下: 1)     用root用户登陆,打开/etc/sysconfig/network-scripts/ifcfg-eth0文 ...

  5. Linux常用的基础命令总结

    man 查看英文命令帮助   可以看作--help 拷贝目录的命令cp -a  包含所有 ls -a 显示所有文件包括隐藏文件  -ld ls -F 过滤目录文件(给不同类型文件结尾加上不同的符号) ...

  6. 入门学习Linux常用必会命令实例详解

    Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正理解Linux系统, ...

  7. 网络编程学习笔记-linux常用的网络命令

    网络参数设置命令 所有时刻如果你想要做好自己的网络参数设置,包括IP参数.路由参数和无线网络等,就得要了解下面这些相关的命令才行.其中Route及ip这两条命令是比较重要的.当然,比较早期的用法,我们 ...

  8. linux常用20条命令

    1.cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如: cd /root/Docements # 切换到 ...

  9. LINUX常用操作命令和命令行编辑快捷键

    终端快捷键: Ctrl + a/Home 切换到命令行开始 Ctrl + e/End 切换到命令行末尾 Ctrl + l 清除屏幕内容,效果等同于clear Ctrl + u 清除剪切光标之前的内容 ...

  10. Java线上问题排查思路及Linux常用问题分析命令学习

    前言 之前线上有过一两次OOM的问题,但是每次定位问题都有点手足无措的感觉,刚好利用星期天,以测试环境为模版来学习一下Linux常用的几个排查问题的命令. 也可以帮助自己在以后的工作中快速的排查线上问 ...

随机推荐

  1. PReact10.5.13源码理解

    React源码看过几次,每次都没有坚持下来,索性学习一下PReact部分,网上讲解源码的不少,但是基本已经过时,所以自己来梳理下 render.js部分 import { EMPTY_OBJ, EMP ...

  2. PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) 目录 PAT (Basic Level) Practice (中文) 1050 螺旋矩阵 (25 分) ...

  3. Scrapy框架的安装

    Win+R 输入cmd打开命令行 我们先把pip升级到最新版,输入代码如下: pip install --upgrade pip 不过一般这种更新方式会经常性出错,安装文件在下载到一半时就会超时报错 ...

  4. java面试-垃圾回收器谈谈你的理解

    一.垃圾回收算法: 引用计数 复制算法 标记-清除 标记-整理 二.垃圾回收的方式: 串行(Serial).并行(Parallel).并发(CMS).G1 1.串行垃圾回收器(Serial) 它为单线 ...

  5. AutoAssign源码分析

    目录 AutoAssign源码分析 一. 简介 二. 论文理论 2.1 联合表示 2.2 正样本权重 2.3 负样本权重 2.4 总的loss 2.5 补充loss 三. 论文代码 四. 总结 五. ...

  6. Linux保护机制和绕过方式

    Linux保护机制和绕过方式 CANNARY(栈保护) ​ 栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行.用C ...

  7. Crackme_003

    功能: 拿到文件,先执行一下.功能如下: 1.nag窗口 会先出现如下nag窗口,持续几秒 2.注册窗口: 出现错误会提示:You Get Wrong  Try Again 破解: 1.查壳: 无壳, ...

  8. Java 在Excel中添加水印(单一水印、平铺水印)

    在Excel中没有直接添加水印的功能,但依旧可以通过一定方式来实现类似水印效果.本文通过Java程序代码介绍具体实现方法.可添加单一水印效果,即水印是以单个文本字样来呈现:也可添加多个平铺水印效果,即 ...

  9. Java程序设计基础第4章习题与自总

    怎么说呢?不论什么编程题,都有很多种方法解决问题,最后能解决我们所提出的问题才是关键的东西,也是未来成为工程师所需要的能力.解决问题是关键, 当我们做好了问题解决的关键途径的时候,如果有着profou ...

  10. C - The Suspects POJ - 1611(并查集)

    Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized ...