Linux 学习笔记

这里记录我的 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

你可能感兴趣的:(Linux 学习笔记)