这里记录我的 Linux 学习进程,以作纪念 ∠( :D 」∠)_
- Change Directory:cd 命令
cd [dir]
dir 可以是绝对路径和相对路径
相对路径:
. 当前目录
.. 上一层目录
/ 根目录(目录树的根部)
~ 当前用户的主文件夹(例如用户为 aaron,那么主文件夹就为 /home/aaron)
-上一层工作目录
举例:
cd .. #转到上一层目录
cd / #转到根目录
cd ./mnt #转到当前目录的 mnt 文件夹
cd ~/mnt #转到用户主文件夹中的 mnt 文件夹
cd mnt #等价于 cd ./mnt
cd ~aaron #转到用户 aaron 的主文件夹
pwd 可以显示当前目录的绝对路径
新建目录,删除目录
mkdir(make directory) 新建目录
mkdir mnt #在当前目录下新建 mnt 目录
rmdir(remove directory)删除一个空目录
rmdir
新建文件、删除文件和目录
使用rm
删除文件或目录。
rm File #删除 File
rm -r dir #递归删除一个目录,删除非空目录时只能使用该命令
使用 touch
创建空文件
touch EmptyFile
- 远程登录
使用telnet
远程登录一个主机。
使用ssh
远程登录一个支持加密传输的主机,自签名证书需要人工确认可信度。
telnet 127.0.0.1 #默认端口 23
ssh 127.0.0.1 #默认端口 22
ssh [email protected] #带有用户名远程登录
- 移动、复制、远程复制文件
使用cp
复制文件到指定目录。
使用mv
移动文件。
使用scp
复制远程主机资源。
cp ./file ./mnt/file2 #将当前目录的 file 复制到当前目录下的 mnt 子目录,并更名为 file2
mv ./file ./mnt/file2 #仅移动文件,且改名
# 远程主机 IP:192.168.100.2
# 本地主机 IP:192.168.100.254
scp ./file [email protected]:/home/aaron/mnt/file2 #复制远程主机当前工作目录的 file 文件到本地主机
[email protected]'s Password: #此时会要求输入本地主机的用户密码
- 简单的文件权限操作
使用chmod、chown、chgrp
修改文件的权限、所有者、所有组。
使用chattr、lsattr
修改、显示文件的隐藏权限。
文件的权限分数:
r:4
w:2
x:1
文件的隐藏权限:
见man chattr
chmod 777 file #修改文件权限为 -rwxrwxrwx
chmod 755 file #修改文件权限为 -r-xr-xr-x
chattr +i file #给 file 增加隐藏属性 i,使其不可更改
- 磁盘操作命令
所有的磁盘操作都要在 root 权限下才能执行。
使用 df 查看每一个磁盘分区的文件系统、使用情况、挂载点等信息,使用 du 查看系统中每一个文件的情况。
使用 fdisk 命令能对一块新磁盘执行一些操作,详细操作在进入 fdisk 模式后输入 m 查看简介
fdisk /dev/sdb #这里直接输入磁盘盘标,而不是分区下标
#此刻 Linux 将等待下一步指令,输入 m 查看帮助,输入 q 不保存退出
- 磁盘挂载与卸载
mount 将磁盘挂载
umount 将磁盘卸载
mount /dev/sdb1 /folder #将 sdb1 这个磁盘挂载到 /folder 这个目录下
umount /dev/sdb1 #卸载 sdb1 磁盘
如果卸载磁盘时提示 target is busy 或 device is busy 说明有进程正在占用该磁盘,可以用 fuser 来查看占用磁盘的进程,杀掉占用的进程之后再尝试,或者可以直接尝试重新启动 Linux
如果要强制卸载磁盘(谨慎,可能会损坏数据或使数据不同步),使用:
mount -fl /dev/sdb1 #强制卸载 sdb1 磁盘
- 磁盘的格式化
使用mkfs(make file system)
格式化磁盘,格式化可以将磁盘的文件系统设置成想要的格式,同时格式化会清除现有数据,适用于 Linux 的文件系统有 ext2、3、4,另外可以选择的格式还有 vfat、ntfs 等
#首先保证磁盘已分区,且已卸载
mkfs -t [format] [device]
mkfs -t ntfs /dev/sdb1
- 压缩与打包
最常使用 tar 来打包,bzip2 来压缩
tar [-ctxjzv] [-f FILENAME]
-c 新建打包文件
-t 查看打包文件的文件名
-x 解包或解压缩
-j 通过 bzip2 来压缩包
-v 解压/压缩处理过程中,显示被处理的文件名
-f 后跟要处理的文件名,即打包压缩后的文件路径
-C 如果要解压到特定路径,可以使用此参数
# 压缩 etc 文件
tar -jcv -f /root/etc.tar.bz2 /etc
# 解压 etc.tar.bz2 到特定目录
tar -jxv -f /root/etc.tar.bz2 -C /etc/etcunpzip
# 查看 etc.tar.bz2 的内容
tar -jtv -f /root/etc.tar.bz2
- Bash Shell
- 使用
echo
回执到控制台
- 使用
#字符串有空格或其他特殊字符时使用单引号或双引号
echo “Hello,World!”
* 使用 $ 符号取变量值,在双引号括住的字符串中代表变量值,单引号中代表纯字符串
var=“hey”
echo “$var” #打印 “hey”
echo '$var' #打印 “$var”
* 变量的声明与销毁
var=hello # 声明一个变量
unset var # 销毁一个变量
- 输出重定向
使用 >/>>/<< 重定向标准输出流、标准输入流和标准错误输出流
cat ls /mnt > ~/catFile # 将 cat mnt 的输出数据重定向到 catFile 文件中
cat ls /mnt >> ~/catFile # 将 cat mnt 的输出数据重定向*追加*到 catFile 文件中
- pipe 管道命令 |
使用 | 来让下一条命令处理上一条命令的输出
ls /etc | less # less 读取 ls 的数据并加以处理
使用 cut
来切分一段信息
cut [-dfc]
-d 按字符切分,和 -f 一起使用
-f 选择切分后的信息的某一段
-c 按区间取字符
# 现有字符串:
# /Users/aaron/.rvm/gems/ruby-2.0.0-p648/bin:/Users/aaron/.rvm/gems/ruby-2.0.0-p648@global/bin:/Users/aaron/.rvm/rubies/ruby-2.0.0-p648/
# bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Server.app/Contents/ServerRoot/usr/bin:/Applications/Server.app/Contents/
# ServerRoot/usr/sbin:/Users/aaron/.rvm/bin
# 以 :号为分隔符,取出第一段文字:
echo $PATH | cut -d ":" -f 1
# 得到字符串:
# /Users/aaron/.rvm/gems/ruby-2.0.0-p648/bin
# 同样的字符串,取出前 12 个字符
echo $PATH | cut -c -12 # 后 12 个字符则为 12-
# 得到字符串:
# /Users/aaron
使用 grep
来筛选字符串
高级用法在正则表达式一节中详细说明。
使用 sort、uniq、wc
排序
# 现有文件 sortFile,内容为:
# 10 blackdawn
# 2 aaron
# 6 yuki
# 6 yuki_liu
# 11 blackdawnx_group
# 利用第一列的数字来进行排序
cat sortFile | sort -t " " -k 1 -n # 以空格分割每一行,以第一列来排序,由于默认是字符型排序,要用 -n 转换成数字排序
# 排序后为:
# 2 aaron
# 6 yuki
# 6 yuki_liu
# 10 blackdawn
# 11 blackdawnx_group
# 使用 uniq 合并排序后相同的项
# 使用 wc 列出文件有多少行、多少字、多少字符
- 正则表达式
特殊的正则表达式:
[[:alnum:]]: 代表 [0-9][a-z][A-Z]
[[:alpha:]]: 仅代表字母(大小写)
[[:digit:]]: 仅代表数字
[[:upper:]]: 大写字母
[[:lower:]]: 小写字母
grep 高级用法
# 找到的关键字用颜色突出显示
last | grep --color=auto "aaron"
# 想象有一篇文章
# 找出含有 “ooo”(连续三个 o)的一行
cat greptest | grep "ooo"
# 找出 “oo” 前有 G、g、z 三个字母的一行
cat greptest | grep "[Ggz]oo"
# 找出 “oo” 前没有 G、g、z 三个字母的一行,使用 ^ 符
cat greptest | grep "[^Ggz]oo"
# 找出开头是字母 B 的一行,也使用 ^ 符,但加在正则表达式最前方
cat greptest | grep "^B"
# 找出结尾是 . 的一行,注意 . 有特殊意义,代表任意字符,需要转义
cat greptest | grep "\.$"
# 找出 g 前面有零个或多个 g 的一行
cat greptest | grep "g*g"
# 找出 g 后面有 2-5 个 o 的一行,{ 需要转义
cat greptest | grep "go\{2,5\}"
sed 工具
sed [n1[,n2]] function
# function 可以是:
# a 新增
# c 替换
# d 删除
# i 插入
# p 打印
# s 直接替换
# funciton 一般使用单引号括住
# 在 ~/sedtest 中,第 6 行后面增加一行
cat -n sedtest | sed '6a aaron here' # 需要在第 6 行之前增加一行可以使用 i 参数
# 将第 1-5 行的内容替换
cat sedtest | sed '1,5c >>close 1-5'
# 只将主网卡信息的 ipv4 地址显示出来,使用 ‘s/[筛选]/[替换]/g’ 来替换筛选的字符
ifconfig ens33 | grep "inet addr" | sed 's/^.*addr://g' | sed 's/ Bcast.*$//g'
- Shell Script
- 数组的声明与使用
# 数组声明
var[0]="Hello"
var[1]="world!"
# 数组使用
echo "${var[0]}, ${var[1]}"
> Hello, world!
- Quota 的使用
Quota 可以限制每个账户的磁盘使用量,且可以在即将用尽限额之前提醒用户,当用户使用超出限额时将无法继续向磁盘内写入数据
# 安装 Quota
sudo apt install quota
## 待补充
- 部分 Linux 默认不带 SSH 安全登录功能,例如 uBuntu
安装 SSH 使用:
Client: sudo apt-get install openssh-client
Server: sudo apt-get install openssh-server
# 启动 SSH 登陆
sudo /etc/init.d/ssh restart
- uBuntu 默认不自带 VIM 编辑器
安装 VIM:
sudo apt-get install vim
- Ubuntu 默认的 sh 命令使用的是 dash shell,而不是 bash
禁用 dash:
sudo dpkg-reconfiguration dash
然后选择 No
- Ubuntu 14.04 及更新版本想要挂载 exFat 文件系统磁盘,需要安装:
sudo apt-get install exfat-utils
使 CentOS 7.x 支持 exFAT 格式磁盘
安装 epel 库
yum -y install epel-release
对于RHEL6/CentOS 6(复制/粘贴):
$ rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm
对于RHEL/CentOS 7(复制/粘贴):
$ rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
官方安装说明
- 检查Nux Dextop是否安装成功:
$ yum repolist
如果仓库列表中有Nux Dextop就安装成功。
- 提示
由于Nux Dextop仓库可能会与其他第三方库有冲突,比如(Repoforge和ATrpms)。
所以,建议默认情况下不启用Nux Dextop仓库。
打开/etc/yum.repos.d/nux-dextop.repo,将"enabled=1" 修改为 "enabled=0"。
$ sudo vi /etc/yum.repos.d/nux-dextop.repo
当需要使用Nux Dextop仓库时,显式启用仓库。
$ sudo yum --enablerepo=nux-dextop install
安装exfat支持库文件
yum --enablerepo=nux-dextop install fuse-exfat exfat-utils
- 给账户增加 sudo 权限
首先更改 /etc/sudoers 文件权限为可读可写
在 /etc/sudoers 文件里找到
root ALL=(ALL:ALL) ALL
在其下方添加
NewUserName ALL=(ALL:ALL) ALL
此时如果提示 sudoers 全局可写错误,且无法使用 sudo 命令时,就需要将 sudoers 文件权限修改为仅 root:root 可读
# 首先关闭 Linux
# 开启 Linux 同时按住 Shift 进入 GNU GRUB
# 选择 Linux Advanced
# 光标移动到 recovery mode 按下 e 键(不要回车)
# 在编辑器中找到有 Linux 字样的一行,将其中的 ro 改为 rw
# 修改完后,直接按下 Ctrl+X,再选择 root 选项,既可以 root 身份进入终端
# 此时可以将 sudoers 文件权限改为 root:root 只读模式
- 如果使用 apt 安装软件包时提示找不到该软件,而又确信该软件一定存在时,需要更新一下软件列表:
sudo apt update
sudo apt upgrade