Ctrl + a 切换到命令行开始
Ctrl + e 切换到命令行末尾
Ctrl + l 清除屏幕内容
Ctrl + u 清除剪切光标之前的内容
Ctrl + r 在历史命令中查找
Ctrl + c 终止命令
Ctrl + d 退出 shell,logout
cd - 最近两个目录相互切换
!$ 显示系统最近的一条参数
最后这个比较有用,比如我先用 cat /etc/sysconfig/network-scripts/ifconfig-eth0,然后我想用 vim 编辑。
一般的做法是先用↑ 显示最后一条命令,然后用 Home 移动到命令最前,删除 cat,然后再输入 vim 命
令。其实完全可以用 vim !$来代替。
Ctrl+Alt+F1 图形界面
Ctrl+Alt+F2 字符界面 F3 F4 F5 F6都行。
查看linux系统的字符集:
(1) echo $LANG
(2) env | grep LANG
(3) export | grep LANG
(4) locale
修改linux系统的字符集:
(1) 直接设置变量的方式修改
export LANG=zh_CN.UTF-8
(2) 修改/etc/locale.conf文件(centos7.2)
vim /etc/locale.conf
LANG=zh_CN.UTF-8
source /etc/locale.conf
a:在当前字符的右边插入
i:在当前字符的左边插入
o:下一行首插入
O:上一行首插入
gg:移动到文件第一行
G:移动到文件最后一行
0:移动到这一行的最前面字符处
$:移动到这一行的最前面字符处
dd:删除整行
ndd: n 为数字。删除光标所在的向下n行,例如 20dd 则是删除 20行
dg: 删除光标所在到第一行的所有数据
dG: 删除光标所在到最后一行的所有数据
d$: 删除光标所在处,到该行的最后一个字符
d0: 删除光标所在处,到该行的最前面一个字符
/关键字:向下寻找关键字
?关键字:向上寻找关键字
精确查找:/\<关键字\>或?\<关键字\>,'<'表示开头,‘>’表示结尾,需要通过'\'(跳脱符)进行跳脱。 --方便查看man文档
u:撤消前一个操作
Ctrl+r:不撤消
:n 跳到第n行
:!cmd 执行shell命令 cmd
:n1,n2s/关键字1/关键字2/g ##从第 n1 与 n2 行之间寻找关键字1,并将关键字1 替换为关键字 2
:1,$s/关键字1/关键2/g ##从第1行到最后一行寻找关键字1,并将关键字1 替换为关键字2
:% s/^/#/g ##将所有行注释
:% s/^#//g ##取消所有行注释
V 列选择,会将光标经过的列反白选择!
[Ctrl]+v 区块选择,可以用长方形的方式选择数据
y 将反白的地方复制起来
d 将反白的地方删除掉
p 将刚刚复制的区块,在光标所在处贴上!
插入列:
1.光标定位到要操作的地方。
2.CTRL+v 进入“可视 块”模式,选取这一列操作多少行。
3.按I(大写i),再输入要插入的内容。
4.ESC 按两次,会在每行的选定的区域出现插入的内容。
vim可以后面同时接好几个文件来同时打开
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个 vim 的打开的所有文件
在命令行界面输入“:sp {filename}”即可!那个 filename 可有可无, 如果想要 在新窗口启动另一个文件,就加入文件名,否则仅输入 :sp 时, 出现的则是同一个文件在两个窗口间!
:sp {filename} 水平方向多窗口 ## 如果想要在新窗口启动另一个文件,就加入文件名
:vsp {filename} 垂直方向多窗口
[ctrl]+w+↓ :光标可移动到下方的窗口。
:q 离开, 也可以按下 [ctrl]+w+q
vim etc/vimrc
"这个文件的双引号 (") 是注解
set hlsearch "高亮度反白
set backspace=2 "可随时用倒退键删除
set autoindent "自动缩排
set ruler "可显示最后一列的状态
set showmode "左下角那一列的状态
set nu "可以在每一列的最前面显示行号啦!
set bg=dark "显示不同的底色色调
syntax on "进行语法检验,颜色显示。
set ts=4 "表示每一级缩进的长度
set expandtab "用空格转开tab
set cindent "设置使用 C/C++ 语言的自动缩进方式
dumpe2fs:观察某个文件系统的详细信息
##但是现在centos7是以xfs为默认文件系统,无法使用dumpe2fs命令
dumpe2fs [-bh] 设备文件名
查看系统目前已载入到内存中支持的文件系统
cat /proc/filesystems
df:列出文件系统的整体磁盘使用情况
df -h (h:human)
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda1 99M 13M 81M 14% /boot
tmpfs 1005M 0 1005M 0% /dev/shm
将 /etc 下面的可用的磁盘容量以易读的容量格式显示
df -h /etc
du:列出目录所占空间
显示当前目录大小
du -sh
显示/目录下的所有目录大小
du –sh /
查看本目录下各个子目录的总大小
du -h --max-depth=1 或者 du -sh ./*
ln:连接文件(快捷方式)
ln [-sf] 来源文件 目标文件
选项与参数:
-s :如果不加任何参数就进行链接,那就是hard link,至于 -s 就是symbolic link
-f :如果 目标文件 存在时,就主动的将目标文件直接移除后再创建!
1 硬链接:
ln /etc/crontab .
不能跨 Filesystem;不能 link 目录;相当于拷贝但不占用磁盘空间,好比对一个文件添加了一个引用。创建一个硬连接,文件的硬连接计数会+1;改动硬链接也会改动其它所有文件。
2 软链接:
ln -s /etc/crontab crontab2
加上-s 就是软连接,软链接就好像快捷方式。记住,创建软链接时,一定要使用绝对路径。如果不使用绝对路径,移动软链接后,链接会失效。
软链接工作实践:
如果你一个文件系统空间不够时,此时又不想扩展盘(可能麻烦),可以将一个目录移动到另外一个盘上,然后在原有的文件系统上建立一个目录软链接(可以跨文件系统嘛),这样通过链接就能访问原来的目录了。操作如下:
ln -s code/org-dir this-is-soft-link
lsblk :列出系统上的所有磁盘列表
blkid :列出设备的 UUID 等参数
列出磁盘的分区表类型与分区信息 parted device_name print
范例:列出 /dev/vda 磁盘的相关数据
parted /dev/vda print
磁盘分区: gdisk/fdisk/parted
MBR分区表请使用fdisk分区,GPT分区表请使用 gdisk 分区! 你应该要通过 lsblk 或 blkid 先找到磁盘,再用
parted /dev/xxx print 来找出内部的分区表类 型,之后才用 gdisk 或 fdisk 来操作系统。
gdisk 设备名称
Command (? for help):
d delete a partition # 删除一个分区
n add a new partition # 增加一个分区
p print the partition table # 印出分区表 (常用)
q quit without saving changes # 不储存分区就直接离开 gdisk w write table to diskand exit # 储存分区操作后离开 gdisk
因为 fdisk 跟 gdisk 使用的方式几乎一样!只是一个使用 m 作为指令提示数据,一个使用 ? 作为提示这样而已。
fdisk 设备名称
parted同时支持MBR分区与GPT分区
man parted
更新 Linux 核心的分区表信息
partprobe -s
查看核心的分区纪录
cat /proc/partitions
磁盘格式化(创建文件系统 mkfs:make filesystem)
mkfs其实是个综合指令:
mkfs[tab][tab]
mkfs mkfs.btrfs mkfs.cramfs mkfs.ext2
mkfs.ext3 mkfs.ext4 mkfs.fat mkfs.minix mkfs.msdos mkfs.vfat mkfs.xfs
1 将 /dev/vda4 格式化为 xfs 文件系统
mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f] \ [-r parms] 设备名称
mkfs.xfs /dev/vda4
2 将 /dev/vda5 格式化为 ext4 文件系统
mkfs.ext4 [-b size] [-L label] 设备名称
mkfs.ext4 /dev/vda5
将文件系统与目录树结合的动作我们称为“挂载”。因此并不是你有任何文件系统都能使用,必须要“挂载”到目录树的某个目录后,才能够使用该文件系统的。
如果你要用来挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时的消失。并不是被覆盖掉,而是暂时的隐藏了起来,等到新分区被卸载之后,则原本的内容就会再次的跑出来啦!
挂载
mount [-t 文件系统] UUID=’’ 挂载点
mount [-t 文件系统] 设备文件名 挂载点
-o 指定挂载选项
ro,rw 默认rw,只读或者读写。
…
将设备文件卸载
umount [-fn] 设备文件名 或 挂载点
选项与参数:
-f :强制卸载!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
-l :立刻卸载文件系统,比 -f 还强!
-n :不更新 /etc/mtab 情况下卸载。
! device is busy
有时候不能正常弹出,因为有进程在使用当前文件系统。
fuser -m /dev/sdb1 查看哪些进程在使用
lsof /mnt/ 查看哪些文件打开了,被谁打开
卸载之后,可以使用 df 或 mount 看看是否还存在目录树中。
设置开机挂载
往 /etc/fstab 插入记录就行了。
其实 /etc/fstab (filesystem table) 就是将我们利用 mount 指令进行挂载时,将所有的选项与参数写入到这个文件中就是了。
/etc/fstab内容格式: [设备/UUID等] [挂载点] [文件系统] [文件系统参数] [dump] [fsck]
以前的年代因为内存不足,因此那个可以暂时将内存的程序拿到硬盘中暂放的内存交换空间(swap)。我们知道CPU所读取的数据都来自于内存,那当内存不足的时候,为了让后续的程序可以顺利的运行,因此在内存中暂不使用的程序与数据就会被挪到 swap 中了。 此时内存就会空出来给需要执行的程序载入。由于 swap 是用磁盘来暂时放置内存中的信息,所以用到 swap 时,你的主机磁盘灯就会开始闪个不停。
登录linux主机时,linux是根据用户的uid去识别用户的,两样,根据gid去确定用户的组信息。
UID的范围:
0:系统管理员,具有root权限。所以你让其他的账号名称也具有root权限时,将该账号的UID改为0即可。这也就是说,一部系统上面的系统管理员不只见得只有root喔。
1-999:系统账号,由于系统上面启动的网络服务或者背景服务希望使用较小的权限去运作,因此不希望使用root的身份去执行这些服务,所以我们就得要提供这些运作中的程序拥有者同账号才行。这些系统账号通常是不可登录的,他们的shell环境是/sbin/nologin系统账号又分为两类:(1)uid 1-200:由distribution自行建立的系统账号。(2)uid 201-999: 若用户有系统账号需求时,可以使用的UID。
1000-N:可登录账号
GID:root的GID是0
所有账号的信息:/ect/passwd
个人密码: /etc/shadow
所有的群组:/etc/group
useradd [参数] username
参数:
-u :后面接UID
-g :后面接GID
-r :建立一个系统账号
其它…
useradd user1 #创建用户,并建立家目录/home/user1
默认处理的事务有:
在/etc/passwd里面建立一行与账号相关的数据,包括建立UID/GID/家目录等;
在/etc/shadow里面将些账号的密码相关参数填入,但是尚未有密码;
在/etc/group里面加入一个与账号名称一模一样的组名;
在/home底下建立一个与账号同名的目录作为用户家目录,且权限为700
passwd
passwd [参数] username
参数:
-l :是Lock的意思,会将/etc/shadow第二栏最前面加上!使密码失效;
-u :与-l相对,是Unlock的意思!
-S :列出密码相关参数,亦即/etc/shadow文件内的大部分信息。
其它…
passwd 不加账号 #后面没有加账号,就是改自己的密码!
passwd user1 #修改user1的密码,需要有权限
usermod
usermod [参数] username
参数:
-d :后面家目录
-u :后面接UID
-s :后面接shell的实际文件,例如/bin/bash或/bin/csh等等。
其它…
userdel [-r] username
-r : 连同用户的家目录一起删除
id [username]
(1) id #查看自己的UID信息
uid=501(billapp) gid=501(sngrp) groups=501(sngrp),502(dba) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
(2) id root #查看root的UID信息
用户组的操作
groupadd [-g gid] 组名
groupmod [-g gid] 组名
groupdel 组名
(1)su
su #切换成root用户,但是环境变量是当前用户的
su - #切换成root用户,环境变量也是root用户的
(2)sudo
并非所有人都能够执行sudo,而是仅有规范到/etc/sudoers内的用户才能够执行sudo这个指令喔!
sudo [-b] [-u username]
参数:
-b 将要执行的指令放在背景执行
-u username 不加username,代表要以 root 的身份执行指令,而加了,可以以 username 的身份执行指令
安装: apt-get install
移除: apt-get remove
更新: apt-get update 更新软件列表
软件列表从官服服务器更新,也可以设置从国内,或者第三方服务器上更新。这些服务器也是从官服国外获取资源,从第三方获取更新可能更快。
因为安装软件是root的工作,所以执行所有的RPM命令都需要root权限。RPM通过将源代码基于特定平台系统编译为可执行文件,并保存依赖关系。RPM在被安装之前,会检查系统的硬盘容量、操作系统版本等信息,可避免文件被错误安装;RPM可升级、追踪依赖关系、基本信息查询、软件验证、支持多平台。
1 安装软件
rpm -ivh app.rpm -v -h 显示详细信息、进度条
2 卸载软件
rpm -e app
3 升级形式安装
rpm -U app-new.rpm
4 通过http、ftp协议安装
rpm -ivh https://www.baidu.com/app.rpm
5 查询
A 查询系统已安装的软件 rpm -qa
B 查询一个已经安装的文件属于哪个软件包 rpm -qf 文件名 注:文件名所在的绝对路径要指出
C 查询已安装软件包都安装到何处 rmp -ql 软件名
D 查询一个已安装软件包的信息 rmp -qi 软件名
E 查看一下已安装软件的配置文件 rpm -qc 软件名
F 查看一下已安装软件所依赖的软件包及文件 rpm -qR 软件名
6 RPM验证
软件包在传播的过程中可能会被恶意修改,所以才用非对称加密算法,需要一个密钥(或叫作:数字签名)。
导入秘钥: rpm --import password
验证rpm文件: rpm -K app.rpm
验证已安装的文件是否有被改动: rpm -V app
7 RPM配置文件
RPM的配置文件是 rpmrc,可以通过locate命令查找:
locate rpmrc
yum install software-name
yum remove software-name
yum update software-name
1.使用 YUM 查找软件包
命令:yum search
2.列出所有可安装的软件包
命令:yum list
3.列出所有可更新的软件包
命令:yum list updates
4.列出所有已安装的软件包
命令:yum list installed
5.列出所有已安装但不在 Yum Repository 內的软件包
命令:yum list extras
6.列出所指定的软件包
命令:yum list
7.使用 YUM 获取软件包信息
命令:yum info
8.列出所有软件包的信息
命令:yum info
9.列出所有可更新的软件包信息
命令:yum info updates
10.列出所有已安裝的软件包信息
命令:yum info installed
11.列出所有已安裝但不在 Yum Repository 內的软件包信息
命令:yum info extras
12.列出软件包提供哪些文件
命令:yum provides
yum 会把下载的软件包和 header 存储在 cache 中,而不会自动删除。如果我们觉得它们占用了磁盘空间,
可以使用 yum clean 指令进行清除,更精确的用法是 yum clean headers 清除 header,yum clean packages 清
除下载的 rpm 包,yum clean all 一股脑儿端
1.清除缓存目录(/var/cache/yum)下的软件包
命令:yum clean packages
2.清除缓存目录(/var/cache/yum)下的 headers
命令:yum clean headers
3.清除缓存目录(/var/cache/yum)下旧的 headers
命令:yum clean
Oldheaders
4.清除缓存目录(/var/cache/yum)下的软件包及旧的 headers
命令:yum clean, yum clean
all (= yum clean packages; yum clean oldheaders)
.deb安装包
安装: sudo dpkg -i xxx.deb
卸载: sudo dpkg -r xxx
dpkg -L foo - 显示名为“foo”的包都安装了哪些文件以及它们的路径
1) 解压源代码包
2)进入到安装目录
3)检测文件是否缺失,创建makefile,检测编译环境: ./configure
4)编译源码,生成库和可执行程序:make
5)把库和可执行程序安装到系统目录下: sudo make install
6)删除和卸载软件:sudo make clean
7)上述安装步骤不绝对,主要看README文件
chown 改变文件所属用户与用户组
chown Owner [ :Group ] { File … | Directory … }
将档案 file1.txt的拥有者设为 users 群体的使用者 jessie
chown jessie:users file1.txt
find 按文件的属性(文件名、大小、类型)查找
## 在~目录下查找文件名为filename的文件
find ~ -name filename.* ## *代表任意字符
## 打印目录(包括子目录内容)
find 或者 find pathname(需要打印的目录名)
## 查找用户家目录下一级子目录中的普通文件
find ${HOME} -maxdepth 1 -type f
## 查找大小在50MB到100MB之间的文件
find / -size +50M -size -100M
## 查找大于100MB的文件并删除
find / -size +100M -exec rm -rf {} \;
grep 按文件的内容查找
grep 参数 “查找内容” 路径或者文件
选项与参数:
-r : 此参数的效果和指定"-d recurse"参数相同。
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 ‘搜寻字串’ 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字串’ 内容的那一行!
例如:
grep -r update /etc/acpi #以递归的方式查找“etc/acpi” 目录下包含“update”的文件
locate
locate与find 不同: find 是去硬盘找,locate 只在/var/lib/slocate资料库中找。
locate的速度比find快,它并不是真的查找,而是查数据库。一般数据库文在/var/lib/mlocate/mlocate.db(centos7.5)
所以locate的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手动更新数据库。
命令为:locate -u
查找文件: locate filename
1、.tar 用 tar –xvf 解压
2、.gz 用 gzip -d或者gunzip 解压
3、.tar.gz和.tgz 用 tar –xzf 解压
4、.bz2 用 bzip2 -d或者用bunzip2 解压
5、.tar.bz2用tar –xjf 解压
6、.Z 用 compress 解压
7、.tar.Z 用tar –xZf 解压
8、.rar 用 unrar e解压
9、.zip 用 unzip 解压
查看当前bash PID
echo $$
关于上个执行指令的回传值
echo $?
执行该指令,如果成功,则会回传一个 0 值,发生错误,一般就是以非为 0 的数值来取代
查询指令是否为 Bash shell 的内置命令
type ls
设置一变量 name ,且内容为 VBird
set name=VBird
将 name 的内容多出 "yes" 呢?
name=${name}yes
自订变量转成环境变量:export
export name
bash ##进入子shell
echo $name
ctrl+d ##离开子shell
将命令的执行结果传给变量
如何进入到您目前核心的模块目录?
cd /lib/modules/`uname -r`/kernel
cd /lib/modules/$(uname -r)/kernel # 以此例较佳!
取消变量
取消name 这个变量内容
unset name
从键盘读取变量
让使用者由键盘输入一内容,将该内容变成名为 atest 的变量
read atest
提示使用者 30 秒内输入自己的大名,将该输入字串作为名为 named 的变量内容
read -p "Please keyin your name: " -t 30 named
查看当前有哪些别名
alias
新增别名
alias lm='ls -al | more'
删除别名
unalias lm
echo $RANDOM ##系统就会主动的随机取出一个介于 0~32767 的数值
## 想要使用 0~9 之间的数值呢?利用 declare 宣告数值类型
declare -i number=$RANDOM*10/32768 ; echo $number ## 此时会随机取出 0~9 之间的数值
管线命令“ | ”仅能处理经由前面一个指令传来的正确信息,也就是 standard output 的信息
cut -d '分隔字符' -f fields
将 PATH 变量取出,我要找出第五个路径。
echo ${PATH} | cut -d ':' -f 5
如果想要列出第 3 与第 5 呢?
echo ${PATH} | cut -d ':' -f 3,5
/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何?
cat /etc/passwd | sort -t ':' -k 3
somecommand |xargs -item command
当 xargs 后面没有接任何的指令时,默认是以 echo 来进行输出
-p 当每次执行一个argument的时候询问一次用户。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-t 表示先打印命令,然后再执行
xargs 结合 find 使用
find . -type f -name "*.log" -print0 | xargs -0 rm -f
查找所有的 jpg 文件,并且压缩它们
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
将一些特殊目录或者文件写到 include-file.txt 中,查看其大小
xargs -a include-file.txt du -sh
wc -cwl 文件名
-c 字节数
-w 字数
-l 行数
打印 ll 输出信息的 第3列信息
ll | awk '{print $3}'
查看每个子目录中普通文件的数量
ll | grep ^d | awk '{printf "echo -n %s; echo -n \"\t\"; ls -l %s | wc -l\n",$9,$9}' | sh
批量删除文件:
ll *.dat | head -n 300 | awk '{ print "rm -f ",$9}'|sh
<1>、服务器端:sudo apt-get install vsftpd
1). 修改配置文件 – /etc/vsftpd.conf
2). 重启服务 – service vsftpd restart
<2>、客户端:安装了服务端便自带了客户端
1). 实名用户登录
ftp + Ip(server)
输入用户名(server)
输入密码
2). 文件的上传与下载
上传: put file
下载: get file
不允许操作目录,如果想操作目录 --打包目录
3). 匿名用户登录
创建匿名用户根目录 mkdir aaa-dir
在配置文件指定匿名用户ftp根目录 anon_root=/home/aaa-dir
重启服务
输入匿名账号:anonymous
输入密码:没有密码
<3>、lftp:一个ftp客户端工具,可以上传和下载目录
1). 软件安装 sudo apt-get install lftp
2). 登录服务器
匿名: lftp 服务器ip 回车
login
实名: lftp [email protected] 回车
输入服务器密码
3). 操作 put、get、mput(上传多个文件)、mget;
mirror:下载整个目录
mirror -R: 上传整个目录及其子目录
nfs: net file system ->网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源
<1>、服务器端:sudo apt-get install nfs-kernel-server
1). 创建共享目录 – mkdir /home/share
2). 修改配置文件 – /etc/exports 在文件中添加:
/home/share *(ro,sync)
第一为共享目录,*代表任意网段,可以设置特定IP,sync表示将数据同步到内存与硬盘中,表示实时更新。
3). 重启服务 – service nfs-kenerl-server restart
<2>、客户端
1). 挂载服务器共享目录
sudo mount serverIp:shareDir /mnt
上电(CPU复位) ——> BIOS自检 ——> 系统引导 ——> 加载内核