自学 Linux 命令

官方培训课程

控制台常用快捷键

按键 作用
Ctrl+d 键盘输入结束或退出终端
Ctrl+s 暂停当前程序,暂停后按下任意键恢复运行
Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+a 将光标移至输入行头,相当于Home键
Ctrl+e 将光标移至输入行末,相当于End键
Ctrl+k 删除从光标所在位置到行末
Alt+Backspace 向前删除一个单词
Shift+PgUp 将终端显示向上滚动
Shift+PgDn 将终端显示向下滚动

一次性创建多个文件

1#实际上是一个简单的shell loop
2$ touch love_{1..10}_shiyanlou.txt

常用通配符

字符 含义
  • |匹配 0 或多个字符 ? | 匹配任意一个字符 [list] | 匹配 list 中的任意单一字符 [^list] | 匹配 除 list 中的任意单一字符以外的字符 [c1-c2] | 匹配 c1-c2 中的任意单一字符 如:[0-9][a-z] {string1,string2,…} | 匹配 string1 或 string2 (或更多)其一字符串 {c1..c2} | 匹配 c1-c2 中全部字符 如{1..10}

用户管理

创建用户(默认会让输入密码)

1sudo adduser <USERNAME>

修改密码

1sudo passwd <USERNAME>

切换用户

1su <USERNAME>

查看当前用户是谁

1whoami

查看用户组

1cat /etc/group | grep -E "<USERNAME>"

给新建的用户sudo权限(第二条是centos里面的情况。)

1usermod -G sudo <USERNAME>
2usermod -aG wheel <USERNAME> 

删除用户(把它创建时自动创建的用户目录一并删除)

1sudo deluser lilei --remove-home

adduser 和 useradd 的区别是什么

答:useradd 只创建用户,不会创建用户密码和工作目录,创建完了需要使用 passwd 去设置新用户的密码。adduser 在创建用户的同时,会创建工作目录和密码(提示你设置),做这一系列的操作。其实 useradd、userdel 这类操作更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,需要你输入、确定等一系列操作 查看所有登录的用户(都有谁,都在哪里登录)

1who

常用东西

配置主机名称

4.1.2 配置主机名称

  1. 使用 Vim 编辑器修改“/etc/hostname”主机名称文件。
  2. 把原始主机名称删除后追加你想要起的名字。注意,使用 Vim 编辑器修改主机名称文件后,要在末行模式下执行:wq!命令才能保存并退出文档。
  3. 保存并退出文档,然后使用 hostname 命令检查是否修改成功。

不好用的时候试着重新启动

文件管理

图像权限 这个图是在使用ls -l时候前部的意义。

chmod 修改权限。每一个数字代表对应权限

1rwx|r-x|r-x
2111|101|101 = 755

chown 修改所有者

1chown <usrname> <filename>

在目录间移动

1#去tmp目录
2cd /tmp
3#去上一层目录
4cd ..
5#去当前用户的home(无参数cd)
6cd 

创建文件和目录

touch 可以创建文件/更新文件时间戳。 mkdir 可以创建目录 mkdir -p 可以创建多级目录

1 mkdir -p father/son/grandson

复制文件/目录

复制文件

1cp <文件> <目的地>

复制目录

1cp <要复制的目录> <目的地>

删除文件

1rm <文件>
2rm -r <目录>
3rm -f <文件> (包括有写保护的文件)
4rm -rf <任何东西>

移动和重命名

1mv <原文件> <新位置>
2mv <原文件名> <新文件名字>

批量重命名

1rename <'正则'> <通配符>

linux文件目录结构

目录结构

shell script

变量

声明变量

1declare tmp

直接用=赋值同时也可以新建变量,注意不要在等号左右使用空格

1tmp=helloyou

拿出变量tmp

1echo $tmp

删除变量tmp

1unset tmp

环境变量

暂时设置一个环境变量

1tmp=helloyuoman
2export tmp

永久设置一个环境变量

1/etc/bashrc         shell变量(有的 Linux 没有这个文件) 
2/etc/profile        环境变量
3/home/usr/.profile  用户变量

shiyanlou的环境用的是zsh命令行,在根目录有一个.zshrc文件是初始化配置文件。 可以使用这句来把 /home/shiyanlou/mybin 添加到path中

注意,这里是用的 » 它意味"追加" , > 是覆盖的意思

1$ echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc

直接刷新环境变量(无需开新的zsh)两种等效

1source .zshrc
2. .zshrc

修改已有变量

变量设置方式 说明
${变量名#匹配字串} 从头向后开始匹配,删除符合匹配字串的最短数据
${变量名##匹配字串} 从头向后开始匹配,删除符合匹配字串的最长数据
${变量名%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最短数据
${变量名%%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最长数据
${变量名/旧的字串/新的字串} 将符合旧字串的第一个字串替换为新的字串
${变量名//旧的字串/新的字串} 将符合旧字串的全部字串替换为新的字串

搜索文件

whereis 简单快速

whereis 只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)。如果想要获得更全面的搜索结果可以使用 locate 命令。

locate快而全 使用要先安装,并且更新索引数据库

1sudo apt-get update
2sudo apt-get install locate
3sudo updatedb

find 超强大

寻找/etc中(包括子目录)名为的 sources.list文件

1find /etc -name sources.list

man 命令中常用按键以及用途

按键 用途
空格键 向下翻一页
/ 从上至下搜索某个关键词,如“/linux”
? 从下至上搜索某个关键词,如“?linux”
n 定位到下一个搜索到的关键词
N 定位到上一个搜索到的关键词

系统状态

ps aux命令

状态值 意义
R(运行) 进程正在运行或在运行队列中等待。
S(中断) 进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
D(不可中断) 进程不响应系统异步信号,即便用 kill 命令也不能将其中断。
Z(僵死) 进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数后将进程释放。
T(停止) 进程收到停止信号后停止运行。

如果我们在系统终端中执行一个命令后想立即停止它,可以同时按下 Ctrl + C 组合 键(生产环境中比较常用的一个快捷键),这样将立即终止该命令的进程。或者,如果 有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执 行命令时在末尾添加上一个 & 符号,这样命令将进入系统后台来执行。

ifconfig 命令

ifconfig 命令用于获取网卡配置与网络状态等信息,格式为“ifconfig [网络设备] [参数]”。使用 ifconfig 命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet 参数后面的 IP 地址、ether 参数后面的网卡物理地址(又称为 MAC 地址)

uptime 命令

uptime 用于查看系统的负载信息,格式为 uptime。

uptime 命令真的很棒,它可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近 1 分钟、5 分钟、15 分钟内的压力情况(下面加粗的信息部分);负载值越低越好,尽量不要长期超过 1,在生产环境中不要 超过 5。

uname -a

查看计算机的系统类型

free -h

查看内存

last 命令

last 命令用于查看所有系统的登录记录,格式为“last [参数]”。

history

查看历史命令记录。 history -c 清空记录

切换目录

pwd 命令

pwd 命令用于显示用户当前所处的工作目录,格式为“pwd [选项]”。

cd 命令

cd 命令用于切换工作路径,格式为“cd [目录名称]”。
cd - 命令返回到上一次所处的目录
cd .. 命令进入上级目录
cd 命令切换到当前用户的家目录
cd ~username 切换到其他用户的家目录。

ls

命令 ~
ls -a 查看隐藏文件
ls -l 查看文件详细信息
ls -la 查看隐藏文件以及显示详细

查看文件

cat 命令

用来查看比较小的文本文件

cat -n 查看文本内容时还想顺便显示行号 tac 可以倒序输出文件.

more 命令

1more <文件名>

more更加适合阅读长文件

可以使用

  • enter 向下一行
  • space 向下一屏

Less 比more强多了

head 和 tail

默认查看文件头部/尾部的10行。参数 -n 可以控制行数。

tail可以使用 -f 查看最新一行.

1head -n 1 <文件名>
2tail -f <文件名>

wc 命令

wc 命令用于统计指定文本的行数、字数、字节数,格式为“wc [参数] 文本”。

file 命令来查看文件类型

压缩

tar -czvf 压缩包名称.tar.gz 要打包的目录

  • 打包-压缩-显示废话-选择目录

x:解包

c:打包

搜索

grep 命令用于在文本中执行关键词搜索,并显示匹配的结果,通常和别的命令结合使用,如cat、ps等

~ ~
-b 将可执行文件(binary)当作文本文件(text)来搜索
-c 仅显示找到的行数
-i 忽略大小写
-n 显示行号
-v 反向选择 — 仅列出没有“关键词”的行
1root@iZ2ze1hf17j9hv44rdpmaaZ:~# grep -n Jan you
22:-rw-r--r-- 1 root root   17 Jan 12  2000 kasusa
33:drwxr-xr-x 2 root root 4096 Jan 30 10:15 mydir
44:drwxr-xr-x 2 root root 4096 Jan 30 10:16 mydir2
55:drwxr-xr-x 2 root root 4096 Jan 30 11:47 ooo
66:-rw-r--r-- 1 root root    0 Jan 30 11:51 you 
7
8# you是一个文件。用显示行号的模式在you里面寻找 Jan 关键字 。在控制台里面会有高亮显示

别名

可以用 alias 命令来创建一个属于自己的命令别名,格式为“alias 别名=命令”。

若要取消一个命令别名,则是用 unalias 命令,格式为“unalias 别名”。

可以写入.bashrc文件,或者是.zshrc文件,取决于你用的是啥shell,然后就可以永久用这些别名了。

下面是一个我在macos上面使用的例子:

1#显示有颜色的用户(不适合白色背景)
2export PS1="%10F%m%f:%11F%1~%f \$ "
3#online
4alias f="top -l 1 | head -n 10 | grep PhysMem" # 查看可用内存
5alias p="sudo purge" # 整理释放内存
6alias v="export http_proxy=http://127.0.0.1:7890;export https_proxy=http://127.0.0.1:7890" # 终端设置翻墙
7alias nv="unset http_proxy; unset https_proxy;" # 终端设置不翻墙
8alias ip="curl cip.cc" # 查看ip和是否翻墙
9alias py=python3

变量和全局

一般来说,变量都是用大写的。

有一些 常用的全局变量:
HOME 用户的主目录(即家目录)
SHELL 用户在使用的 Shell 解释器名称
HISTSIZE 输出的历史命令记录条数
HISTFILESIZE 保存的历史命令记录条数
MAIL 邮件保存路径
LANG 系统语言、语系名称
RANDOM 生成一个随机数字
PS1 Bash 解释器的提示符
PATH 定义解释器搜索用户执行命令的路径
EDITOR 用户默认的文本编辑器

自己创建一个变量/读取它:

1root@iZ2ze1hf17j9hv44rdpmaaZ:~# MYVAR="hello"
2root@iZ2ze1hf17j9hv44rdpmaaZ:~# echo "$MYVAR"
3hello

提升位全局变量:

1root@iZ2ze1hf17j9hv44rdpmaaZ:~# export MYVAR

VIM

Vim 中常用的命令

命令 作用
dd 删除(剪切)光标所在整行
5dd 删除(剪切)从光标处开始的 5 行
yy 复制光标所在整行
5yy 复制从光标处开始的 5 行
n 显示搜索命令定位到的下一个字符串
N 显示搜索命令定位到的上一个字符串
u 撤销上一步的操作
p 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面

末行模式中可用的命令

要想切换到末行模式,在命令模式中输入一个冒号就可以了。 末行模式主要用于保存或退出文件,以及设置 Vim 编辑器的工作环境,还可以让用户执 行外部的 Linux 命令或跳转到所编写文档的特定行数。

命令 作用
:w 保存
:q 退出
:q! 强制退出(放弃对文档的修改内容)
:wq! 强制保存退出
:set nu 显示行号
:set nonu 不显示行号
:命令 执行该命令
:整数 跳转到该行
:s/one/two 将当前光标所在行的第一个 one 替换成 two
:s/one/two/g 将当前光标所在行的所有 one 替换成 two
:%s/one/two/g 将全文中的所有 one 替换成 two
?字符串 在文本中从下至上搜索该字符串
/字符串 在文本中从上至下搜索该字符串

append

查看命令的来源:type

1kasusadeMacBook-Pro:~ $ type who
2who is /usr/bin/who
3kasusadeMacBook-Pro:~ $ type cd
4cd is a shell builtin

输入输出导向:

其中输出分成 普通输出、错误输出

1any command < infile
2any command > outfile #Create/overwrite outfile 
3any command >> outfile #Append to outfile
4any command 2> errorfile
5#普通输出、错误输出 同时输出到两个文件
6any command > outfile 2> errorfile 
7#普通输出、错误输出合并输出到1个文件
8any command >& outfile
9any command &> outfile

一行执行多个命令

1# 直接按顺序执行
2command1 ; command2 ; command3
3# 按顺序执行但是如果遇到错误会停止
4command1 && command2 && command3
5# 按顺序执行但是如果遇到成功的直接退出
6command1 || command2 || command3

引号

一般来说空格作为分隔符,如果输入中要带空格需要用单or双引号把它扩起来

  • 单引号:原样输出
  • 双引号:可以在其中加入变量等
  • 反引号(tilda):反引号之中的字符串会作为变量来执行
1→ echo 'The variable HOME has value $HOME' 
2The variable HOME has value $HOME
3→ echo "The variable HOME has value $HOME" 
4The variable HOME has value /home/smith
5→ echo This year is `date +%Y` 
6This year is 2021
7→ echo hello `expr $(date +%Y) + 1` # expr可以用来做运算,但是要在运算符号之间加空格
8This year is 2023

Python Xml和读取excel
传入参数ARGV