Linux常用命令

常用命令

初识Linux

Bash和Shell关系

shell是运行在终端中的文本互动程序。

bash(GNU Bourne-Again Shell)是最常用的一种shell,是当前大多数Linux发行版的默认Shell。

Shell相当于是一个翻译,把我们在计算机上的操作或我们的命令,翻译为计算机可识别的二进制命令,传递给内核,以便调用计算机硬件执行相关的操作;同时,计算机执行完命令后,再通过Shell翻译成自然语言,呈现在我们面前。

其他的shell还有:sh、bash、ksh、rsh、csh等。

Ubuntu系统常用的是bash,Bio-linux系统是基于ubuntu定制的,但是却使用了zsh。

sh的全名是Bourne Shell。名字中的玻恩就是这个Shell的作者。

而bash的全名是Bourne Again Shell。最开始在Unix系统中流行的是sh,而bash作为sh的改进版本,提供了更加丰富的功能。一般来说,都推荐使用bash作为默认的Shell。

  • 什么是Shell?

shell是用户和Linux(或者更准确的说,是用户和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。

shell 是一个命令语言解释器(command-language interpreter)。拥有自己内建的 shell 命令集。此外,shell也能被系统中其他有效的Linux 实用程序和应用程序(utilities and application programs)所调用。

不论何时你键入一个命令,它都被Linux shell所解释。一些命令,比如打印当前工作目录命令(pwd),是包含在Linux bash内部的(就象DOS的内部命令)。其他命令,比如拷贝命令(cp)和移动命令(rm),是存在于文件系统中某个目录下的单独的程序。而对用户来说,你不知道(或者可能不关心)一个命令是建立在shell内部还是一个单独的程序。

shell 首先检查命令是否是内部命令,不是的话再检查是否是一个应用程序,这里的应用程序可以是Linux本身的实用程序,比如ls rm,然后shell试着在搜索路径($PATH)里寻找这些应用程序。搜索路径是一个能找到可执行程序的目录列表。如果你键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。而如果命令被成功的找到的话,shell的内部命令或应用程序将被分解为系统调用并传给Linux内核。

  • 什么是Bash

Bourne Again shell (bash), 正如它的名字所暗示的,是 Bourne shell 的扩展。bash 与 Bourne shell 完全向后兼容,并且在 Bourne shell 的基础上增加和增强了很多特性。bash 也包含了很多 C 和 Korn shell 里的优点。bash 有很灵活和强大的编程接口,同时又有很友好的用户界面。

为什么要用 bash 来代替 sh 呢?Bourne shell 最大的缺点在于它处理用户的输入方面。在 Bourne shell 里键入命令会很麻烦,尤其当你键入很多相似的命令时。而 bash 准备了几种特性使命令的输入变得更容易。

bash常见命令
复制代码
alias: 设置bash别名。
bg: 使一个被挂起的进程在后台继续执行。
cd: 改变当前工作目录。
exit: 终止shell。
export: 使变量的值对当前shell的所有子进程都可见 。
fc: 用来编辑历史命令列表里的命令。
fg: 使一个被挂起的进程在前台继续执行。
help: 显示bash内部命令的帮助信息。
kill: 终止某个进程。
pwd: 显示当前工作目录。
unalias: 删除已定义的别名。

bash 还有许多命令,但这些是最常用的,想了解更详细的情况,请参考bash的手册--在提示符下键入 man bash。

bash 变量

这里是几个最有用的bash变量,包括变量名和简单描述:

复制代码
EDITOR, FCEDIT: bsah fc 命令的缺省编辑器。
HISTFILE: 用于贮存历史命令的文件。
HISTSIZE: 历史命令列表的大小。
HOME: 当前用户的用户目录。
OLDPWD: 前一个工作目录。
PATH: bash寻找可执行文件的搜索路径。
PS1: 命令行的一级提示符。
PS2: 命令行的二级提示符。
PWD: 当前工作目录。
SECONDS: 当前shell开始后所流逝的秒。

内核的结构

何时需要使用内核:

涉及外部硬件的需要使用内核;内存中数据的变化不需要内核。

程序员使用内核的三种手段:

  1. 直接通过系统调用(system calls)使用
  2. 通过library routines(库函数,例如printf)
  3. 通过shell命令

登录

在进入Linux的时候,只需要输入用户名和口令就可以登录Linux系统。

用户名的信息存储在/etc/passwd里面,而口令信息存储在/etc/shadow里面。

shell 复制代码
$cat /etc/passwd
$cat /etc/shadow
# 如果出现 cat: /etc/shadow: Permission denied 权限不足,需要切换成root用户

shell命令也可以读取存储在文件里面的命令,这种文件称为shell脚本

本课程中学习的shell的类型是bash。(在图形化界面中,使用ctrl+alt+t可以打开shell程序)

查看系统版本

Linux的内核代码可以在www.kernel.org上面进行查看

怎么查看自己操作系统的内核版本?打开shell,输入 uname -a 就可以查看内核版本。

shell 复制代码
$uname -a

在Ubuntu发行版中,在shell中输入cat /etc/issue 可以查看发行版的版本,版本信息当中的LTS字样是说明这个版本是长期支持版本的意思。

shell 复制代码
$ cat /etc/issue

Linux常用命令

xshell原理

xshell是一款终端模拟软件,它可以使用ssh协议连接到远程服务器上。在本课程,我们使用xshell连接到我们的虚拟机。在将来的工作中,服务器通常放置在机房当中,程序员们通常是使用xshell、putty等ssh软件来连接到服务器,从而能够在服务器上面编程。

C/S模型。

使用xshell之前,需要保证虚拟机和主机能连接上网络。

使用xshell之前,需要保证虚拟机和主机能连接上网络。根据自己的网络情况,选择NAT模式或者是桥接模式。

VMware虚拟机三种网络模式:桥接模式,NAT模式,仅主机模式

遇坑:

解决Ubantu22.04中sudo apt-get update更新失败的问题(自动更新)

设置虚拟机桥接模式以及解决桥接模式上不了网以及ping不通主机的问题

在shell里面使用 ifconfig 查看自己的IP,如果提示没有此软件,则键入 apt install 命令来安装,输入命令之后要键入自己用户的密码:

shell 复制代码
$sudo apt install net-tools
#使用sudo命令以后需要输入用户口令(注意输入内容的时候,屏幕是没有变化的)

如果安装失败,通常的原因是本机的软件列表没有更新,使用下面的命令可以更新软件列表,然后再来重新执行安装的指令:

shell 复制代码
$sudo apt update

这一步执行失败,需要更换apt源

在虚拟机上ping百度,确定虚拟机能连接上网络:

shell 复制代码
$ping www.baidu.com
#使用ctrl+c可以终止
然后需要在虚拟机上安装ssh协议的客户端:
shell 复制代码
$sudo apt install ssh

使用ps命令,可以确认ssh客户端有没有运行:

shell 复制代码
$ps -elf|grep sshd
使用apt install命令来安装vim编辑器:
shell 复制代码
$ sudo apt install vim

键入vim,再键入tab键(注意不要使用回车键!),如果会联想vim相关命令,就说明安装成功

如何删除虚拟机

查看帮助手册 man

使用 man(manual) 命令可以查看 Linux 内置的帮助手册。该手册分为多卷:第一卷是用来查看 shell 命令的;第二卷是用来查看系统调用相关信息的;第三卷是用来查看库函数信息的...

复制代码
1 可执行程序或 shell 命令
2 系统调用(内核提供的函数)
3 库调用(程序库中的函数)
4 特殊文件(通常位于 /dev)
5 文件格式和规范,如 /etc/passwd
6 游戏
7 杂项(包括宏包和规范,如 man(7),groff(7))
8 系统管理命令(通常只针对 root 用户)
9 内核例程 [非标准

man 命令的格式如下:

shell 复制代码
$ man [手册编号] cmd

比如,我们可以这样用:

shell 复制代码
$ man man
$ man 3 mkdir

进入帮助界面后,我们可以按下面按键浏览帮助信息:

复制代码
d(down): 往下翻半页
u(up): 往上翻半页
f(forward): 往下翻一整页
b(backward):往上翻一整页
q(quit): 退出

关机命令 shutdown

shell 复制代码
$ man shutdown
 shutdown - 挂起,关机或重启计算机
常用选项:
 -H, --halt: 挂起
 -P, --poweroff: 关机(默认)
 -r, --reboot: 重启
 -c(cancel): 取消
shell 复制代码
$ sudo shutdown
 广播关机消息给所有用户,并于一分钟后关机。
$ sudo shutdown now
 立刻关机

用户子系统(栈结构)

Linux 用户可以分为:超级用户(root)和普通用户。超级用户又被称为:根用户和特权用户,它拥有至高无上的权利。普通用户又被划分为管理用户和其它用户。管理用户即我们俗称的 sudoers,他们可以临时提升权限(使用sudo命令),安装Ubuntu过程中创建的用户默认就是 sudoers。

查看所有用户 cat /etc/passwd

Linux系统下的所有用户,在 passwd 配置文件中都有一条相关记录

shell 复制代码
$ sudo cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
...
he:x:1000:1000:he,,,:/home/he:/bin/bash

每一行对应一条记录,每条记录有多个字段,字段之间以 : 分割。我们可以在5号手册中查看 passwd 文件的格式和规范:

shell 复制代码
$ man 5 passwd
/etc/passwd 为每个用户账户包含一行,包含使用冒号 (":") 分隔的七个字段,分别是:
 ·   登录名
 ·   可选的加密后的密码
 ·   数字用户 ID
 ·   数字组 ID
 ·   用户名和注释字段
 ·   用户主目录
 ·   可选的用户命令解释器
添加用户 useradd
shell 复制代码
useradd [选项] username
常用选项:
 -m, --create-home
 如果不存在,则创建用户主目录
 -s, --shell SHELL
     用户的登录 shell 名。
删除用户 userdel
shell 复制代码
格式:
 userdel [选项] username
常用选项:
 -r, --remove
     用户主目录中的文件将随用户主目录和用户邮箱一起删除。
设置密码 passwd
shell 复制代码
$ man passwd
 passwd 命令用来更改用户账户的密码。普通用户通常只更改其自己账户的密码,而超级用户可以更改任何账户的密码。
格式:
 passwd [选项] [username]
切换用户 su
shell 复制代码
格式:
 su [选项] [username]
退出切换 exit
shell 复制代码
exit

使用 su 命令依次切换到多个用户时候,这些用户是使用栈结构来管理的。执行 su 命令相当于将用户压入栈顶,执行exit命令相当于将用户弹出栈顶。

注意:当用户在上述的栈结构中存在的时候,该用户是不能够被删除的。

文件子系统(树结构)

目录相关命令
常见目录
目录名 功能
/bin(binary) 存放可执行程序或脚本文件
/sys(system) 存放和系统相关的文件
/dev(device) 存放设备文件
/etc 一般用来存放配置文件和启动脚本
/lib(library) 存放系统库文件
/var(variable) 存放变化很快的文件,比如日志文件
/proc(process) 存放进程相关的数据
/root root用户的家目录
/home/{username} 普通用户的家目录
查看当前工作目录 pwd
shell 复制代码
$ pwd
/home/he
改变当前工作目录 cd
shell 复制代码
$ man cd
 cd --- change the working directory
格式:
 cd [选项] [directory]
 
常用方式:
$ cd # 切换到用户家目录
$ cd /usr/lib # 切换到/usr/lib目录
$ cd / # 切换到 / 目录
$ cd ~ # 切换到用户家目录
$ cd . # 切换到当前工作目录(不切换)
$ cd .. # 切换到父目录
$ cd - # 切换到上一次目录

注意:上一次目录保存在环境变量OLDPWD中(可以通过env命令查看),它不是用栈结构管理的。

创建目录 mkdir
复制代码
$ man mkdir
 mkdir - make directories
格式:
 mkdir [选项] directory...
常用选项:
 -p, --parents
 如果父目录不存在,则创建父目录
 
常用方式:
$ mkdir dir
$ mkdir dir1 dir2 dir3
$ mkdir -p a/b/c
删除空目录 rmdir
shell 复制代码
$ man rmdir
 rmdir - remove empty directories
格式:
 rmdir [选项] dirctory...
常用选项:
 -p, --parents
   递归删除空目录
   
常用方式:
$ rmdir dir
$ rmdir dir1 dir2 dir3
$ rmdir -p a/b/c
通配符

通配符(wildcard character),可以用于匹配单个或多个字符。其中:

复制代码
*: 匹配任意多个字符(包括0个)
?: 匹配任意一个字符
集合(类): [characters]匹配集合内任意一个字符。
 [!characters]匹配集合外任意一个字符。
 比如:[abc], [!abc], [0-9], [a-z], [0-9A-Za-z_]等

rmdir 命令可以和通配符一起使用 (通配符可以提升命令的威力):

复制代码
$ rmdir dir?
$ rmdir dir*
$ rmdir [!abc]
查看目录内容 ls

ls(list) 命令可以查看目录内容:

shell 复制代码
$ man ls
 ls - list directory contents
格式:
 ls [选项] [FILE]...
常用选项:
 -a, --all
 显示所有的内容,包括以.开头的文件和目录
 -i, --inode
 显示文件的inode编号(inode是物理文件的标识)。
 -l
 以长格式的形式显示目录中的内容
 -h, --human-readable
 和-l选项一起使用,以人类可读的方式显示文件的大小。
以树状结构显示目录内容 tree

tree 命令不是Linux系统自带的命令,使用之前,我们必须先安装 tree 命令:

shell 复制代码
$ sudo apt install tree

tree 命令可以以树状结构显示目录内容:

shell 复制代码
$ man tree
 tree - list contents of directories in a tree-like format.
格式:
 tree [选项] [directory]...
 
常用方式:
$ tree # 以树状结构显示当前工作目录的内容
$ tree dir # 以树状结构显示目录dir中的内容
$ tree dir1 dir2 dir3 # 以树状结构显示目录dir1, dir2, dir3中的内容
复制文件或目录 cp
shell 复制代码
$ man cp
 cp - copy files and directories
格式:
 cp [选项] SOURCE DEST
 cp [选项] SOURCE... DEST
常用选项:
 -n, --no-clobber
 如果文件已存在,则不覆盖(默认会覆盖已有文件)。
 -i, --interactive
 如果文件存在,则给用户提示信息(由用户决定是否覆盖?)
 -R, -r, --recursive
 递归复制(用于copy目录)
移动文件和目录 mv
shell 复制代码
$ man mv
 mv - move (rename) files
格式:
 mv [选项] SOURCE DEST
 mv [选项] SOURCE... DEST
 Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
常用选项:
 -n, --no-clobber
 如果文件已存在,则不覆盖(默认会覆盖已有文件)。
 -i, --interactive
 如果文件存在,则给用户提示信息(由用户决定是否覆盖?)
删除文件和目录 rm
shell 复制代码
$ man rm
 rm - remove files or directories
格式:
 rm [选项] FILE...
常用选项:
 -f, --force
 忽略不存在的文件,永远不提示
 -i    
 在每次删除前,都提示用户是否删除
 -r, -R, --recursive
 递归删除
文件相关命令
创建文件
shell 复制代码
$ echo "Hello Linus Torvalds" > text # 创建文件text, 并且文件中包含内容"Hello Linus Torvalds"

$ touch text1 text2 text3 # 创建空文件text1, text2, text3(要求text1,text2,text3不存在)

$ vim hello.c # 编辑hello.c, 按:wq退出。
查找文件
  1. 我们可以使用 which 命令来查找可执行程序的路径:

    shell 复制代码
    $ man which
     which - locate a command
    格式:
     which [-a] cmd...
    选项:
     -a
     显示所有匹配的路径

    which 是根据 PATH 环境变量中的路径依次去查找的,然后显示第一个匹配项,或者显示所有匹配项。

    我们可以使用 env 命令查看环境变量:

    shell 复制代码
    $ env
    ...
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/g
    ames:/usr/local/games:/snap/bin
    ...
  2. find 命令可以在一个目录中递归地中查找符合指定条件的文件,它的功能非常强大:

    shell 复制代码
    $ man find
     find - search for files in a directory hierarchy
    格式:
     find [start-point...] 查找条件 # 省略start-point,默认起始点为当前工作目录
查看文件内容
  1. 我们可以用 cat 命令查看文件

    shell 复制代码
    $ man cat
     cat - concatenate files and print on the standard output
    格式:
     cat [选项] [file]...
    常见选项:
     -n, --number
     对每一行进行编号
  2. 使用 head 命令查看文件的前几行、

    shell 复制代码
    $ man head
     head - output the first part of files
    格式:
     head [选项] [file]...
    常见选项:
     -n, --lines=[-]NUM
     显示前NUM行;若在NUM前面添加'-'号,则显示除了后NUM行的所有行
  3. 使用 tail 命令查看文件的后几行、

    shell 复制代码
    $ man tail
     tail - output the last part of files
    格式:
     tail [选项] [file]...
    常见选项:
     -n, --lines=[+]NUM
     显示后NUM行;若在NUM前面添加'+'号,则从第NUM开始显示
     -F
     显示后面追加的数据。一般用于查看日志文件。
  4. 使用 less (more) 单页浏览文件

    shell 复制代码
    $ man more
     more - file perusal filter for crt viewing (说人话就是单页浏览)
    格式:
     more [选项] file...
重定向

cat, head, tail等命令经常和重定向一起使用,比如:tail -n 20 text1 > a.txt。重定向的示意图如下:

在讲重定向之前,我们需要引入文件描述符的概念(后面我们会详细讲解这个概念,现在我们只需要知道它是一个非负整数即可)。

标准流 文件描述符 重定向符号
stdin 0 <
stdout 1 > 和 >>
stderr 2 2> 或 2>>

常见用法:

shell 复制代码
$ who > users
$ echo "liu yi fei" >> users
$ wc -l < users 
$ cat users file1 > text # file1不存在
$ cat users file1 2> text # file1不存在
$ cat users file1 >& text # file1不存在
搜索文件内容

grep(globally search for a regular expression)命令可以用于搜索文件内容,它的功能非常强大!grep 命令会按正则表达式去搜索文件,如果文件中某一行匹配指定的正则表达式,grep命令则会显示这一行。

shell 复制代码
$ man grep
 grep - print lines matching a pattern
格式:
 grep [选项] pattern [file]...
常见选项:
 -E, --extended-regexp
 使用扩展的正则表达式
 -i, --ignore-case
 忽略大小写
 -v, --invert-match
 显示不匹配正则表达式的行
 -n, --line-number
 显示行号
 -c, --count
 不显示匹配的行,显示匹配行的个数

常见用法:

shell 复制代码
$ grep -nE "firmament" The_Holy_Bible.txt # 显示The_Holy_Bible.txt中包含"firmament"的所有行,并显示行号
$ grep -cvE "firmament" The_Holy_Bible.txt # 统计The_Holy_Bible.txt中不包含"firmament"的行数
正则表达式

正则表达式语法有点复杂,而且不同的工具使用的语法还不尽相同。下面我们介绍一些常用的正则表达式语法规则:

shell 复制代码
1. 基本单位
 基本单位主要包含:字符、转义字符、.(匹配任意一个字符)、集合(比如,[abc],
[^abc])、(expr)
2. 基本操作
 操作的对象是基本单位,主要包含两个基本操作:连接和重复
 a. 连接:"ab", "[abc]x", ".txt", "\.txt"
 b. 重复
 +: 重复至少一次(>=1), 比如:"abc+", "[abc]+"
 ?: 重复零次或一次(0|1), 比如:"abc?", "[abc]?"
 *: 重复任意次数(>=0), 比如:"abc*", "[abc]*", ".*"
 {m}: 重复m次
 {m,n}: 重复m到n次([m,n])
 {n, }: 至少重复n次([>=n])
3. 指定基本单位出现的位置
 ^: 行首,比如:"^abc"
 $: 行尾,比如:"xyz$"
 \<: 词首
 \>: 词尾
命令的组合

grep 命令之所以强大,主要在于它可以和其它命令组合使用。命令的组合主要有以下三种方式:

shell 复制代码
1. cmd1 ; cmd2
 先执行cmd1,再执行cmd2。如:mkdir dir; cd dir
2. cmd1 | cmd2 (管道)
 将上一个命令的输出作为下一个命令的输入。如:history | tail -n 20
3. cmd1 | xargs cmd2
 xargs(extended arguments) 可以 <将标准输入里面的每一行转换成命令的参数>
 xargs往往和管道一起使用,如:cmd1 | xargs cmd2,它把cmd1输出的每一行作为cmd2的参数
 find . -name "*.c" | xargs grep -nE "\<main\("
改变文件权限

chmod 命令可以改变文件和目录的权限。在讲 chmod 之前,我们有必要给大家讲讲目录相关知识。

目录:本质就是一个文件。 这个文件的内容是一个一个目录项(directory entry),在逻辑上,目录项之间是用链表的方式链接起来的。

权限对于普通文件和目录文件而言,其含义是不太一样的:

复制代码
普通文件
 r: 可读
 w: 可写
 x: 可执行 (可执行程序和脚本文件需要x权限才能直接运行)
 
目录
 r: 可读 (ls)
 w:可写 (在目录下添加和删除文件)
 x: 可执行 (cd,读写权限依赖于x权限,所以目录一般都设置了x权限)

chmod 目录的用法如下:

shell 复制代码
1. 文字设定法 (较少使用)
 chmod [ugoa][+=-][rwx] file/dir
 u: user
 g: group
 o: other
 a: all
 +: 添加权限
 -: 删除权限
 =: 将权限设置为
 
2. 数字设定法 (常用)
 chmod mode file/dir
 mode: 三位八进制数字 可读,可写,可执行

常见用法:
$ chmod o+w text1
$ chmod u=rwx,g=rx,o=r text1
$ chmod 664 text1
文件创建掩码

文件和目录在创建的时候都有一个默认的权限,该权限是由文件创建掩码 umask 决定的。

我们可以用 umask 命令查看当前的文件创建掩码:

shell 复制代码
$ umask
  0002 # 当前的文件创建掩码为2

接下来,我们创建文件 text 和目录 dir,查看它们的权限:

shell 复制代码
$ ls -l
drwxrwxr-x  2 he he 4096 3月  12 20:55 dir/
-rw-rw-r--  1 he he    0 3月  13 20:34 text

可见当 umask = 0002 时,目录的默认权限为 775,文件的默认权限为 664

将文件创建掩码 umask 设置为 0023

shell 复制代码
$ umask 0023

再创建文件 text1 和目录 dir1,查看它们的权限

shell 复制代码
$ ls -l
drwxr-xr-- 2 he he 4096 3月  13 20:40 dir1
-rw-r--r-- 1 he he    0 3月  13 20:40 text1

可见当 umask = 0023 时,目录的默认权限为 754,文件的默认权限为 644 (643-023)

So,文件创建掩码是如何工作的?请验证你的猜想(~ 按位取反)

shell 复制代码
目录:777 & (~umask)
文件:666 & (~umask)
链接

我们可以用 ln 命令创建硬链接和符号连接(软链接)。

  1. 创建硬链接:
shell 复制代码
$ ln text1 h_link
$ ls -li
268648 -rw-r--r-- 2 he he    0 3月  13 20:40 h_link
268648 -rw-r--r-- 2 he he    0 3月  13 20:40 text1

可见 text1 和 h_link 是指向同一个文件的,并且硬链接数也由原来的 1 变成了 2。删除 text1 或 h_link 只会减少硬链接数,当硬链接数为 0 的时候,才会真正删除磁盘上的文件。

shell 复制代码
$ rm text1
$ ls -li
268648 -rw-r--r-- 1 he he    0 3月  13 20:40 h_link # 硬链接数变为了 1
$ rm h_link
  1. 创建符号链接(软连接):
shell 复制代码
$ ln -s text s_link
$ ls -li
268648 lrwxrwxrwx 1 he he 4 3月  13 21:24 s_link -> text # s_link文件的内容为text,因此大小为4
264859 -rw-rw-r-- 1 he he 0 3月  13 20:34 text

可见 text 和 s_link 是指向不同文件的,text 的硬链接数不会发生改变。删除 text 会导致符号链接 s_link 悬空:

shell 复制代码
$ rm text
$ ls -li
268648 lrwxrwxrwx 1 he he 4 3月  13 21:24 s_link -> text # 颜色会发生改变

硬链接和符号链接的原理如下图所示:

我们可以将符号链接和 Windows 系统上的快捷方式,或者 C 语言中的指针做类比。

对于大多数命令(rm除外),如果参数是符号链接,其实操作的是符号链接指向的文件(类似指针的解引用操作):

shell 复制代码
$ echo "I love xixi\n" > text
$ cat s_link
I love xixi
$ rm s_link # 删除符号链接

其他命令

远程复制 scp

scp 命令可以用于上传和下载文件

上传:将本地的文件复制到远程

下载:将远程的文件复制到本地

scp 的用法和 cp 非常类似:

shell 复制代码
$ man scp
 scp -- secure copy (remote file copy program)
格式:
 scp [选项] SRC... DEST
 本地路径:可以用绝对路径,也可以用相对路径
 远程路径:用户名@IP:路径
常用选项:
 -r      
 递归复制整个目录
 
常见用法:
$ scp he@IP:~/text1 . # 将he用户家目录下的text1文件下载到当前工作目录
$ scp ./file he@IP:~ # 将当前工作目录下的file文件上传到he用户的家目录下
打包压缩 tar
shell 复制代码
格式:
 tar [主选项+辅选项] 包名 [文件或目录]...
 
主选项(有且只能选择其中一个):
 c: 创建
 r: 追加
 x: 释放
辅选项:
 f: 指定包文件的名称
 v: 显示详细信息
 z: 使用gzip算法压缩或解压缩包文件
 
常见用法:
$ tar cvf package.tar text*
$ tar rvf package.tar The_Holy_Bible.txt
$ tar xvf package.tar
$ tar czvf package.tar.gz *
$ tar xzvf package.tar.gz
别名 alias

有些命令比较长,自然我们就想给这些命令起一个别名,方便以后使用,alias 命令就是用来做这事情的。

shell 复制代码
$ man alias
 alias --- define or display aliases
格式:
 alias [命令=别名]...

常见用法:
$ alias # 查看别名
alias g++11='g++ -std=c++11'
alias ll='ls -alF'
alias ls='ls --color=auto'
...
$ alias h='history' # 设置别名

ell

$ man scp

scp -- secure copy (remote file copy program)

格式:

scp [选项] SRC... DEST

本地路径:可以用绝对路径,也可以用相对路径

远程路径:用户名@IP:路径

常用选项:

-r

递归复制整个目录

常见用法:

$ scp he@IP:~/text1 . # 将he用户家目录下的text1文件下载到当前工作目录

$ scp ./file he@IP:~ # 将当前工作目录下的file文件上传到he用户的家目录下

复制代码
#### 打包压缩 tar

```shell
格式:
 tar [主选项+辅选项] 包名 [文件或目录]...
 
主选项(有且只能选择其中一个):
 c: 创建
 r: 追加
 x: 释放
辅选项:
 f: 指定包文件的名称
 v: 显示详细信息
 z: 使用gzip算法压缩或解压缩包文件
 
常见用法:
$ tar cvf package.tar text*
$ tar rvf package.tar The_Holy_Bible.txt
$ tar xvf package.tar
$ tar czvf package.tar.gz *
$ tar xzvf package.tar.gz
别名 alias

有些命令比较长,自然我们就想给这些命令起一个别名,方便以后使用,alias 命令就是用来做这事情的。

shell 复制代码
$ man alias
 alias --- define or display aliases
格式:
 alias [命令=别名]...

常见用法:
$ alias # 查看别名
alias g++11='g++ -std=c++11'
alias ll='ls -alF'
alias ls='ls --color=auto'
...
$ alias h='history' # 设置别名