软件安装
dpkg
dpkg -i package_name
dpkg -i --force-overwrite-i package_name # 强制安装软件
dpkg -i --force-all package_name # 不顾一切的强制安装软件
软件移除
Ubuntu 移除软件
dpkg -r package_name
dpkg -r --purge --force-deps package_name # 强制移除软件
dpkg --pending --remove # 移除多余的软件
apt-get
apt-get install [soft_name] # 安装软件
apt-cache search [soft_name] # 查找软件
apt-cache madison [soft_name] # 列出一个软件的版本
apt-get install [soft_name=version] # 安装指定版本软件
apt-get remove package # package 删除包
apt-get remove --purge package # package 删除包,包括删除配置文件等
apt-get autoremove --purge package # package删除包及其依赖的软件包+配置文件等(只对6.10有效,强烈推荐)
解 .deb 档案成数个档案
dpkg -x package_name.deb target_dir
列出系统中所有安装的软件
dpkg --get-selections
设置别名
vim ~/.bashrc
alias pyt='ptpython' # 输入pyt和ptpython都会运行pypython
查询系统所有的桌面文件
find
ls -l / | grep -v "run" | awk '{print $9}' | grep -v '^$' | sed "s/^/\//g" | awk BEGIN{RS=EOF}'{gsub(/\n/," ");print}'
-name “*.desktop”
python 版本切换
ubuntu14.04LTS 上装有两个版本的 python:python2.7.6 与 python3.4,默认使用 python2.7.6。可以使用以下命令来修改默认 python 版本
- 备份
sudo cp /usr/bin/python /usr/bin/python_bak
/usr/bin
下的文件千万不要删除
误删重新安装:sudo apt-get install –reinstall python
- 默认设置为 python3.4
sudo ln -s /usr/bin/python3.4 /usr/bin/python
- 查看 python2 的版本
python2 –version
- 把系统默认版本设置为 python2.x
alias python=python2 # 原理是设置别名
ubuntu 修改计算机名
- 修改计算机名
gedit /etc/hostname
- 还需要修改 hosts 文件
vi /etc/hosts
- 临时修改计算机名
hostname [新计算机名]
- 永久性修改
hostname="ubuntu1" && hostname ${hostname} && echo "${hostname}" | sudo tee /etc/hostname
ubtuntu14.04 添加启动器 后面的注释要删除
sudo gedit /usr/share/applications/Navicat.desktop
[Desktop Entry]
Encoding=UTF-8 # 编码
Name=Navicat # 软件名称
Comment=Navicat Mysql # 软件简介
Exec=/home/hjd/software/navicat111_mysql_cs/start_navicat # 软件启动程序路径
Icon=/home/hjd/software/navicat111_mysql_cs/navicat.jpg # 软件图标路径
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;
navicaat 试用结束过期
删除 home->.navicat 目录 重新安装 navicat:./start_navicat
安装五笔输入法
sudo apt-get install ibus-table-wubi
sudo apt-get install fcitx-table-wbpy
直接在ubuntu软件中心查找安装
更新到最新源
sudo apt-get update
sudo apt-get upgrade
立即生效
nautilus -q
安装字体
sudo cp msyh.ttf /usr/share/fonts/
文件、目录创建、删除
mkdir 目录名---------------------创建一个目录
rmdir 空目录名-------------------删除一个空目录
rm 文件名 文件名-----------------删除一个文件或多个文件
rm –rf 非空目录名----------------删除一个非空目录下的一切
touch 文件名--------------------创建一个空文件
pycharm 中文不显示,更换字体就行,比如雅黑等
Appearance & Behavior–>Appearance–>Override default fonts by (not recommended)–>Name:WenQuanYi Micro Hei
pycharm 汉化,把 resources_cn.jar 放到 lib 目录下
sudo cp resoururces_cn.jar /home/hjd/software/pycharm-4.0.5/lib
- pycharm 视图跳转到模板
pycharm 从 views 跳转到 html 文件,要在 settings–>Project:task–>Project Structure 中设置 Templates
列出已安装带 qq 关键字的软件
sudo dpkg -l | grep qq
ipython
如果要运行 python3.*版本的 ipython,则需要安装 ipython3
sudo apt-get install ipython3
或者
pip3 install ipython
pip2 install ipython==5.8.0
在终端输入 ipython3 进入
删除文件最后一行
find /tmp/test/ -name "*.txt" | xargs sed -i '$d' # 注意一定要是 单引号 '
在所有文件中最后追加一行
find /tmp/test/ -name "*.txt" | xargs sed -i '\$a 123456'
文件每行行首增加内容
sed 's/^/111 &/g' /tmp/test.txt
终端退出 python 编译器
- exit()
- Ctrl+Z
查看端口占用
ps aux | grep mysql
ps aux | grep -i manage # 查看django项目端口占用(在项目目录下输入命令)
netstart -tnlp
设置 vim 行号
单次设置 vim 行号
set nu
永久设置 vim 行号
进入 etc/vim 目录,找到 vimrc 文件(vim 的初始化文件),使用 cp 命令对其进行备份,命令为:cp vimrc vimrc.bak(备份是一种安全机制,要谨记);用管理员权限打开 vimrc,命令为:sudo vi vimrc,打开后,在 vimrc 文件最后加入一行命令:set nu;加完后,写入,退出,重启 vim,即可发现有行号的标示。
gedit 设置行号
编辑->首选项 或者 编辑->视图
终端快捷键
Ctrl+Alt+T #新开一个终端
Ctrl+Shift+T #在已开终端在开一个终端
Ctrl+H #显示/隐藏 隐藏文件
Windows 文本在 Ubuntu 的打开,格式不正确
要将 a.txt 里的^M 去掉并写入 b.txt,则使用如下指令
cat a.txt | tr -d "^M" > b.txt
结束进程
ctrl+atl+f2-f6进入命令列界面(最好不要进入f1),ctrl+atl+f7回到卓面
ps x # 列出所有进程
ps x|less #可以按上下键进行翻找,按q退回输入命令
sudo kill 端口号 # 结束进程
谷歌浏览器添加搜索引擎
名称填入「百度」(不包括「」,下同),这一项可自定义关键词填入「baidu.com」,这一项为选填,网址填入「http://www.baidu.com/s?wd=%s」
添加搜狗搜索:「搜狗」「sogou.com」「http://www.sogou.com/web?query=%s」
添加必应搜索:「必应 」「cn.bing.com」「http://cn.bing.com/search?q=%s」
添加360搜索:「360搜索」「so.com 」「http://www.so.com/s?q=%s」
添加淘宝搜索:「淘宝搜索 「taobao.com」「http://s.taobao.com/search?q=%s」
添加搜狗英文搜索: 「搜狗英文」「english.sogou.com」「http://english.sogou.com/english?query=%s」
无法安装’libgtk2.0-0:i386’
sudo apt-get install libgtk2.0-0:i386 #把相关依赖都装上,然而我装不上
Too many authentication failures for root
在 ssh 登陆的时候加上参数 ‘-o PubkeyAuthentication=no’, 即可登陆
ssh root@1.1.1.1 -o PubkeyAuthentication=no
查看 ip 地址
ifconfig
The _imagingft C module is not installed
有些系统,比如 ubuntu 会包此类错误(centos 貌似不会)
# 安装jpeg库
wget http://www.ijg.org/files/jpegsrc.v7.tar.gz
tar -zxvf jpegsrc.v7.tar.gz
cd jpeg-7
CC="gcc -arch x86_64"
./configure --enable-shared --enable-static
make && make install
安装相关依赖
sudo apt-get install libfreetype6-dev
sudo apt-get install libjpeg-dev
卸载后重新安装
pip uninstall Pillow
pip install Pillow==2.8.1
上述方法中可能有些依赖装不上,先安装下列依赖
sudo apt-get install libpng12-0=1.2.50-1ubuntu2
sudo apt-get install libfreetype6=2.5.2-1ubuntu2
sudo rm -rf /var/cache/apt/archives/lock
sudo apt-get install libfreetype6-dev
sudo apt-get install libfreetype6
sudo apt-get install libpng12-dev
.so 为共享库,是 shared object,用于动态连接的,和 dll 差不多
恢复模式
适用于无法登陆,对文件进行修改
- 1.启动时长按 shift
- 2.选择 ubuntu recovery mode
- 3.选择 root,输入密码
- 4.mount -o rw,remount / 设置成可以修改的权限
修改计算机名
- 1.gedit /etc/hostname
- 2.sudo gedit /etc/hosts
找到如下行: 127.0.1.1 XXX
修改用户名
-
正确做法
1.创建一个新的用户 xxx 2.修改默认用户为 xxx 3.删除不需要的用户
-
不建议做法(安装软件中会带 旧用户名,修改后软件会消失)
1.sudo -s 进入 root 模式 2.vi /etc/passwd %s/旧用户名/新用户名/g 用户信息文件 3.vi /etc/shadow 用户密码文件 4.vi /etc/group 用户组文件 5.mv /home/旧用户名 /home/新用户 用户的家目录
南北总线
北桥总线称为系统总线,因为是内存传输的主要信道,所以速度快 南桥总线是输入输出(I/O)总线,主要用于”联系”硬盘、USB、网卡等接口设备。
VirtualBox 操作
- 修改 vdi 的 uuid
VBoxManage internalcommands sethduuid centos2/centos2.vdi
- 后台启动虚拟机
VBoxManage startvm "虚拟机名字" --type headless
- 后台关闭虚拟机
VBoxManage controlvm "虚拟机名字" poweroff
- 删除虚拟硬盘
VBoxManage closemedium <UUID> --delete
- 查询主机 ip
for prefix in $(ifconfig | grep "inet " | grep -v "127.0.0.1" | awk '{print $2}' | cut -d"." -f1-3); do for ip in $(pping -p ${prefix}); do hostname=$(sshpass -p seekplum ssh -o ConnectTimeout=1 -o "StrictHostKeyChecking no" -i ~/.ssh/id_rsa root@${ip} hostname 2>/dev/null); if [ $? = 0 ]; then echo "${hostname} ${ip}"; fi; done; done
virtualbox 共享文件夹
临时分享,重启后会失效
mount -t vboxsf Share /home/ubuntu/Share/
真正自动挂载
vi /etc/rc.local mount -t vboxsf Share /home/ubuntu/Share/
查找软件路径
apt-get install
方法安装的,可以直接用 dpkg -S 软件名(注意是大写 S)命令显示所有包含该软件包的目录
修改文件属性
chgrp:改变文件所属用户组
chgrp 用户组名 文件名
chown:改变文件所有者
chown 用户名 文件名
chmod:改变文件权限
chmod -参数(可省略) xyz 目标文件
查看文件信息
ls -al:查看文件详细信息 ls -l –full-time:显示完整时间格式
文件属性
修改文件属性
r: 4 可读 w: 2 可写 x:1 可执行
x: 文件创建者 y: 同组用户 z: 其他用户
u: 文件创建者 g: 同组用户 o: 其他用户 a:所有用户
+: 加入 -: 除去 =: 设置
例如:
chmod u=rwx,go=r 文件名
chmod a-x 文件名
查看文件属性
d:目录
-:文件
l:连接文件
b:设备文件里面的可供存储的接口设备
c:设备文件里面的串行端口设备,例如键盘、鼠标
查看目录下文件的数量
for i in /home/hjd/*; do echo $i; find $i | wc -l; done
搜狗拼音安装
下载搜狗
fonts-droid(失败后再装)
查看依赖关系
sudo dpkg -i sogoupinyin_2.0.0.0068_amd64.deb
解决大部分依赖
sudo apt-get -f install
语言
目前语言
echo $LANG
修改语言
LANG=en_US # 设置成英文
时间、日历
显示日期与时间
date 格式化:`date “+%Y-%m-%d_%H:%M:%S”`
显示日历
cal
计算器
终端输入
bc
进入
- 输入 quit 才能退出
- 除法精确计算必须执行 scale=number
<number是小数点后保留的位数>
系统关机、重启
重启命令
1、reboot
2、shutdown -r now 立刻重启(root用户使用)
3、shutdown -r 10 过10分钟自动重启(root用户使用)
4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用)
如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启
关机命令
1、halt 立刻关机(会先调用shutdown,不理会目前系统状况下,进行硬件关机的特殊功能)
2、poweroff 立刻关机(会最后调用halt,可以依据目前已启动的服务来逐次关闭各服务后才关机)
3、shutdown -h now 立刻关机(root用户使用)
4、shutdown -h 10 10分钟后自动关机
查看命令操作说明
man ls (查看 ls 操作说明)类似的还有 info ls
可以通过 man 7 man 命令查看下面表格.
代号 | 代表内容 |
---|---|
1 | 用户在 shell 环境中可以操作的命令或者可执行文件 |
2 | 系统内核可调用的函数与工具等 |
3 | 一些常用函数(function)与函数库(library),大部分为 C 的函数库(libc) |
4 | 设备文件的说明,通常在/dev 下的文件 |
5 | 配置文件或者是某些文件的格式 |
6 | 游戏(games) |
7 | 惯例与协议等,例如 Linux 文件系统,网络协议,ASCII code 等说明 |
8 | 系统管理员可用的管理命令 |
9 | 跟 kernel 有关的文件 |
代号 | 内容说明 |
---|---|
NAME | 简短的命令、数据名称说明 |
SYNOPSIS | 简短的命令执行语法(syntax)简介 |
DESCRIPTION | 较为完整的说明,最好仔细看看 |
OPTIONS | 针对 SYNOPSIS 部分中,有列举的所有可用的选项说明 |
COMMANDS | 当这个程序(软件)在执行的时候,可以在此程序(软件)中执行的命令 |
FILES | 这个程序或数据所使用或所参考或连接到的某些文件 |
SEE ALSO | 这个命令或数据有相关的其他说明 |
EXAMPLE | 一些可以参考的范例 |
BUGS | 是否有相关的错误 |
超级简单编辑器
nano test.txt(与 vim 有很大不同,建议卸载 nano, 使用 vim)
- | 可分享的(shareable) | 不可分享的(unshareable) |
---|---|---|
不变的(static) | /usr(软件放置处) | /etc(配置文件) |
/opt(第三方软件) | /boot(开机与内核文件) | |
可变动的(variable) | /var/main(用户邮件信箱) | /var/run(程序相关) |
/var/spool/news(新闻组) | /var/lock(程序相关) |
可分享的:可以分享给其他系统挂载使用的目录,所以包含执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用的目录。
不可分享的:自己机器上运行的设备文件或者是程序有关的 socket 文件等,由于仅与自身机器有关,所以不适合分享给其他主机。
不变的:有些数据是不会经常变动的,跟随着 distribution 而不变动。例如函数库、文件说明文件、系统管理员所管理的主机服务配置文件等。
*可变动的:经常改变的数据,例如登录文件、新闻组等。
目录
/(root,根目录):与开机系统有关
/usr(UNIX software resource):与软件安装/执行有关
/var(variable):与系统运作过程有关
常用命令
cp:复制文件、目录
参数
-a: 相当于 -pdr 的意思
-d: 若源文件为连接文件的属性(link file),则复制连接文件属性而非文件本身
-f: 为强制(force)的意思,若目标文件已经存在且无法开启,则删除后再尝试一次
-i:若目标文件(destination)已经存在时,在覆盖时会先询问操作的进行(常用)
-l:进行硬连接(hard link)的连接文件创建,而非复制文件本身
-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用)
-r:递归持续赋值,用于目录的复制行为(常用)
-s:复制成为符号链接文件(symbolic link),即"快捷方式"文件
-u:若destination比source旧才更新destination
- 拷贝命令
/usr/bin/rsync -rtv -e 'ssh -p 3333 -i ~/.ssh/id_dsa -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking no" -o ""' --exclude history.txt --exclude .idea --exclude .vscode --exclude *.pyc --exclude *.log --exclude .git --exclude hjd-web-env --exclude *.db /home/hjd/PycharmProjects/deploy/ root@192.168.1.3637:/home/hjd/deploy
scp -r -P 3333 /home/hjd/PycharmProjects/qdeploy root@192.168.1.3637:/home/hjd
rm:删除文件、目录
参数
-f:就是force 的意思,忽略不存在的文件,不会出现警告信息
-i:互动模式,在删除前会询问用户是否操作
-r:递归删除,最常用在目录的删除了,这是非常危险的参数
- 反向删除
rm -f !(xxx) # 当前目录下处理xxx全部删除
- 按查找结果删除
find . -name xxx* | xargs rm -rf # 删除当前文件下带 `xxx`的文件或目录
mv:移动文件、目录或者更名
参数
-f: 为强制(force)的意思,若目标文件已经存在,不会询问而直接覆盖
-i:若目标文件(destination)已经存在时,就会询问是否覆盖
-u:若目标文件已经存在,且 source 比较新,才会更新(update)
cat:由第一行开始显示文件内容
-A:相当于 -vET 的整合参数,可列出一些特殊字数,而不是空白而已
-b:列出行号,仅针对非空白行做行号显示,空白行不标行号
-E:将结尾的断行字符 $ 显示出来
-n:打印行号,连同空白行也会有行号,与-b 的参数不同
-T:将 [Tab]按键以^T显示出来
-v:列出一些看不出来的特殊字符
tac:从最后一行开始显示,可以看出 tac 是 cat 的倒写形式
nl:显示的时候,顺便输出行号
-b:指定行号指定方方式,主要有两种:
-b a:表示不论是否为空行,也同样列出行号(类似cat -n)
-b t:如果有空行,空的那一行不要列出行号(默认值)
-n:列出行号表示的方法,主要有三种:
-n ln:行号在屏幕最左方显示
-n rn:行号在自己的字段的最右方显示,且不加0
-n rz:行号在自己字段的最右方显示,且加0
-w:行号字段占用的位数
more:一页一页地显示文件内容
空格键(space):代表向下翻页
Enter:代表向下滚动一行
/字符串:代表在这个显示的内容中,向下查询该字符串
:f :立刻显示出文件名一级目前显示行数
q:代表理科离开more,不再显示该文件内容
b 或 ctrl + b:代表往回翻页,不过这操作只对文件有用,对管道无用
q:与more类似,但是比more更好的是,它可以往前翻页
less
1.命令格式
less [参数] 文件
2.命令功能
less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
3.命令参数
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将“tab”键显示为规定的数字空格
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向前翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一 页
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
head:只看头几行
-n :后面接数字,代表显示几行
tail:只看结尾几行
-n :后面接数字,代表显示几行
-f :表示持续检测后面所接的文件名,要等到按下 ctrl + c 才会结束的tail检测
od:以二进制的方式读取文件内容
-t:
a:使用默认的字符来输出
c:使用 ASCII 字符来输出
d[size]:利用十进制(decimal)来输出数据,每个整数占用size bytes
f[size]:利用浮点数(floating)来输出数据,每个整数占用size bytes
o[size]:利用八进制(octal)来输出数据,每个整数占用size bytes
x[size]:利用十六进制(hexadecimal)来输出数据,每个整数占用size bytes
vi:替换
%s/abc/def/g:把abc替换成def
%s#/user/Desktop/#/home/woqu/#g # 把/user/Desktop/替换成/home/woqu/
文件 time 属性
mtime(modification time):当该文件的“内容数据”更改时,就会更新这个时间。(默认显示)
ctime(status time):当文件的“状态”改变时,例如权限与属性
atime(access time):当“该文件的内容被占用”时,就会更新这个读取时间,比如用cat 读取文件时。
ls -l --time=ctime 文件
touch
修改文件时间或创建新文件,常用于创建空的文件
参数
-a:仅修改访问时间
-c:仅修改文件的时间,若该文件不存在则不创建新文件
-d:后面可以接欲修改的日期而不用目前的日期,也可以用--date="日期或时间"
-m:仅修改mtime
-t:后面可以接欲修改的时间而不用目前的时间,格式为[YYMMDDhhmm]
umask:文件默认权限,目前用户在新建文件或目录时候的权限默认值
0002 --- 与一般权限有关的是后面的三个数字(指的是被禁止的权限)
修改默认权限
umask 022:修改默认权限为 022
设置文件隐藏
chattr:设置文件的隐藏属性
chattr [+-=][Asacdistu] 文件或目录名称
+:增加某一特殊参数,其他原本存在参数则不动
-:删除某一特殊参数,其他原本存在参数则不动
=:仅有后面接的参数
A:当设置了 A 属性时,若你有访问此文件(目录)时,他的访问时间atime将不会被修改,可避免I/O 较慢的机器过度访问磁盘,这对速度较慢的计算机有帮助
S:一般文件是异步写入磁盘的,如果加上 S 这个属性,当你进行任何文件的修改,该改动会“同步”写入磁盘中
a:当设置 a 之后,文件将只能增加数据,不能删除也不能修改数据,只有root才能设置这个属性
c:设置这个属性之后,将会自动将此文件压缩,在读取的时候将会自动解压缩
d: 当 dump 程序被执行的时候,设置 d 属性将可使该文件(或目录)不会被 dump 备份
i:让文件 “不能被删除,改名”,这只连接也无法写入或添加数据。对于文件系统的安全性有相当大的帮助,只有root能设置此熟悉
s:当文件设置了 s 熟悉时,如果这个文件被删除,它将完全从这个硬盘空间中删除
u:与 s 相反,当是用 u 来配置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来找回该文件
注意:属性设置常见的是 a 与 i 的设置值,而且很多设置值必须要身为root才能设置
lsattr:显示文件隐藏属性
参数
-a:将隐藏文件的属性也显示出来
-d:如果连接的是目录,仅列出目录本身的属性而非目录内的文件名
-R:连同子目录的数据也一并列出来
设置环境变量
临时设置
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
永久设置
1.vi /etc/ld.so.conf.d/xxx.conf(xxx 可以是任意名字) 2.ldconfig
特殊权限
SetUID
SUID 权限仅对二进制程序(binary program)有效 执行者对于该程序需要具有 x 的可执行权限 本权限仅在执行该程序的过程中(run-time)有效 执行者将具有该程序所有者(owner)的权限
- SUID 仅可用在二进制程序上,不能够用在 shell script 上面,这是因为 shell script 只是将很多的二进制执行文件调进来执行而已。SUID 对于目录也是无效的。
当 s 标志为文件所有者的 x 项目问 SUID,那么 s 在用户组的 x 时则称为 Set GID,SGID.
SGID
SGID 可以针对文件或目录来设置。 对于文件来说,有以下功能: SGID 对二进制程序有效 程序执行者对于该程序来说,需要具备 x 的权限 执行者在执行的过程中将会获得该程序用户组的支持 对于目录来说,有以下功能: 用户若对于此目录具有 r 与 x 的权限时,该用户能够进入此目录 用户在此目录下的有效用户组(effecetive group)将会变成该目录的用户组 若用户在此目录下具有 w 权限(可以新建文件),则用户创建的新文件的用户组与此目录的用户组相同
SBIT
SBIT(Sticky Bit):只针对目录有效,对于文件已经没有效果了 当用户对于此目录具有 w,x 权限,即具有写入的权限时 当用户在该目录下创建文件或目录是,仅有自己与 root 才有权利删除该文件 example:当甲这个用户与 A 目录是具有用户组或其他人的身份,并且拥有该目录的 w 权限,这表示甲用户对该目录内任何人新建的目录或文件均可进行删除、重命名、移动等操作,不过如果将 A 目录加上了 SBIT 的权限项目时,则甲只能针对自己创建的文件或目录进行删除、重命名、移动等操作,而无法删除其他人的文件。
4: SUID
2: SGID
1: SBIT
查看文件类型
file 文件名
查找文件、命令
which
which 参数 命令:脚本文件名的查询
-a: 将所以有由 PATH 目录中可以找到的命令均列出,而不只是第一个被找到的命令名称
whereis
whereis 参数 文件或目录名:文件查找 注意:通常我们是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来查找。因为 whereis 与 locate 是利用数据库来查找数据,所以相当快速,而且并没有实际查询硬盘,比较节省时间。 参数
-b:只找二进制格式的文件
-m:只找在说明文件 manual 路径下的文件
-s:只找 source 源文件
-u:查找在上述三个选项当中的其他特殊文件
locate
locate 参数 文件名: 文件名可以不完整
-i: 忽略大小写
-r: 后面可接正则表达式的显示方式
注意:locate寻找的数据是由已创建的数据/var/lib/mlocate/里面的数据所查找到的,不妨问数据库,速度快。数据库的创建默认是每天执行一次,可以先手动更新数据。直接输入 updatedb 即可。
find
find [path] [option] [action]
共有 mtime, ctime, atime 三种与时间有关的参数,以 mtime 为例
-mtime n: n 为数字,意义为在 n 天之前的 ”一天之内“ 被更改过的文件
-mtime +n:列出 n 天之前(不含 n 天本身)被更改过的文件名
-mtime -n:列出 n 天之内(含 n 天本身)被更改过的文件名
-newer file: file为一个存在的文件,列出比file还要新的文件名
与用户或用户组有关的参数
-uid n: n为数字,这个数字是用户的帐号 ID ,即UID,这个 UID 是记录在/etc/passwd 里面与帐号名称对应的数字
-gid n:n 为数字,这个数字是用户组名的 ID,即 GID ,这个GID 是记录在/etc/group 中
-user name: name 为用户帐号名称
-group name: name为用户组名
-nouser: 寻找文件的所有者不存在 /etc/passwd 的人
-nogroup: 寻找文件的所有用户组不存在与 /etc/group 中的文件,当自行安装文件时,很可能该软件的属性当中并没有文件的所有这,这是可能的,在这个时候,就可以使用 -nouser 与 -nogroup 查找。
与文件权限及名称有关的参数
-name filename: 查找文件名为filename 的文件
-size [+-] SIZE: 查找比SIZE还要大(+)或小(-)的文件,这个SIZE的规格有:c:代表byte,k代表1024bytes。
-type TYPE: 查找文件类型为 TYPE 的,类型主要有:一般正规文件 (f)、设备文件(b, c)、目录(d)、连接文件(l)、socket(s)、及FIFO(p)等属性
-perm mode: 查找文件权限, “ 刚好等于 mode 的文件”, 这个 mode 为类似 chmod 的属性值
-perm -mode: 查找文件权限,“ 必须 全部包括 mode 的权限”
-perm +mode:查找文件权限 “ 包含 任一 mode 的权限” 的文件
其他可进行的操作:
-exec command: command为其他命令,-exec 后面可再接其他的命令来处理查找到的结果,不支持命令别名。
-print: 将结果打印到屏幕上,这个操作是默认操作
扇区
扇区(sector)为最小的物理存储单位,每个扇区为 512bytes 将扇区组成一个圆,就是柱面(Cylinder),柱面是分区(partition)的最小单位 第一扇区最重要,里面有硬盘主引导记录(Masterbootrecord, MBR)及分区表(partition table),其中 MBR 占有 446bytes,而 partition table 则占有 64bytes
磁盘分区
磁盘分区意即指定分区的起始与结束柱面就可以 磁盘分区最多只能记录四条分区的记录,这四条记录我们成为主(primary)分区或扩展(extended)分区,其中扩展分区还可以再分出逻辑分区(logical),而能被格式化的则仅有分区与逻辑分区而已。 主分区与扩展分区最多可以有 4 个(硬盘限制) 扩展分区最多只能有一个(操作系统的限制) 逻辑分区是由扩展分区持续分出来的分区 能够被格式化后作为数据访问的分区为主要分区与逻辑分区,扩展分区无法格式化 逻辑分区的数量依赖操作系统而不同,在 linux 中,IDE 硬盘最多有 59 个逻辑分区(5 号到 63 号),SATA 硬盘则有 11 个逻辑分区(5 号到 15 号)
磁盘分区后必须进行格式化(format),因为每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此需要将分区进行格式化,以成为操作系统能够利用的文件系统格式。
传统的磁盘与文件系统,一个分区只能被格式化成一个文件系统,即(一个文件系统就是一个分区)。新技术,例如 LVM 与软磁盘阵列(software raid)可以将一个分区格式化成多个文件系统,也能将多个分区合并成一个文件系统。目前我们在格式化时已经不再说成针对分区进行格式化了,通常我们可以称呼一个被挂载的数据为一个文件系统而不是一个分区。 碎片整理:需要碎片整理的原因就是文件写入 block 太过于离散了,此时文件读取的性能将会变得很差所致。这个时候可以通过碎片整理将同一文件所属的 block 汇合在一起,这样数据的读取会比较容易。
文件系统一开始就将 inode 与 block 规划好看,除非重新格式化(或者利用 resize2fs 等命令更改文件系统大小),否则 inode 与 block 固定后就不再变动
文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装引导装载程序。
查看磁盘使用量
df:列出文件系统的整体磁盘使用量 du:评估文件系统的磁盘使用量(常用于评估目录所占容量)
- df [-shikHTm] [目录或文件名]
-a:列出所有的文件系统,包括系统特有的 /proc 等文件系统
-k:以KM的容量显示各文件系统
-m:以MB的容量显示各文件系统
-h:以人们较易阅读的GB。MB,KB等格式自行显示
-H:以M =1000K 替代 M =1024K 的进位方式
-T:连同该分区的文件系统名称也列出
-i:不用硬盘容量,而以inode的数量来显示
- du [-ahskm] 文件或目录名称
-a:列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已
-h:以人们较易阅读的容量格式(G/M)显示
-s:列出总量而已,而不列出每个各别的目录占用容量
-S:不包括字幕的总计,与-s有点差别
-k:以KB列出容量显示
-m:以MB列出容量显示
目录下递归查找
grep -rn "/home/hjd/test/mysql" "路径"
find "路径"|xargs grep -ri "IBM"
»、>
echo abcbedf>>a.txt # 将abcdef追加到a.txt文件末尾
echo bbbbb>a.txt# 这个是bbbbb把a.txt原来的内容替换
这里注意 >是覆盖,»是追加。
硬连接或实际连接
hard link(硬连接或实际连接):只是在某个目录下新建一条文件名连接到某 inode 号码的关联记录而已。如果你将任何一个“文件名”删除,其实 incode 与 block 还是存在的。 限制条件: 不能跨文件系统、不能连接到目录
符号连接,也即是快捷方式
symbolic link(符号连接,也即是快捷方式)
ln [-sf] 源文件 目标文件
不加参数就是 hard link
- -s :symbolic link
- -f :如果目标文件存在时,就主动将目标文件直接删除后在创建
unlink
unlink 一般用于服务进程,进程在 unlink 时不会立刻删除文件,而是在进程终止时删除文件,一些服务程序通过文件及对文件加锁来保持进程的唯一性,为了保证程序没有正常结束下次再启动时能正常启动,程序会在开始时新建一个文件然后调用 unlink,在 CentOS 下重启后会发现此文件已删除,但是用 KILL -9 杀死进程时似乎不能删除文件(要重启才可以)
压缩解压
压缩
tar zcvf FileName.tar.gz DirName
解压
tar zxvf FileName.tar.gz
按名称结束进程
pkill 进程名
killall 进程名
kill -9 $(pidof 进程名)
删除用户
永久性删除用户账号
userdel peter
groupdel peter
usermod –G peter peter (强制删除该用户的主目录和主目录下的所有文件和子目录)
pip 总是超时,速度慢
ubuntu
vi ~/.pip/pip.conf
[global]
timeout = 6000
index-url = https://pypi.doubanio.com/simple/
[install]
use-mirrors = true
mirrors = https://pypi.doubanio.com/simple/
trusted-host = pypi.doubanio.com
windows
C:\Users\用户名\AppData\Roaming 目录下创建 pip 文件夹,再创建 pip.ini 文件
[global]
timeout = 6000
index-url = http://pypi.douban.com/simple
trusted-host = pypi.douban.com
到https://pypi.python.org/simple/pip/下载最新的whl文件进行更新 加大超时时间,如下:
pip –default-timeout=100 install -U pip
指定 pip 安装源
pip install –index http:xxxx Django
找出运行在指定端口的进程
netstat -an grep ‘:80’
文件格式转换
dos2UNIX [-kn] file newfile
UNIX2dos [-kn] file newfile
-k:保留该文件原本的 mtime 时间格式(不更新文件上次内容经过修订的时间)
-n:保留原本的旧文件,将转换后的内容输出到新文件
转换文件的编码方式
iconv -f 原本编码 -t 新编码 filename [-o newfile]
--list:
-f:列出 iconv 支持的语系数据
-t:to即后来的新编码要是什么格式
-o file: 如果要保留原本的文件,那么使用 -o 新文件名,可以建立新编码文件
查看命令类型
type [-tpa] name
参数:
type: 不加任何参数时,type会显示 name 是外部命令还是 bash 内置命令
-t:当加入 -t 参数时,type 会将name 以下面这些字眼显示出它的意义:
file:表示为外部命令
alias:表示该命令为命令别名所设置的名称
builtin:表示该命令为 bash 内置的命令
-p: 如果后面接的 name 为外部命令时,才会显示完整文件名
-a:会由PATH 变量定义的路径中,将所有含 name 的命令都列出来,包含 alias
dd
dd if=/dev/zero of=test bs=1M count=1000
在当前目录下会生成一个 1000M 的 test 文件,文件内容为全 0(因从/dev/zero 中读取,/dev/zero 为 0 源),但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢。
dd if=/dev/zero of=/dev/test_disk bs=1M count=1000 oflag=direct # 防止落在缓存上
在某种场景下,我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘则可以
dd if=/dev/zero of=test bs=1M count=0 seek=100000
此时创建的文件在文件系统中的显示大小为 100000MB,但是并不实际占用 block,因此创建速度与内存速度相当,seek 的作用是跳过输出文件中指定大小的部分,这就达到了创建大文件,但是并不实际写入的目的。当然,因为不实际写入硬盘,所以你在容量只有 10G 的硬盘上创建 100G 的此类文件都是可以的
拷贝系统
dd if=/dev/sda of=/dev/sdb bs=1M oflag=direct,sync
sda 是安装好的操作系统,sdb 是需要拷贝操作系统的磁盘
防火墙
service iptables stop # 关闭防火墙
回收站地址
~/.local/share/Trash/files
history
历史命令记录
从 history 里使用命令号执行命令
!123 # 执行 history 中序号为 123 的命令
指定之前执行过的命令
!-2 # 从本条命令开始倒数,执行倒数第二条命令
向新命令传递旧命令的参数
只有一个参数
ls xxx # 第一次执行
ls -al !$ # 等价于 ls -al xxx
多个参数
cp x1 x2
echo "1st !^" # !^ 等价于第一个参数, !cp:2 等价于第二个参数
# 例如有个命令为xyz,参数有5个,第一个参数用 !^ 可以代替,第三个用 !xyz:3 可以代替
按关键字执行之前的命令
!ls # 执行最近的一条 ls 命令
重复上一条命令
!!
通过 !(文件名) 避免对该文件的影响
rm -rf !(1.txt) # 删除当前文件夹下除了 1.txt 的所有文件
若系统提示: bash:!:event not found,可以执行下面两条命令来进行设置
shopt -u extglob; set +H
shopt -s extglob; set +H
建立字体缓存
- mkfontscale (如果提示 mkfontscale: command not found,则需要安装# sudo apt-get install ttf-mscorefonts-installer)
- mkfontdir
- fc-cache -fv (如果提示 fc-cache: command not found,则需要安装# sudo apt-get install fontconfig)
lv
- 查询 lv
lvs
- 查询 lv 所在 vg
vgs
- 查询 vg 所在 pv
pvs
- 创建 lv
lvcreate -n voting2 -L 6G VolGroup
- 删除 lv
lvremove /dev/VolGroup/voting2 -y
设置虚拟网络
ip addr add 192.168.1.3/24 dev eth0 ifconfig eth0:100 192.168.1.3 netmask 255.255.255.0
修复系统
fsck -y /dev/dm-0 xfs_repair -L -n /dev/dm-0
检查是否修复成功
echo $? # 如果输出是 0 就重启
开机标识
Dec 13 15:47:02 yxfksto4-b kernel: Initializing cgroup subsys cpuset
Dec 13 15:47:02 yxfksto4-b kernel: Initializing cgroup subsys cpu
Dec 13 15:47:02 yxfksto4-b kernel: Linux version 2.6.32-642.el6.x86_64 (mockbuild@x86-033.build.eng.bos.redhat.com) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) ) #1 SMP Wed Apr 13 00:51:26 EDT 2016
Dec 13 15:47:02 yxfksto4-b kernel: Command line: ro root=/dev/mapper/VolGroup-root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_LVM_LV=VolGroup/root rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=512M elevator=deadline rdloaddriver=megaraid_sas rdloaddriver=mpt2sas rdloaddriver=ahci transparent_hugepage=never rd_LVM_LV=VolGroup/swap rdloaddriver=ahci biosdevname=0 numa=off rd_NO_DM rhgb quiet
Dec 13 15:47:02 yxfksto4-b kernel: KERNEL supported cpus:
Dec 13 15:47:02 yxfksto4-b kernel: Intel GenuineIntel
Dec 13 15:47:02 yxfksto4-b kernel: AMD AuthenticAMD
Dec 13 15:47:02 yxfksto4-b kernel: Centaur CentaurHauls
screen
- 启动
screen watch -n 1 ls -l /tmp screen -S test watch -n 1 ls -l /tmp
- 删除
screen -X -S test quit
- 全部删除
screen -ls | grep -i Detached | awk '{print $1}' | xargs -i screen -X -S {} quit
snmpwalk
- centos
yum -y install net-snmp-utils
- ubuntu
sudo apt-get install snmpd snmp snmp-mibs-downloader
curl
- POST
curl -H "Content-Type: application/json" -X POST -d '{"sentence":"I love DLM"}' http://127.0.0.1:5000/analyse/sentiment
获取 IP
ip a | grep "inet " | grep -v -E " lo$| docker" | awk '{print $2}' | cut -d"/" -f1 | uniq | head -n 1
# 或者
ifconfig | grep "inet " | grep -v "127.0.0.1" | grep -v "172." | grep -v "10.244" | awk '{print $2}' | cut -d":" -f 2
获取网卡
$(ip a | grep "inet " | grep -v -E " lo$| docker" | awk '{print $7}' | uniq | head -n 1)
解压时去除上层目录
tar xzvf x.tar.gz -C /tmp/ --strip-components=1
查看已安装单元
systemctl list-unit-files
重载配置
systemctl daemon-reload
允许 root 登录
vi /etc/ssh/sshd_config
PermitRootLogin yes
sudo service ssh restart
禁止 ROOT SSH 远程登录
/etc/ssh/sshd_config
文件中的 PermitRootLogin yes
修改为 PermitRootLogin no
systemctl restart sshd
DHCP 获取 IP 失败
vi /etc/network/interfaces
# source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto enp0s3
iface enp0s3 inet dhcp
安装 ssh
sudo apt-get update && sudo apt-get install openssh-server openssh-client
设置 root 密码
sudo passwd root
VirtualBox中Ubuntu桥接DHCP始终取到相同IP地址问题
/etc/machine-id 里面存放了机器ID,修改成不同值后,DHCP能得到不同IP地址了。
echo "" > /etc/machine-id
修改 SSH 端口
- 1.新增端口
/etc/ssh/sshd_config
文件中的 Port 22
下新增一行,例如
Port 22
Port 99
- 2.重新 ssh 服务
systemctl restart ssh sshd
/etc/init.d/ssh restart
- 3.阿里云配置
如果是阿里云实例需要在 安全组规则
-> 入方向
添加一条规则,配置 99
端口能访问
- 3.验证新增端口
ssh -p 99 xxx@x.x.x.x -i ~/.ssh/xxxxx
- 4.删除 22 端口,并重启服务
If 判断
if [ "a" != "b" ]; then echo 123; else echo 234; fi