Linux学习:基础命令及系统操作

基础命令

pwd:查看路径

  • pwd:命令来查看”当前工作目录“的完整路径

  • pwd -P:显示出实际路径,而非使用连接(link)路径

cd:切换

.目录代表的是当前目录,而..代表的是上级目录,/代表根目录,~当前用户的家目录

在 BASH 和大部分其他的 shell 中,你可以提供两种不同的路径:绝对路径和相对路径。绝对路径以 / 开始,并且和你的 PWD 无关。而相对路径不会以 / 开始,并且和你的 PWD 相关

  • cd -:可以返回上一次的工作目录,我们可以使用它在两ln个不同的目录中快速切换

  • cd 符号:cd 可以结合各种符号:如cd /init.?或者cd /cs*

ls:列出文件

  • ls -l:列出文件属性信息等,total的单位是k(1024)

  • ls -l -a:查看隐藏文件

  • ls -LR:显示目录下包括文件夹下的所有文件

cp:拷贝

  • cp aa bb:拷贝文件aa到bb

  • cp -r aa bb:拷贝文件夹aa到bb

rm:删除

  • rm -rf:目录名字,删除目录

  • sudo rm -rf:若出现 Permission denied 的提示,可加sudo强制删除

  • rmdir [dir]:删除目录命令,要确保目录是空的

main/info:查看命令文档

mkdir:创建文件夹

  • mkdir xx:创建文件夹xx

  • mkdir -p xx:确保目录名称存在,如果目录不存在的就新创建一个

mv:移动或重命名

  • mv aa bb:修改文件aa名称为bb

touch:创建文件

  • touch [file]:创建文件

ps:查看进程

  • ps -a:查看所有进程

  • ps -ef:显示所有命令,连带命令行

  • ps au:显示进程较详细的资讯

ps命令用来列出系统中当前运行的那些进程快照,想要动态的用top命令,进程状态如下:

R. 运行(正在运行或在运行队列中等待) 
S. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 
D. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 
Z. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 
T. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

type:识别命令

type 命令可以帮助我们识别某一个特定的命令是由 shell 内置的还是由一个单独的包提供的

  • type cd:识别cd命令

echo:展示字符串

echo是一种最常用的与广泛使用的内置于Linux的bash和C shell的命令,通常用在脚本语言和批处理文件中来在标准输出或者文件中显示一行文本或者字符串

  • echo The value of variable x = $x 可以输出变量

  • echo *.jpeg 打印所有的‘.jpeg‘文件

exec:运行外部程序

exec 用来运行我们指定的外部程序,特性:不是在 shell 之外创建新的进程运行,而是这个新的进程会替代原来的 shell

history:展示历史命令

命令编号前面前缀上感叹号可以再次执行这个命令,或Ctrl + r进行搜索

alias:别名

  • alias -p l=’ls -l’:起别名

  • unalias 别名:清除别名

使别名永久生效

vi ~/.bashrc写入这个文件中即可永久生效,编辑完之后记得使环境变量生效: source ~/.bashrc

exit:退出

exit命令可以退出所有的 shell

grep:搜索

grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print

通过ps -ef查出来的所有进程作为输入,用grep检索包含apache的内容

1
# ps -ef | grep apache

logout:注销

logout 命令只注销登录的 shell

expand/unexpand:转换制表符为空格/相反

  • expand –tabs=1 xx:把制表符转换为空格,–tabs表示1个制表符等于几个空格,默认为8,unexpand相反

head/tail:首行/尾行

使用 head 输出文件首行及使用 tail 输出文件尾行,-n 参数来自定义具体的行数,直接-3也行

  • head -n3 xx:删除xx文件的头三行

  • tail -n3 xx:删除xx文件的尾三行

  • tail -f text.txt:可以实时监听txt中的内容,常用于追踪日志的所有更新

cat/tac:连接并显示内容/倒序显示

cat命令的用途是连接文件或标准输入并打印。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。tac命令倒叙输出

  • cat xx:显示xx整个文件内容

  • cat > xx:从键盘创建内容到新文件xx中

  • cat [file1] [file2] > [file3]:将几个文件合并为一个文件

paste:合并

  • paste [file1] [file2] > result:合并命令,将file1和file2中的内容按行合并文本文件后,存入result文件中

  • paste [file1] [file2]:如果不加 > result,则直接显示在终端

  • paste -d= [file1] [file2]:左右同一行数据用=隔开

split:将文件分块

  • split -b 50kb -d bash.pdf bash_:将切割 bash.pdf ,每个文件 50KB (-b 50KB),使用数字后缀 (-d)

tr:替换

使用 tr 命令替换字符

  • cat [file] | tr o O:小写字母 o 变成大写

  • cat [file] | tr [a-z] [A-Z]:所有的小写字母都变成大写字母

sort:排序文件内容并输出

sort 以第一个字段(使用空格分隔)为关键字段。想要指定不同关键字段,我们需要使用 -k 参数

  • sort [file]:排序文件内容并输出

  • sort -k3 [file]:指定第3个字段(使用空格分隔)为关键字段来排序

uniq:去除重复的行

uniq 命令可以帮我们查出或删除文件中的重复的行,默认会输出到标准输出,我们应当注意,uniq只能查出相邻的相同行,所以,uniq 往往和 sort 一起使用(sort 一般用于对文本文件的内容进行排序)

  • sort file | uniq:先排序再去重

fmt:格式化文件

  • fmt -w100 file:使用 fmt 命令重新格式化文件,通过 -w (width 宽度)参数改变这个设定

file:查看文件格式

  • file [file]:查看文件格式

chmod:修改文件权限

  • chmod [new_mode] [file]

new_mode是一个八进制数或表达式,用于指定新的权限,八进制数可以基于二进制等价计算,可以从所需的文件权限的文件的所有者、所有组、和其他组合成。每种权限都等于2的幂(R = 2^2,W = 2^1,x = 2^0),没有时即为0。

image

curl:文件传输命令

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具

  • curl [option] [url]
1
# curl www.baidu.com    # 返回的是百度的html

wget:文件传输命令

wget是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP协议 下载,并可以使用 HTTP 代理。”wget” 这个名称来源于 “World Wide Web” 与 “get” 的结合。所谓自动下载,是指 wget 可以在用户退出系统的之后在继续后台执行,直到下载任务完成

  • wget [option] [url]
1
# wget www.baidu.com    # 下载百度的html文件

输入输出重定向以及管道

命令行环境提供了两个非常有用的功能:

  • 重定向:允许重定向命令的输入和输出为另一个文件

  • 管道:发送命令的输出到另一个命令

为了理解这两个重要概念,我们首先需要理解三个最重要的字符输入输出流类型:

  • 标准输入 (即 stdin),默认连接到键盘。 换句话说,键盘是输入命令到命令行的标准输入设备。

  • 标准输出 (即 stdout),默认连接到屏幕。 找个设备“接受”命令的输出,并展示到屏幕上。

  • 标准错误 (即 stderr),默认是命令的状态消息出现的地方,它也是屏幕。

image

  • 重定向:是用来定向命令的输出到一个文件,或把一个文件发送作为到一个命令的输入。

  • 管道:是用来将命令的输出转发到另一个命令作为其输入

与重定向相比,管道是通过在命令后和另外一个命令前之间添加一个竖杠(|)

通过ps -ef查出来的所有进程作为输入,用grep检索包含apache的内容

1
# ps -ef | grep apache

压缩/解压文件:tar

tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的

tar命令一般用于打包,tar本身不具有压缩功能。它是调用压缩功能实现的

  • 打包:是指将一大堆文件或目录变成一个总的文件

  • 压缩:则是将一个大的文件通过一些压缩算法变成一个小文件,Linux中很多压缩程序只能针对一个文件进行压缩,所以要先打包。

格式:tar [必要参数] [选择参数] [文件]

image

  • 解包:tar xvf [file.tar]

  • 打包:tar cvf [file.tar] [dir]

注意:tar是打包,不是压缩

  • 解压:tar zxvf [file.tar.gz]

  • 压缩:tar zcvf [file.tar.gz] [dir]

硬链接和软链接

在Linux中,有2种类型的链接文件:硬链接和软(也称为符号)链接

  • 硬链接:硬链接文件只是现存文件的另一个名字,使用相同的inode号,它指向实际的数据

  • 符号链接:只是指向的文件名

1
2
# ln TARGET LINK_NAME               #从LINK_NAME到Target的硬链接
# ln -s TARGET LINK_NAME #从LINK_NAME到Target的软链接

简单示例

假设有几个程序需要访问文件fooX.Y,但麻烦是版本经常变化(像图书馆一样)。每次版本更新时我们都需要更新指向 fooX.Y 的单一引用,而更安全、更快捷的方式是,我们可以让程序寻找名为 foo 的符号链接,它实际上指向 fooX.Y

用户/组与权限

root用户可以useradd 添加用户,usermod 修改用户,可以-L锁定用户,-U解锁用户,用户帐户的全部信息被保存在/etc/passwd

1
2
# adduser [new_account]
# useradd [new_account]

su:切换用户

切换用户的命令为:su username(su就是switch user切换用户),需要输入密码

su命令在不加参数时,默认切换到root用户

sudo:不切换到用户执行命令

sudo则是不切换到用户而执行一次命令,可以以其他用户的身份来执行命令,经常是以root的身份执行命令,切换不需要知道对方的密码,而需要输入自己的密码

sudo的执行有这样一个流程:

1、当用户执行sudo时,系统于/etc/sudoers文件中查找该用户是否有执行sudo的权限;
2、若用户具有可执行sudo的权限,那么让用户输入用户自己的密码,注意这里输入的是用户自己的密码;
3、如果密码正确,变开始进行sudo后面的命令,root执行sudo是不需要输入密码的,切换到的身份与执行者身份相同的时候,也不需要输入密码。

注意

$表示普通用户
#表示超级用户,也就是root用户
  • $ sudo passwd root:通过root权限修改root的密码

总结

了解完su和sudo,是不是发现sudo有太多的好处了。su方式切换是需要输入目标用户的密码,而sudo只需要输入自己的密码,所以sudo可以保护目标用户的密码不外流的。当帮root管理系统的时候,su是直接将root所有权利交给用户,而sudo可以更好分工,只要配置好/etc/sudoers,这样sudo可以保护系统更安全,而且分工明确,有条不紊

chage:命令负责管理用户密码时效问题

1
# chage -l [username]

删除组和用户

1
2
# groupdel [group_name]        # 删除组
# userdel -r [user_name] # 删除用户,并删除主目录和邮件池

权限

ls命令的-l参数通过长格式的形式展示一个目录中的内容在“ls”输出中的前10个字符表示每个文件的属性

  • 第一个字符用于表示文件类型

    – (连字符): 一个标准文件
    d: 一个目录;
    l: 一个符号链接
    c: 字符设备(将数据作为字节流,例如终端)
    b: 块设备(以块的方式处理数据,例如存储设备
    
  • 文件属性的接下来的九个字符,分为三个组,被称为文件模式,并注明读(r)写(w)、和执行(x)权限授予文件的所有者、文件的所有组、和其它的用户

image

  • chmod:改变权限

文件权限是通过chmod命令改变的,它的基本语法如下:

1
# chmod 744 myfile

image

  • chown:改变文件的所有者

使用chown命令,改变文件的所有者,可以同时更新或只更新一个,不要忘记冒号区分

1
2
3
4
# chown user:group file
# chown :group file # 仅改变所有组
# chown user: file # 仅改变所有者
chown --reference=ref_file file

从一个文件复制权限到另一个文件

1
# chown --reference=ref_file file     # ref_file的所有信息会复制给 file