文章目录
一 常用快捷键
1 终端快捷键
Ctrl + a 切换到命令行开始
Ctrl + e 切换到命令行末尾
Ctrl + l 清除屏幕内容
Ctrl + u 清除光标之前的内容
Ctrl + w 清除光标之前一个单词
Ctrl + r 在历史命令中查找
Ctrl + c 终止命令
Ctrl + d 退出 shell,logout
cd - 最近两个目录相互切换
!$ 显示系统最近的一条参数
最后这个比较有用,比如我先用 cat /etc/sysconfig/network-scripts/ifconfig-eth0,然后我想用 vim 编辑。
一般的做法是先用↑ 显示最后一条命令,然后用 Home 移动到命令最前,删除 cat,然后再输入 vim 命
令。其实完全可以用 vim !$来代替。
2 gnome快捷键
Ctrl+Alt+F1 图形界面
Ctrl+Alt+F2 字符界面 F3 F4 F5 F6都行。
3 linux系统的字符集
查看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
二 VIM
1 插入模式:
a:在当前字符的右边插入
i:在当前字符的左边插入
o:下一行首插入
O:上一行首插入
2 命令行模式:
gg:移动到文件第一行
G:移动到文件最后一行
0:移动到这一行的最前面字符处
$:移动到这一行的最前面字符处
x:删除当前光标下的字符
s:删除当前字符并插入
S:删除当前行并插入
cw:替换当前单词
dw:删除光标之后的单词剩余部分。
d$:删除光标之后的该行剩余部分。
dd:删除当前行。
ndd: n 为数字。删除光标所在的向下n行,例如 20dd 则是删除 20行
dgg: 删除光标所在到第一行的所有数据
dG: 删除光标所在到最后一行的所有数据
d0: 删除光标所在处,到该行的最前面一个字符
:g/^$/d 删除所有的空白行
/关键字:向下寻找关键字
?关键字:向上寻找关键字
精确查找:/\<关键字\>或?\<关键字\>,'<'表示开头,‘>’表示结尾,需要通过'\'(跳脱符)进行跳脱。
u:撤消前一个操作
Ctrl+r:不撤消
K(大写):跳转到系统函数的man文档, 如:2K --> man 2 xxx
gd(go local define):到达光标所在处函数或者变量的定义处。使用ctags的话就能跨文件跳转定义(ctrl+】)。
gf(go file):光标移动至头文件名,跳转到头文件中。
ctrl+^:返回至原有文件
>>:缩进所有选择的代码
<<:反缩进
h、j、k、l:控制光标左、下、上、右 移动
3 末行模式:
:n 跳到第n行
:set list 查看换行符格式
:!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 ##取消所有行注释
4 区块选择(Visual Block)
V 列选择,会将光标经过的列反白选择!
[Ctrl]+v 区块选择,可以用长方形的方式选择数据
y 将反白的地方复制起来
d 将反白的地方删除掉
p 将刚刚复制的区块,在光标所在处贴上!
插入列:
1.光标定位到要操作的地方。
2.CTRL+v 进入“可视 块”模式,选取这一列操作多少行。
3.按I(大写i),再输入要插入的内容。
4.ESC 按两次,会在每行的选定的区域出现插入的内容。
5 多文件编辑
vim可以后面同时接好几个文件来同时打开
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个 vim 的打开的所有文件
:bn 切换到下一个文件
:bp 切换到上一个文件
:b num 切换到序号为num的文件(其中num文件编号)
:q 关闭当前文件
:qa 关闭所有打开的文件
:set ff 查看当前文件的格式,同时也可以用此命令重新设置文件格式
vim快速打开头文件方法:
第一步:将cursor定位到需要打开的文件处
第二步:使用快捷键gf
第三步:ctrl+o退出
vim打开文件时指定行号:
vim filename +line
6 多窗口功能
在命令行界面输入“:sp {filename}”即可!那个 filename 可有可无, 如果想要 在新窗口启动另一个文件,就加入文件名,否则仅输入 :sp 时, 出现的则是同一个文件在两个窗口间!
:sp {filename} 水平方向多窗口 ## 如果想要在新窗口启动另一个文件,就加入文件名
:vsp {filename} 垂直方向多窗口
[ctrl]+w+↓ :光标可移动到下方的窗口。
:q 离开, 也可以按下 [ctrl]+w+q
7 vim 环境设置与记录: ~/.vimrc, ~/.viminfo /etc/vimrc
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++ 语言的自动缩进方式
如果有一天你发现你的#include<xxx> #include变成了深色,你可以设置:
set nohls
你问我怎么知道的?
vim安装目录下有一系列的预定义语法和相关脚本,/usr/share/vim/vim74/syntax/c.vim
这个文件中 syn match cInclude 这一项就对头文件包含做了说明
三 磁盘与文件系统管理
1 文件系统的简单操作命令
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 ./*
2 链接文件
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
3 磁盘的分区、格式化、检验
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
4 文件系统挂载与卸载
将文件系统与目录树结合的动作我们称为“挂载”。因此并不是你有任何文件系统都能使用,必须要“挂载”到目录树的某个目录后,才能够使用该文件系统的。
如果你要用来挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时的消失。并不是被覆盖掉,而是暂时的隐藏了起来,等到新分区被卸载之后,则原本的内容就会再次的跑出来啦!
挂载
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]
5 什么是内存交换空间(swap)?
以前的年代因为内存不足,因此那个可以暂时将内存的程序拿到硬盘中暂放的内存交换空间(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
1 用户信息存储位置
所有账号的信息:/ect/passwd
个人密码: /etc/shadow
所有的群组:/etc/group
/ect/passwd文件结构
2 新增用户
useradd [参数] username
参数:
-u :后面接UID
-g :后面接GID
-r :建立一个系统账号
其它…
useradd user1 #创建用户,并建立家目录/home/user1
默认处理的事务有:
在/etc/passwd里面建立一行与账号相关的数据,包括建立UID/GID/家目录等;
在/etc/shadow里面将些账号的密码相关参数填入,但是尚未有密码;
在/etc/group里面加入一个与账号名称一模一样的组名;
在/home底下建立一个与账号同名的目录作为用户家目录,且权限为700
3 修改用户密码
passwd
passwd [参数] username
参数:
-l :是Lock的意思,会将/etc/shadow第二栏最前面加上!使密码失效;
-u :与-l相对,是Unlock的意思!
-S :列出密码相关参数,亦即/etc/shadow文件内的大部分信息。
其它…
passwd 不加账号 #后面没有加账号,就是改自己的密码!
passwd user1 #修改user1的密码,需要有权限
4 修改用户参数
usermod
usermod [参数] username
参数:
-d :后面家目录
-u :后面接UID
-s :后面接shell的实际文件,例如/bin/bash或/bin/csh等等。
其它…
5 移除用户
userdel [-r] username
-r : 连同用户的家目录一起删除
6 查看用户相关信息
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信息
7 用户组的操作
用户组的操作
groupadd [-g gid] 组名
groupmod [-g gid] 组名
groupdel 组名
8 用户切换
(1)su
su #切换成root用户,但是环境变量是当前用户的
su - #切换成root用户,环境变量也是root用户的
(2)sudo
并非所有人都能够执行sudo,而是仅有规范到/etc/sudoers内的用户才能够执行sudo这个指令喔!
sudo [-b] [-u username]
参数:
-b 将要执行的指令放在背景执行
-u username 不加username,代表要以 root 的身份执行指令,而加了,可以以 username 的身份执行指令
五 软件的安装与卸载
1 在线安装
apt-get
安装: apt-get install
移除: apt-get remove
更新: apt-get update 更新软件列表
软件列表从官服服务器更新,也可以设置从国内,或者第三方服务器上更新。这些服务器也是从官服国外获取资源,从第三方获取更新可能更快。
RPM (redhat Package Manager)
因为安装软件是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
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
yum 会把下载的软件包和 header 存储在 cache 中,而不会自动删除。如果我们觉得它们占用了磁盘空间,可以使用 yum clean 指令进行清除。
# 查找软件包
yum search
# 列出所有可安裝的软件清单命令
yum list
# 列出所有已安装的软件包
yum list installed
# 列出所有可更新的软件包
yum list updates
# 获取软件包信息
yum info
# 列出所有已安裝的软件包信息
yum info installed
# 列出软件包提供哪些文件
yum provides
# 列出所有可更新的软件清单命令
yum check-update
# 更新所有软件命令
yum update
# 删除软件包命令
yum remove <package_name>
# 清除缓存目录下的软件包
yum clean packages
# 清除缓存目录下的headers
yum clean headers
# 清除缓存目录下旧的headers
yum clean oldheaders
# 清除缓存目录下的软件包及旧的headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders)
2 deb包安装
.deb安装包
安装: sudo dpkg -i xxx.deb
卸载: sudo dpkg -r xxx
dpkg -L foo - 显示名为“foo”的包都安装了哪些文件以及它们的路径
3 原码编译
1) 解压源代码包
2)进入到安装目录
3)检测文件是否缺失,创建makefile,检测编译环境: ./configure
4)编译源码,生成库和可执行程序:make
5)把库和可执行程序安装到系统目录下: sudo make install
6)删除和卸载软件:sudo make clean
7)上述安装步骤不绝对,主要看README文件
六 文件与目录管理
1 文件权限
chown 改变文件所属用户与用户组
chown Owner [ :Group ] { File … | Directory … }
将档案 file1.txt的拥有者设为 users 群体的使用者 jessie
chown jessie:users file1.txt
2 文件查找:find、grep、locate
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 {} \; ##不能少了最后的';'
## 查找今天修改的文件
find / -mtime 0
## 查找2天前修改的文件
find / -mtime +2
## 查找2天内修改的文件
find / -mtime -2
## 查找30分钟前修改的文件
find / -mmin +30
## 查找30分钟内修改的文件
find / -mmin -30
grep 按文件的内容查找
grep 参数 “查找内容” 路径或者文件
选项与参数:
-r : 此参数的效果和指定"-d recurse"参数相同。
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 ‘搜寻字串’ 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字串’ 内容的那一行!
-l :列出符合匹配的文件名
-L :列出不符合匹配的文件名
-h :在匹配的结果前不显示文件名,默认
-H :在匹配的结果前显示文件名
-E :用正则表达式搜索匹配
例如:
#以递归的方式查找“etc/acpi” 目录下包含“update”的文件
grep -r update /etc/acpi
#查找文件中 既包含 “E3302” 又包含 “13011331531” 的记录
grep -l E3302 * | xargs grep 13011331531
grep -El 'E3302.*13011331531' * #如果这两个字符串出现在同一行,可以用这个条件
#查找文件中 包含 “123” 或 “abc” 的记录
grep -E '123|abc' filename
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
1 特殊变量
查看当前bash PID
echo $$
关于上个执行指令的回传值
echo $?
执行该指令,如果成功,则会回传一个 0 值,发生错误,一般就是以非为 0 的数值来取代
查询指令是否为 Bash shell 的内置命令
type ls
2 自定义变量
设置一变量 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
3 别名设置: alias, unalias
查看当前有哪些别名
alias
新增别名
alias lm='ls -al | more'
删除别名
unalias lm
4 获取随机数
echo $RANDOM ##系统就会主动的随机取出一个介于 0~32767 的数值
## 想要使用 0~9 之间的数值呢?利用 declare 宣告数值类型
declare -i number=$RANDOM*10/32768 ; echo $number ## 此时会随机取出 0~9 之间的数值
5 管线命令
管线命令“ | ”仅能处理经由前面一个指令传来的正确信息,也就是 standard output 的信息
撷取命令:cut
cut -d '分隔字符' -f fields
将 PATH 变量取出,我要找出第五个路径。
echo ${PATH} | cut -d ':' -f 5
如果想要列出第 3 与第 5 呢?
echo ${PATH} | cut -d ':' -f 3,5
排序命令:sort
/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何?
cat /etc/passwd | sort -t ':' -k 3
参数代换: xargs
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
xargs传递参数给有多个参数的命令:
ll *.log | xargs -I {} cp {} yourdir
等同于: cp *.log yourdir
wc:获取一个文本文件的信息
wc -cwl 文件名
-c 字节数
-w 字数
-l 行数
awk
打印 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
九 ftp、nfs服务器搭建
1 ftp服务器搭建 --vsftpd
<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 username@127.0.0.1 回车
输入服务器密码
3). 操作 put、get、mput(上传多个文件)、mget;
mirror:下载整个目录
mirror -R: 上传整个目录及其子目录
2 nfs服务器搭建
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
十 Linux的启动流程
- BIOS 自检
- 启动 GRUB/LILO
- 运行 Linux kernel 并检测硬件
- 挂载根文件系统
- 运行 Linux 系统的第一个进程 init(其 PID 永远为 1,是所有其它进程的父进程)
- init 读取系统引导配置文件 /etc/inittab 中的信息进行初始化
- 执行系统初始化脚本- /etc/rc.d/rc.sysinit,执行系统初始化(包括很多内容)
- 根据指定的运行级别(runlevel)来运行服务器脚本程序,再执行脚本 /etc/rc.d/rc.local
- 运行一些其他的特别服务,一般为 /sbin/mingetty 和 /etc/X11/prefdm
- Linux 控制台(console)提示用户输入用户名、密码进行登陆。
上电(CPU复位) ——> BIOS自检 ——> 系统引导 ——> 加载内核
十一 其它常见问题
1 解决程序执行时动态库无法被加载的问题
查看程序依赖的动态库: ldd myapp
临时设置: export LD_LIBRARY_PATH=库路径,将当前目录加入环境变量,但是终端退出就无效了。 LD_LIBRARY_PATH作用: 指定查找共享库时除默认路径之外的其它路径,该路径在默认路径之前查找。
永远设置: 将上条写入家目录下.bashrc文件中
粗暴设置: 直接将libxxx.so文件拷贝到/usr/lib 或 /lib 目录下。
将libxxx.so所在的绝对路径追加到/etc/ld.so.conf文件,使用sudo ldconfig -v更新。
2 查看常用基础信息
主机系统:
uname -a
cat /etc/issue
cat /proc/version查看CPU信息:
cat /proc/cpuinfo查看用户信息:
id username(不加username显示当前用户)查看主机信息:
hostname -a查看shell类型:
echo $SHELL (或者 echo $0 )
3 批量转换文件的编码
# 批量转换文件的编码
for i in `find src -name *.cpp` ; do echo $i;iconv -f GB2312 -t utf8 $i -o /tmp/iconv.tmp;mv /tmp/iconv.tmp $i; done
find src -type f | xargs dos2unix
find src -type f | xargs file
4 如何将man文档导出为pdf?
# centos8
yum install texlive-thumbpdf.noarch
# 将ls的man文档导致为pdf, 方便翻译
man -t ls | ps2pdf - ls.pdf