部分参考至狂神说Linux系列连载 (qq.com)
登录系统后,输入ls / 进入根目录
绝对路径
由根目录 / 写起,例如/use/share/doc
相对路径
不是由 / 写起,例如从 /usr/share/doc 到 /usr/share/man 底下,可以写成 cd …/man
常用命令
可以使用man[命令] 来查看各个命令的使用文档,如:man cp
ls (列出目录)
-a 全部的文件,连同隐藏文件(开头为.的文件)一起列出来
-l 长数据串列出,包含文件的属性与权限等等数据
ls -al ~
cd (切换目录)
# 切换到用户目录下
cd home
# 使用 mkdir 命令创建 kuangstudy 目录
mkdir kuangstudy
# 进入 kuangstudy 目录
cd kuangstudy
# 回到上一级
cd ..
# 回到根目录
cd /
# 表示回到自己的家目录,亦即是 /root 这个目录
cd ~
pwd (显示目前所在目录)
# 单纯显示出目前的工作目录
pwd
# /root
# 如果是链接,要显示真实地址,可以使用 -P参数
cd bin
pwd -P
# /usr/bin
mkdir (创建新目录)
# 进入我们用户目录下
cd /home
# 创建一个 test 文件夹
mkdir test
# 加了这个 -p 的选项,可以自行帮你创建多层目录!
mkdir -p test1/test2/test3/test4
# 创建权限为 rwx--x--x 的目录。
mkdir -m 711 test2
ls -l
# drwxr-xr-x 2 root root 4096 Mar 12 21:55 test
# drwxr-xr-x 3 root root 4096 Mar 12 21:56 test1
# drwx--x--x 2 root root 4096 Mar 12 21:58 test2
rmdir (删除空的目录)
# 看看有多少目录存在?
ls -l
# drwxr-xr-x 2 root root 4096 Mar 12 21:55 test
# drwxr-xr-x 3 root root 4096 Mar 12 21:56 test1
# drwx--x--x 2 root root 4096 Mar 12 21:58 test2
# 可直接删除掉,没问题
rmdir test
# 因为尚有内容,所以无法删除!
rmdir test1
# rmdir: failed to remove ‘test1’: Directory not empty
# 利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 依次删除。
rmdir -p test1/test2/test3/test4
rm(移除文件或目录)
rm [-fir] 文件或目录
- -f:就是 force 的意思,忽略不存在的文件,不会出现警告信息;
- -d:删除空文件夹
- -i:互动模式,在删除前会询问使用者是否动作
- -r:删除文件夹,递归删除 危险!!!
rm -i install.sh
# rm: remove regular file ‘install.sh’? y
# 如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!
# 尽量不要在服务器上使用 rm -rf /
cp (复制文件或目录)
cp [-adfilprsu] 来源档(source) 目标档(destination)
cp [options] source1 source2 source3 .... directory
- -a:相当于 -pdr 的意思,至于 pdr 请参考下列说明;(常用)
- -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
- -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
- -r:递归持续复制,用于目录的复制行为;(常用)
- -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
- -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
- -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身.
- -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
- -u:若 destination 比 source 旧才升级 destination !
# 找一个有文件的目录,我这里找到 root目录
cd /root
ls
# install.sh
cd /home
# 复制 root目录下的install.sh 到 home目录下
cp /root/install.sh /home
ls
# install.sh
# 再次复制,加上-i参数,增加覆盖询问?
cp -i /root/install.sh /home
# cp: overwrite '/home/install.sh'? y
# n不覆盖,y为覆盖
mv (移动文件或目录,或修改名称)
mv [-fiu] source destination
mv [options] source1 source2 source3 .... directory
- -f:force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
- -i:若目标文件 (destination) 已经存在时,就会询问是否覆盖!
- -u:若目标文件已经存在,且 source 比较新,才会升级 (update)
# 复制一个文件到当前目录
cp /root/install.sh /home
# 创建一个文件夹 test
mkdir test
# 将复制过来的文件移动到我们创建的目录,并查看
mv install.sh test
ls
# test
cd test
ls
# install.sh
# 将文件夹重命名,然后再次查看!
cd ..
mv test mvtest
ls
# mvtest
#查看文件的属性以及文件所属的用户和组
ll
#或者
ls -l
第一个字符:
接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。
其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。
要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
每个文件的属性由左边第一部分的10个字符来确定(如下图):
对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。
同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。
文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。
因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。
修改文件属性
# chgrp:更改文件属组
# -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
chgrp [-R] 属组名 文件名
# chown:更改文件属主,也可以同时更改文件属组
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
# chmod:更改文件9个属性
chmod [-R] xyz 文件或目录
# Linux文件属性有两种设置方法,一种是数字,一种是符号。
# Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。
# 先复习一下刚刚上面提到的数据:文件的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
# r:4 w:2 x:1
# 每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为:
# [-rwxrwx---] 分数则是:
# owner = rwx = 4+2+1 = 7
# group = rwx = 4+2+1 = 7
# others= --- = 0+0+0 = 0
# chmod 770 filename
cat 由第一行开始显示文件内容
cat [-AbEnTv]
tac 与cat相反,从最后一行开始显示,倒着展示
nl 显示行号
nl [-bnw] 文件
more 一页一页翻动
more /etc/csh.login
# ....(中间省略)....
# --More--(28%) # 重点在这一行喔!你的光标也会在这里等待你的命令
在 more 这个程序的运行过程中,你有几个按键可以按的:
less 一页一页翻动
more /etc/csh.login
#....(中间省略)....
# : # 这里可以等待你输入命令!
less运行时可以输入的命令有:
head 取出文件前面几行
head -n 20 /etc/csh.login
tail 取出文件后面几行
tail -n 20 /etc/csh.login
拓展:Linux 链接概念
Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。
ln 命令产生硬链接。
cd /home
touch f1 # 创建一个测试文件f1
ls
# f1
ln f1 f2 # 创建f1的一个硬连接文件f2
ln -s f1 f3 # 创建f1的一个符号连接文件f3
ls -li # -i参数显示文件的inode节点信息
# 397247 -rw-r--r-- 2 root root 0 Mar 13 00:50 f1
# 397247 -rw-r--r-- 2 root root 0 Mar 13 00:50 f2
# 397248 lrwxrwxrwx 1 root root 2 Mar 13 00:50 f3 -> f1
# echo 字符串输出 >> f1 输出到 f1文件
echo "I am f1 file" >>f1
cat f1
# I am f1 file
cat f2
# I am f1 file
cat f3
# I am f1 file
rm -f f1
cat f2
# I am f1 file
cat f3
# cat: f3: No such file or directory
通过上面的测试可以看出:当删除原始文件 f1 后,硬连接 f2 不受影响,但是符号连接 f1 文件无效;
依此您可以做一些相关的测试,可以得到以下全部结论:
- 删除符号连接f3,对f1,f2无影响;
- 删除硬连接f2,对f1,f3也无影响;
- 删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;
- 同时删除原文件f1,硬连接f2,整个文件会真正的被删除。
vim是由vi发展出来的一个文本编辑器
安装vim
- centos: yum -y install vim
- ubuntu:sudo apt-get install vim-gtkcentos
命令模式
刚进入时候,就是命令模式
此时,
输入模式(和windows打字一样)
底线命令模式
添加账号 useradd
useradd 选项 用户名
选项:
用户名:
设置默认密码
adduser --password 123456 testuser
或
adduser testuser
passwd testuser
# 此命令创建了一个用户kuangshen,其中-m选项用来为登录名kuangshen产生一个主目录 /home/kuangshen
useradd -m kuangshen
切换用户
su username 【username为用户名】
从普通用户切换到root 也可以使用 sudo su
在终端输入exit或logout或使用快捷方式ctrl+d,可以退回到原来的用户,其实ctrl+d也是执行exit
在切换用户时,如果想在切换用户之后使用新用户的工作环境,可以在su和username之间加-,例如:【su - root】
$表示普通用户
#表示超级用户,也就是root用户
删除账号
userdel 选项 用户名
userdel -r kuangshen
修改账号
usermod 选项 用户名
用户口令(密码)的管理
passwd 选项 用户名
选项:
不写用户名,则默认修改当前用户的口令
例如,当前用户是kuangshen
passwd
# Old password:******
# New password:*******
# Re-enter new password:*******
如果是超级用户,可以用下列形式指定任何用户的口令:
passwd kuangshen
# New password:*******
# Re-enter new password:*******
普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。
为用户指定空口令时,执行下列形式的命令:
passwd -d kuangshen
每个用户都有一个用户组,linux下的用户属于与他同名的用户组,创建用户时会同时创建用户组。
对用户组的增删改,其实就是对/etc/group文件的更新
增加一个新的用户组使用groupadd
groupadd 选项 用户组
选项:
groupadd group1
新组 group1 ,标识号是当前已有最大标识号加1
groupadd -g 101 group2
新组 group2,标识号是101
删除组
groupdel 用户组
groupdel group1
删除group1
删除用户组的属性
groupmod 选项 用户组
选项:
# 此命令将组group2的组标识号修改为102。
groupmod -g 102 group2
# 将组group2的标识号改为10000,组名修改为group3。
groupmod –g 10000 -n group3 group2
切换组
$ newgrp root
切换到root用户组,前提是root用户组是该用户的主组或附加组
常用命令:
df:Disk Free,统计磁盘中空闲的空间,通过文件系统磁盘块分配图计算得出
选项:
# 将 /etc 底下的可用的磁盘容量以易读的容量格式显示
df -h /etc
# Filesystem Size Used Avail Use% Mounted on
# /dev/vda1 40G 6.3G 32G 17% /
du:Disk Used,统计磁盘已经使用的空间,直接统计各文件各目录的大小
选项:
# 检查根目录底下每个目录所占用的容量
du -sm /*
# 0/bin
# 146/boot
# .....中间省略....
# 0/proc
# .....中间省略....
# 1/tmp
# 3026/usr # 系统初期最大就是他了啦!
# 513/var
# 2666/www
挂载与卸除
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点
# 将 /dev/hdc6 挂载到 /mnt/hdc6 上面!
mkdir /mnt/hdc6
mount /dev/hdc6 /mnt/hdc6
df
# Filesystem 1K-blocks Used Available Use% Mounted on
# /dev/hdc6 1976312 42072 1833836 3% /mnt/hdc6
umount [-fn] 装置文件名或挂载点
选项与参数:
# 卸载/dev/hdc6
umount /dev/hdc6
top
$ top
htop
top增强版,安装:
$ sudo apt install htop
free
# 以合适单位显示
free -h
# 以mb显示
free -m
# 以kb显示
free -k
Ubuntu
查看防火墙状态
sudo ufw status
启用防火墙
sudo ufw enable
禁用防火墙
sudo ufw disable
允许特定端口的入站连接
sudo ufw allow <port>
允许特定端口的出站连接
sudo ufw allow out <port>
允许特定IP地址的入站连接
sudo ufw allow from <IP address>
允许特定IP地址的出站连接
sudo ufw allow out to <IP address>
拒绝特定端口的入站连接
sudo ufw deny <port>
拒绝特定IP地址的入站连接
sudo ufw deny from <IP address>
CentOS
查看防火墙状态
sudo firewall-cmd --state
启用防火墙
sudo systemctl start firewalld
禁用防火墙
sudo systemctil stop firewalld
设置防火墙开机启动
sudo systemctl enable firewalld
添加临时开放端口
sudo firewall-cmd --add-port=<port>/tcp
添加永久开放的端口
sudo firewall-cmd --add-port=<port>/tcp --permanent
允许特定IP地址的入站连接
sudo firewall-cmd --zone=public --add-source=<IP address> --permanent
删除特定端口的规则
sudo firewall-cmd --zone=public --remove-port=<port>/tcp --permanent
删除特定IP的规则
sudo firewall-cmd --zone=public --remove-source=<IP address> --permanent
查看已开放的端口
sudo firewall-cmd --zone=public --list-ports
查看已允许的IP
sudo firewall-cmd --zone=public --list-sources
重载防火墙规则
sudo firewall-cmd --reload
CentOS使用yum安装软件
yum update # 更新软件包
yum install package_name # 安装软件
yum remove package_name # 卸载软件
yum search package_name # 查找软件
Ubuntu使用apt-get安装软件
sudo apt-get update # 更新软件包
sudo apt-get install package_name # 安装软件
sudo apt-get remove package_name # 卸载软件
sudo apt-cache search package_name # 查找软件