跳到主要内容

Linux

完善中

Shell

  1. 脚本以#!/bin/bash开头
  2. 可通过chmod +x ./index.sh使其可执行

变量

name="sumoqi" # 声明变量 等号前后要粘着
echo $name # 使用变量
echo ${name} # 使用变量 *推荐
readonly name # 使变量只读
unset name # 删除变量,不能删除只读变量

Shell变量可分为当前脚本下的局部变量,以及环境变量。

# 字符串(单引号)
name='sumoqi'
# 字符串(双引号)
name="sumoqi"

单引号字符串内部字符会原样输出,即内部不能有变量和转义符号。

# 单引号
name='sumoqi'
echo 'i am ${name}' # i am ${name}

# 双引号
name='sumoqi'
echo "i am ${name}"" # i am sumoqi
arr=("a" "b" "c") # 数组
echo ${arr[0]} # "a"
echo ${arr[@]} # 输出数组所有项 "a" "b" "c"

传递参数

echo "$1 $2 $3"
./index.sh a b c # a b c

运算符

shell中进行运算通常使用反引号配合expr来实现

a=10
b=20

echo `expr $a + $b`

条件判断:

if [ $name == 'sumoqi' ] # 注意,一定要留出空格
then
echo "相等"
fi

补充:判断相等时可以用==,也可以直接用=

逻辑运算:

name="sumoqi"
age=22

if [[ $name == 'sumoqi' && $age == 20 ]]
then
echo "相等"
else
echo "不相等"
fi

输出重定向

echo "hello" > index.js # 覆盖
echo "hello" >> index.js # 不覆盖,添加到文件尾部

可以通过重定向,让我们在执行某些脚本时屏蔽输出

./index.sh > /dev/null

常用命令

很简单的命令就不写了。

ls

ls 
ls -a # 隐藏文件
ls -l # 显示完整信息,包括读写执行的权限等

通过ls -l可以看到完整的文件信息,如下:

-rwxr-xr-x 1 root root 27776 Apr 17 2012 test.txt

其中- rwx r-x r-x由四部分组成:文件类型、拥有者权限、拥有者所属用户组权限、其他用户权限。

文件类型中,-表示普通文件,d表示目录,l表示软链接(硬链接无特殊标记)

权限包括rwx,即读、写、执行。可以使用数字来代表权限,读:4、写:2、执行:1。因此r-x对应着5

chmod

通过ls可以看到一个文件的操作权限,而通过chmod可以修改文件的权限。

chmod 777 text.txt

或者

chmod +x test.txt # 使其可执行

alias

用于起命令的别名

alias ..='cd ..'

grep

用于字符串查找

grep 'content' test.txt
-e # 正则查找

管道

管道用来实现进程之间的通信,具体来说就是把一个程序的输出作为另一个程序的输入

cat test.txt | wc # 通过cat得到test.txt内容,把该内容作为wc命令的输入

sudo

让普通用户临时具备root用户的权限

sudo ls

ssh

ssh user@host
-p # 指定端口号,默认是ssh的22端口号
ssh host # 以root用户登录

另外,~/.ssh/config用于存储服务器相关的配置,如:

# ssh config
#
#
host myserver
hostName 111.111.111.111
User root
port 2045

我们只需要使用ssh myserver即可快速连接服务器

ssh-keygen

用来创建密钥,生成的密钥存放于~/.ssh/

ssh-keygen

whoami

whoami # 输出我的名字

who

who # 输出当前主机所有登录用户的信息

useradd

添加用户,adduser命令也行,但是二者略有差异

useradd sumoqi

passwd

修改用户密码

passwd sumoqi

export

用于我们在配置文件/etc/profile~/.bashrc中使用export来设置环境变量。

# /etc/profile
export name="aka"

wc

用于计算文件的字数、行数等信息

wc -l test.txt # 输出行数

man

用于查询一个命令的使用方法

man ls

whereis

用于查找文件,通常可以拿来查配置文件或可执行文件的位置

whereis profile
# profile: /etc/profile.d /etc/profile

which

也是用于查找文件,通常用来查可执行文件。

which bash

ln

用于创建链接,链接分为软链接(符号链接)和硬链接

ln /bin/bash sh # 默认创建硬链接
ln -s /bin/bash sh # 软链接

软链接可以理解成windows中的快捷方式;硬链接可以看成一个文件拥有不同的路径。

tar

用于打包压缩文件。

我们会经常看到这样的文件:*.tar.gz*.tar.bz2*.tar.xz。这些都是通过tar打包而成的,后缀的不同是因为其所采用的压缩算法不同。

压缩比:gz < bz2 < xz

压缩速度:gz > bz2 > xz

压缩文件:

# 多种方式
tar -zcvf filename.tar.gz FILES # z表示gz
tar -jcvf filename.tar.bz2 FILES # j表示bz2
tar -Jcvf filename.tar.xz FILES # J表示xz

解压缩文件:

tar -vx -f filename
# or
tar -vxf filename

crontab

定时任务。

crontab -l # 查看定时任务

clear

清空输出

常见配置文件

核心配置

/etc/profile: 系统级配置

~/.bashrc:用户级配置

当我们更改配置后,通过source ~/.bashrc使其生效

用户信息

/etc/passwd:用户信息(用户ID,组ID等)

/etc/group: 用户组信息

/etc/shadow: 用户密码(密文报错)

/etc/sudoers:用户的sudo权限

ssh

个人的ssh相关文件在~/.ssh下,包括个人的私钥、公钥、SSH配置文件configauthorized_keysknown_hosts

通常我们在服务器的authorized_keys存放我们自己电脑的公钥,之后就无需使用密码来连接服务器了。

在我们成功连接服务器后,我们电脑的known_hosts文件也会记录下服务器的公钥。

其他

~/.bash_history:记录历史命令行