linux 常用命令

安装 Ubuntu Desktop

注意事项一:进入BIOS

最近在lenovo电脑上安装,连进BIOS都是那么的费劲,别人的差不多都是F12,而你看lenovo的,进入BIOS之后还得,关闭安全启动模式,设置开机启动的传统模式

注意事项二:分区的设置

如果是为了省心的话,直接弄个4G的swap(交换分区),然后将所有的空间给/(根目录)
但这次我给/boot可以单独分成一个区,大小为200M

注意事项三; /boot空间不足

/boot文件里面存放的是系统引导文件和内核的一些东西,这些东西100M是足够容纳的。而大家都知道linux内核一直在更新,跟新后,旧的内核就不在使用,但旧的内核文件还在boot里面,占据着空间,更新几次过后boot文件就会被占满,显示boot磁盘空间不足。这时为了更新需要将不用的内核文件删除,释放空间

1
2
3
4
5
6
df -h
uname -a # (查看当前使用的内核版本)
sudo apt-get remove linux-image- (按两次tab键)# 删除旧版本内核
df -h # 查看硬盘的使用情况
sudo /usr/sbin/update-grub
# 解决you may need to re-run your boot loader[grub]

注意事项四:设置主屏和副屏
1
2
3
4
5
6
7
8
xrandr # (查看和设置显示屏)
xrandr --output HDMI2 --auto --primary
# HDMI2 是显示屏的名字
# auto 是自动分辨率
# primary 是主屏
xrandr --output eDP1 --right-of HDMI2 --auto
# eDP1 是笔记本显示屏的名字
# --right-of HDMI2 就是放在HDMI2 显示器的右边

不需要记住所有的命令,使用man info查看帮助文档:

1
2
3
4
5
6
ls --help
man ls # 帮助手册
man -k passwd
man -k nautilus # 可以用来查询包含该关键字命令的文档
info ls # 帮助文档(书)
# 所有程序的文档 都会以TXT,HTML,PDF等方式保存在/usr/share/doc目录下

用户与权限

用户:是限制使用者或进程可以使用,不可以使用哪些资源.
用户组:用来方便组织管理用户GID
UID:每个用户拥有一个,操作系统实际使用的是UID,而不是用户名.每个用户属于一个主组,属于一个或多个附属组(最多有31个),每个可登陆用户拥有一个指定的shell.
特别注意:每个进程以一个用户身份运行,并受到该用户可访问的资源限制.所以进程的权限与该用户的权限一样.
UID:用32位的二进制,用十进制查看,但系统为了兼容老式系统,用户ID限制在16位(65535个用户上限).root用户:ID为0,系统用户(1~499):没有一个登陆的shell,为某些服务创建的,比如说WEB服务,共享服务,ftp服务打印服务,这些用户仅仅是做为 这些进程去使用的,普通用户(500以上)

Linux权限基于UGO模型进行控制,权限rwx对目录的影响:
r:可列出目录内容,w:可在目录中创建删除文件,
x:可访问目录内容(进入目录),目录必须拥有X权限,否则无法进入目录
rwx(4+2+1)

默认权限:umask的值会从对象的全权限值中减掉
普通用户的umask:0002,root用户的为0022
目录的全权限 777-002
文件的全权限 666-002
umask: 显示 12位长的权限 UGO占用9bite
umask 0022 : 去设置默认权限

但一个目录,只能属于一个组,当多个组需要共同使用这个目录时,UGO模型的权限就不行了.
ACL(Access Control List)是一种高级权限机制,允许我们对一个文件或目录进行灵活的复杂的权限设置.
允许针对不同用户,不同组对一个目标文件或目录进行权限设置,不受UGO模型限制.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
who # 显示哪些用户已经登陆系统
whoami # 显示当前用户
id # 查看当前用户信息
passwd username # 修改用户密码,默认是修改当前用户
# 用户组 /etc/group
groupadd femnGroup
groupdel femnGroup
# 用户 /etc/shadow
useradd -G femnGroup femn1
# 此femn1用户主属组是femn1,附属组是femnGroup
useradd -d /home/femn1 -u 1000 femn1 # femn1是用户名 -u用户ID
sudo usermod -d /home/femn1 -s /bin/bash femn1 # -s默认bash
userdel femn1
userdel -r femn1 # 同时删除用户的家目录
# 改文件的UGO权限
chmod -R 777 文件名
chmod u+rw,g+o
chmod go+rw
chmod a-x # a代指ugo
# chown改所属用户 -R
chown -R name:name 文件
chown femn(用户名)learn.txt(文件名,如果是目录,则加上 -R参数)
# chgrp改所属组 -R递归修改目录下的所有文件的所属组
chgrp -R femnGroup learn.txt
# umask的最前面的那位,是用来保留特殊权限的.
chmod u+s 文件:
# 特殊权限一般是给可执行文件去用的.1770
chmod g+s 目录:
# 在此目录下生成的文件或目录,都会继承此目录的用户组 2770
chmod o+t 目录:
# 只能是本人可以删除自己的文件,即使是本组中的人员也不能删除别人的文件.4770
# ACL需要在挂载文件的时候打开ACL功能:
mount -o acl /dev/sda5 /mnt
# 针对一个用户对文件进行ACL设置:
setfacl -m u:name:rwx linux
setfacl -m g:name:rw linux
setfacl -x u:name linux
# 只要我们的文件系统打开了ACL功能,就可以查看一个文件或目录的ACL设置:
getfacl linux

磁盘和挂载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
df -h # 设备文件名称,本系统中的磁盘的使用大小情况
df -at # 文件系统, 磁盘的状态
du -sh # 显示此目录总所占空间
du -sh ~/* | sort -nr
# 参数让结果按降序输出 管道命令将du命令的输出重定向到sort命令
fdisk -l # 查看本机的所有磁盘,以及磁盘的分区情况
fdisk /dev/sda # 查看,创建,删除某个磁盘 分区
dumpe2fs -h /dev/sdb3 # 得到这个磁盘分区的所有信息
# 格式化之前先不要挂载
mkfs -t ext4 /dev/sda4
mkfs.ext4 /dev/sda4
# 将这个分区(或硬盘)格式化为ext4文件系统,格式化磁盘
mke2fs -j -L "partition-label-name" -b 4096 -i -c 128 /dev/sda4
# 这样就可以传4.3G的大文件到U盘上了,只是这样格式,在Win不能用
# 挂载
mount /dev/sdc1 /home/name/usb
mount -o remount,rw,auto /dev/sdc1
# 将/dev/sdc1重新挂载,并加入参数rw,auto
umount /home/name/usb or /dev/sdc1 挂载点或设备文件名
# -l参数是强制
lsof |grep /dev/sdc1
# 当挂载不掉时,用下面的命令 ,会得到进程号
# 特殊设备loop挂载(镜像文件不刻录就挂载使用)
mount -o loop /home/name/ubuntu-16.04-desktop-amd64.iso \
/hame/name/usb
#使用 dd 命令写入下载好的 ISO 镜像到 U 盘中
sudo dd if=xxxxx.iso of=/dev/sdc && sync
nautilus . # 默认是打开home目录

传统的磁盘管理问题:
当分区大小不够用时无法扩展其大小,只能通过添加硬盘,创建新分区来扩充空间,但是新添加进来的硬盘是作为独立文件系统存在的,原有的文件系统并未得到扩充,上层应用很多时候只能访问一个文件系统,只能让现有磁盘下线,换上新的磁盘之后,再将原始数据导入.

LVM逻辑卷管理(Logical volume Manager)

PE(physical extend)物理扩展:逻辑卷空间管理的最基本单位,默认是4M
PV(physica volume)物理卷:将底层磁盘格式化成物理卷,可以是物理硬盘上的分区,也可以是整块物理硬盘
VG(volume group)卷组:空间池是给来装PE的,我们可以将一个或多个PV,加入到VG当中,当创建好了VG会有/dev/vgname的目录
LV(logical volume)逻辑卷(操作系统最终使用的是逻辑卷格式化之后的数据)/dev/vgname/lvname的目录,每个的逻辑卷空间有可以来自不同的物理磁盘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
1. 创建PV
# 整块物理硬盘创建PV
sudo pvcreate /dev/sd[b-c]
# 物理硬盘上的分区创建PV
fdisk /dev/sdb1 使用t将分区类型改成8e(LVM)
partprobe # 刷新分区表
sudo pvcreate /dev/sdb1
sudo pvs # 查看创建好的PV
2. PV创建好了就可以创建VG了
sudo vgcreate vg0 /dev/sdb1
sudo vgs # 查看创建好的VG
sudo pvs # sdb1这个PV就属于vg0这个卷组池了
3. 创建好卷组池就能从池中划分容量给逻辑卷(LV)了
sudo lvcreate -n lv0 -L 10G vg0
# 从卷组vg0中拿出10G,分配给lv0,其中-n后面是lv自定义名称,
# -L后面跟需要从vg0中分配给lv0的大小以及从哪个VG分配
4. 创建好lv后就可以格式化它,成为文件系统使用
sudo mkfs.ext4 /dev/vg0/lv0
# 创建好的lv所在目录是"/dev/卷组名称/逻辑卷名称",
# 所以本例就是/dev/vg0/lv0,将它格式化成ext4文件系统
5. 挂载和使用
sudo mount /dev/vg0/lv0 /mnt
6. 扩充VG
sudo pvcreate /dev/sdd
#新增加一块硬盘sdd(20G),将它创建成PV后划分到vg0下,
# 此时vg0的容量将增加sdd硬盘的大小
sudo vgextend vg0 /dev/sdd
7. 扩充LV
sudo vgs # 先确保VG池中有足够的VFree空间可供使用
sudo lvextend -L +5G /dev/vg0/lv0
sudo resize2fs /dev/vg0/lv0 # 更新

安装和下载

源的选择

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ubuntu官方有自身的软件源,也可以通过software&update的设置中的other去选择Best server去选择源
# 会自动的改变/etc/apt/sources.list的内容
# 也就是说选择哪种源的服务器,再(proxychains4) apt-get update就可以了
# 这样通过也可以解决 哪些包是在本地不能使用的(不能使用的一般是自己手动加入的)
我选择的是Main server 软件包会比较全(国内的选择清华镜像)
# 修改DNS
sudo vim /etc/resolvconf/resolv.conf.d/base
sudo vim /etc/resolvconf/resolv.conf.d/head
nameserver 8.8.8.8
nameserver 8.8.4.4
sudo resolvconf -u
# 重启网络
sudo service networking restart
sudo rm -r /var/lib/apt/lists/
sudo proxychains4 apt-get update

apt-get

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# 更新源(更新本地软件包索引), 更新软件仓库:/etc/apt/sources.list
sudo apt-get -y update
# sudo apt-key update # 更新密钥
# 升级系统上可以升级的软件包
sudo apt-get -y upgrade
# 尝试修正系统依赖损坏处
sudo apt-get -f install # --fix-missing
# 安装软件包, apt-get会从软件仓库中下载deb软件安装包 再进行安装
sudo apt-get install chromium-browser
# 删除系统上的软件包,不包含配置文件
sudo apt-get remove firefox
# 删除系统上的软件包以及其相关配置
sudo apt-get purge firefox
# 清除下载的软件包
sudo apt-get clean
# 当apt-get安装或升级软件包时,它会将deb安装包下载到文件系统的/var/cache/apt/archives目录下
# apt-get clean命令可以帮你删除这些deb安装包
# 删除不需要的依赖软件包
apt-get autoremove
# 搜索软件包, 查看对应版本进行安装
apt-cache search chromium
# 查看软件包的信息
apt-cache show chromium-browser
# 检查是否有损坏的依赖
sudo apt-get check
# 通过 PPA 源来安装软件
# 查看系统版本
cat /etc/*release
sudo lsb_release -a
# 通过搜索软件包关键字 + PPA 或者在 https://launchpad.net/中搜索软件包(区分大小写)
# 使用命令安装(在标题栏显示内存、CPU、网速)
sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor
sudo apt update
sudo apt install indicator-sysmonitor
# indicator-sysmonitor & 启动
# 或者手动安装下载好的Deb软件包(当无法使用命令安装时)
# https://launchpad.net/ubuntu/artful/amd64/libaio1/0.3.110-4
sudo dpkg -i libaio1_0.3.110-4_amd64.deb
dpkg -L libaio1
# https://launchpad.net/ubuntu/artful/amd64/libmecab2/0.996-3.1 # libmecab2
sudo dpkg -i **.deb # 安装 查看-l
dpkg -l |grep minitube # 查看安装好的包
dpkg -L minitube # 查看是否安装
sudo dpkg --purge minitube
# gdebi可以帮助我们自动安装依赖包
# https://launchpad.net/ubuntu/artful/amd64/gdebi-core/0.9.5.7+nmu1ubuntu3
# https://launchpad.net/ubuntu/bionic/amd64/gdebi/0.9.5.7+nmu1ubuntu3
sudo dpkg -i gdebi-core_0.9.5.7+nmu1ubuntu3_all.deb
sudo dpkg -i gdebi_0.9.5.7+nmu1ubuntu3_all.deb
gdebi --version
sudo gdebi *.deb

apt-get的代理问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
### 使用 http 代理
apt-get -o Acquire::http::proxy="http://127.0.0.1:8087" update
### 使用 socket 代理, 使用 proxychains4
sudo vim /etc/apt/sources.list
deb http://linux-packages.resilio.com/resilio-sync/deb resilio-sync non-free
# 要关联google,还需要改变此文件并重启网络
sudo vim /etc/resolv.conf
nameserver 8.8.8.8
sudo service networking restart
# 加密钥
proxychains4 wget -qO - https://linux-packages.resilio.com/resilio-sync/key.asc | sudo apt-key add -
sudo proxychains4 apt-get update
sudo apt-get -f install
sudo proxychains4 apt-get install resilio-sync

其它方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
vim /proc/meminfo 文件来观察LINux系统上虚拟内存的当前状态.
curl https://wordpress.org/latest.tar.gz | tar -zxvf -
curl url/install.sh | sh
wget -O redis.tar.gz \
http://download.redis.io/releases/redis-3.2.0.tar.gz
tar -zxvf redis.tar.gz -C /usr/src
make -C /usr/src/redis \
&& make -C /usr/src/redis/src install
# tar解压重命名
mkdir ./jdk8 && tar -xzvf jdk8.tar.gz -C ./jdk8 --strip-components 1
wget https://ghost.org/zip/ghost-latest.zip
unzip -uo ghost-latest.zip -d /var/www/ghost
wget -qO- url/install.sh | sh
wget --no-check-certificate url/install.sh -O ./install.sh
curl -LOk https://ghost.org/zip/ghost-latest.zip
unzip ghost-latest.zip -d ghost-temp
curl http://localhost:8000/wrap?name=femn& get()
http://localhost:8000/wrap -d name=femn post()方法请求
# Siege对我们的应用在10秒内执行大约10个并发请求
siege http://localhost:8000/?q=pants -c10 -t10s

文件和目录操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
ll linux.md
# ll 查看的信息 第二列是链接数量
ll |grep -v linux.md # 取反
history | grep -c rar # 计算匹配的数量
touch file1 # 创建文件
file file1 # 查看文件类型
cp -Rf source destination
# -R 允许你通过命令递归地复制整个目录的内容.
# -f 强制覆盖已经存在的目标文件,不提示
# -l 硬链接,它们是同一个文件,索引节点是相同的
\cp -R dir1 dir2 # 同上
\cp -R content/themes/casper ../ghost/content/themes
rm -rf file1
tail -f -n 20 /etc/passwd
# 软连接可以不用事先创建目录,硬连接必须先创建目录
sudo ln -s /home/femn/file /usr/share/nginx/html/file
mkdir ~/file
# mv排除文件
# 将本路径下所有的文件移动到本路径下vimrc_config目录下,
# 但vimrc_config本身不动
mv !(vimrc_config) vimrc_config
# 但此命令不包括mv 隐藏文件
rm命令类似
sort -t ':' -k 3 -n /etc/passwd
# 按字段分隔数据,按分隔后的第几个进行排序
scp -r -P 22 root@ip:/server/app/main/handlers \
./main/handlers/
scp -P 22 ./1.txt python@ip:/usr/share/nginx/html/file/
# 只需要file目录有写权限,普通用户就可以用了
rsync -av -e "ssh -p 22" /home/python/app1.6/main/ \
root@ip:/server/app1.6/main/
rsync -av -e "ssh -p 22" /home/python/oldapp_8000/ \
root@ip:/server/app/main/
# 截图
#你将可以使用鼠标选取一个矩形框.在你放下鼠标左键的那一刻,
# 一个该矩形框的截屏会以import后面跟的文件名保存在当前目录下
import screenshot.jpg
gnome-screenshot -a
# 改变视频文件大小(分辨率)http://blog.topspeedsnail.com/archives/1699
ffmpeg -i source.mpg -s 960x540 -c:a copy destination.mp4
# Linux系统将每个对象当作文件来处理,这包括输入和输入的过程.Linux用文件描述符来标识每个文件对象.

解压缩

1
2
3
4
5
6
7
8
9
10
11
# tar
tar -zcvf /home/name/conclusion.tar.gz ./conclusion
tar -zxvf ./conclusion.tar.gz
tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩
# rar
rar x file.rar # 解压
# zip
zip test.zip test
unzip test.zip

环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
printenv # 查看所有全局环境变量
set # 会显示为某个特定进程设置的所有环境变量
# 设置PATH环境变量
vim ~/.profile
export JAVA_HOME=/home/name/jdk1.8.0_92
export ANT_HOME=/home/name/apache-ant-1.9.7
PATH=${PATH}:/home/name/jdk1.8.0_92/bin:/home/name/apache/bin
# 设置局部变量(只能在定义的进程可见)
femn='hello,my name is femn'
# 设置全局变量
export femn # 记住不要再用美元符($)
# 删除环境变量
unset femn

ubuntu ip

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 禁用IPV6
vim /etc/modprobe.d/blacklist.conf
#在文档最后添加 blacklist ipv6
# 设置一ip
sudo ifconfig enp0s3 192.168.1.101 netmask 255.255.255.0
sudo route add default gw 192.168.1.254
# 设置二ip
sudo vim /etc/network/interfaces
auto enp0s3
iface enp0s3 inet static # dhcp
address 192.168.1.101
gateway 192.168.1.254
netmask 255.255.255.0
#network 192.168.1.0
#broadcast 192.168.1.255
# 配置DNS
sudo vim/etc/resolv.conf
nameserver 127.0.1.1
# nameserver 8.8.8.8
search DHCP HOST
# 手动重启网络服务
sudo /etc/init.d/networking restart
#实在没有生效 reboot
# /etc/hosts:ip与域名的对应关系,DNS记录信息,
# /etc/hostname:存放的是主机名.域名与主机名没有任何关系
sudo hostname python-Vostro-3901 # 修改主机名 ubuntu
sudo hostnamectl set-hostname intl.aliyun.centos7
# 修改主机名 centos
# 永久修改主机名
vim /etc/hostname # ubuntu centos

centos7 ip

1
2
3
4
5
6
7
vim /etc/sysconfig/network-scripts/ifcfg-网卡名字
BOOTPROTO=static #dhcp改为static
ONBOOT=yes #开机启用本配置
IPADDR=192.168.1.107 #静态IP
GATEWAY=192.168.1.254 # 默认网关
NETMASK=255.255.255.0 #子网掩码
service network restart
查看开启端口
1
2
3
4
5
6
# 查看本机的端口开启情况
sudo nmap -sTU localhost
# 查看局域网的端口开启情况
sudo nmap -PS 192.168.1.222
# 查看远程服务器的端口开启情况
nc -zv 45.76.0.178 22 22334
Share Comments