原文地址:Ubuntu20.04安装与配置记录
下载Ubuntu系统,选择桌面版。
准备8G以上的U盘(会格式化U盘,请注意备份),插入电脑。
查看U盘信息。
sudo fdisk -l
查看四个分区的挂载情况。
mount
可以看到只有分区sda1
和sda4
被挂载了:
卸载设备sda
所有挂载的分区
# 命令格式:umount /dev/设备分区名
umount /dev/sda1
umount /dev/sda4
使用dd
命令将iso文件写入U盘
# if="iso文件路径"
# of="u盘设备号(不需要带分区号)"
# status=progress:显示周期性的传输统计信息
# 更多选项通过命令dd --help 查看
# 耐心等待,根据U盘读写速度以及iso文件大小,一般需要5~10分钟左右
sudo dd if=./Downloads/ubuntu-20.04.4-desktop-amd64.iso of=/dev/sda status=progress
分区挂载点 | 分区属性 | 分配空间 |
---|---|---|
efi系统分区 |
主分区 | 1024MB |
/boot |
主分区 | 1024MB |
sawp |
主分区 | 依内存大小而定,建议4GB以上。博主电脑内存16GB,故设置了16GB大小。 |
/ |
逻辑分区 | 依照硬盘空间而定,建议32GB以上。博主设置了256GB。 |
/home |
逻辑分区 | 设置完上面的分区后,剩下的空间留给该分区。 |
# 因为很多设置都是在终端进行的,所以先进行设置后面会比较舒服
echo "set completion-ignore-case on" >> ~/.inputrc
备份原来的源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
打开/etc/apt/sources.list
文件,更改为阿里源
# 可以将vim更换为自己熟悉的编辑器
sudo vi /etc/apt/sources.list
# 将文件内容更换为如下阿里源
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
更新源
# 更新源
sudo apt update
# 更新软件
sudo apt upgrade -y
# 自动卸载不需要的软件
sudo apt autoremove -y
由于安装ubuntu的时候,语言选择改成了中文,于是家目录下的各文件夹也是中文命名,不方便在终端操作,建议改成英文。当然也可以在安装的时候选择英文安装,这样就不用修改了,不过需要适应英文操作环境。
打开配置文件
vi .config/user-dirs.dirs
# 或者
vi .config/user.dirs
将配置文件中相应的中文部分修改成英文
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Videos"
修改文件系统中相应的文件名为英文,重启电脑
KeePassXC
是一个免费的开源密码管理器。各位按需下载安装。
添加PPA
sudo add-apt-repository ppa:phoerious/keepassxc
sudo apt update
安装
sudo apt install keepassxc
坚果云是一个网盘软件,提供跨平台的文件同步、备份、分享服务。因为博主的很多文件都是存储在坚果云上面的,所以先安装坚果云。各位按需下载安装。
坚果云有两种安装方式:通过deb包安装和源码编译安装。通过deb包安装比较方便快捷,但是有时候会出现安装之后无法启动的情况,所以可以卸载deb包安装的坚果云,再源码编译自定义安装。
官网下载坚果云安装包
下载包管理工具gdebi
sudo apt install gdebi
使用包管理工具gdebi
安装
# gdebi可以自动安装所需依赖
sudo gdebi nautilus_nutstore_amd64.deb
安装后如果无法启动,可以选择源码编译安装。在此之前先卸载之前安装的deb包,以下是官网给的卸载教程。
# 官网帮助给出的卸载方法
rm ~/.config/autostart/nutstore-daemon.desktop
rm ~/.local/share/applications/nutstore-menu.desktop
rm ~/.local/share/icons/hicolor/64x64/apps/nutstore.png
gtk-update-icon-cache --ignore-theme-index "~/.local/share/icons/hicolor" > /dev/null 2>&1
rm -r ~/.nutstore/dist
sudo apt remove nautilus-nutstore-public
安装依赖
sudo apt-get install libglib2.0-dev libgtk2.0-dev libnautilus-extension-dev gvfs-bin python3-gi gir1.2-appindicator3-0.1
下载Nautilus
插件源代码包: nutstore_linux_src_installer.tar.gz
wget https://www.jianguoyun.com/static/exe/installer/nutstore_linux_src_installer.tar.gz
解压缩,编译和安装Nautilus
插件
# 解压缩
tar zxf nutstore_linux_src_installer.tar.gz
sudo mv nutstore_linux_src_installer /usr/local/src/
cd /usr/local/src/nutstore_linux_src_installer
# 编译(指定了安装位置/usr/local/Nautilus)
sudo mkdir /usr/local/Nutstore
sudo ./configure --prefix=/usr/local/Nutstore && sudo make
# 安装并记录'make install'的所有输出日志到本目录下的make.log文件。然后在日志里能够看得到到底安装了那些文件到那些位置,通常会使用'cp'或者'install'命令拷贝文件
sudo make install 2>&1 | sudo tee make.log
重启Nautilus
nautilus -q
运行以下命令,自动下载和安装坚果云其他二进制组件
./runtime_bootstrap
安装详情见原文
下载谷歌浏览器需要魔法,这也是为什么先装某应用
的原因。
下载Chrome浏览器的deb包,可以去Chrome官网下载,也可以使用wget
命令下载
mkdir ~/chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -P ~/chrome/
安装Chrome浏览器
sudo gdebi ~/chrome/google-chrome-stable_current_amd64.deb
rm -rf ~/chrome
搜狗输入法是Ubuntu平台比较好用的输入法,使用体验比默认的输入法好很多。搜狗输入法在更新为版本3.4.0之后,安装方法也有所改变,以下是版本3.4.0及以上版本的安装方法。
更新软件源
sudo apt update
安装fcitx输入法框架并进行配置
安装fcitx
sudo apt install fcitx
设置fcitx
为系统输入法
到设置页面:设置->区域与语言->管理已安装的语言
更改键盘输入法系统
为fcitx4
点击应用到整个系统
设置fcitx
开机自启动
sudo cp /usr/share/applications/fcitx.desktop /etc/xdg/autostart/
安装搜狗输入法
去官网法deb包
sudo gdebi 下载的deb包
安装输入法依赖
sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-module-qtquick2
sudo apt install libgsettings-qt1
重启电脑并配置输入法
Ubuntu20.04默认的Vim是8.0版本的,无法安装自动补全插件YouCompleteMe,所有卸载Vim8.0并源码编译安装Vim8.2,当然如果不需要安装YCM插件,也可以使用系统默认的Vim8.0。
安装依赖
sudo apt install libncurses5-dev libgtk2.0-dev libatk1.0-dev libcairo2-dev python-dev python3-dev git
sudo apt-get build-dep vim
卸载旧版本
# 卸载系统默认的vim,善用Tab自动补齐功能
sudo apt purge vim-common vim-tiny
源码下载
# 下载源码
wget https://ftp.nluug.nl/pub/vim/unix/vim-8.2.tar.bz2
tar -jxvf vim-8.2.tar.bz2
# 源码路径
sudo mv vim82 /usr/local/src/
cd /usr/local/src/vim82/src/
配置
# 安装路径
sudo mkdir /usr/local/Vim82
# 设置参数 其中--with-python3-config-dir=/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/ 路径根据Python3版本和路径决定(善用Tab键)(--with-x表示支持系统剪贴板)
# 安装路径为/usr/local/Vim82/下
./configure --prefix=/usr/local/Vim82/ --with-features=huge --enable-multibyte --enable-python3interp=yes --with-python3-config-dir=/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/ --enable-gui=auto --enable-cscope --with-x
常见参数含义(可以使用命令./configure --help
查看):
参数 | 含义 |
---|---|
--with-features=huge |
支持最大特性 |
--enable-rubyinterp |
打开对ruby编写的插件的支持 |
--enable-pythoninterp |
打开对python编写的插件的支持 |
--enable-python3interp |
打开对python3编写的插件的支持 |
--enable-luainterp |
打开对lua编写的插件的支持 |
--enable-perlinterp |
打开对perl编写的插件的支持 |
--enable-multibyte |
打开多字节支持,可以在Vim中输入中文 |
--enable-cscope |
打开对cscope的支持 |
--enable-fontset |
字体设置 |
--with-python-config-dir=/usr/lib64/python2.7/config |
指定python2路径(根据自己系统路径修改) |
--with-python3-config-dir=/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/ |
指定python3路径(根据自己系统路径修改) |
--prefix=/usr/local/Vim82 |
指定将要安装到的路径 |
编译安装
sudo make VIMRUNTIMEDIR=/usr/local/Vim82/share/vim/vim82
# 安装并记录'make install'的所有输出日志到本目录下的make.log文件。然后在日志里能够看得到到底安装了那些文件到那些位置,通常会使用'cp'或者'install'命令拷贝文件
sudo make install 2>&1 | sudo tee make.log
设置Vim为默认编译器
# 将editor设置为vim82
sudo update-alternatives --install /usr/bin/editor editor /usr/local/Vim82/bin/vim 1
sudo update-alternatives --set editor /usr/local/Vim82/bin/vim
# 将vi设置为vim82
sudo update-alternatives --install /usr/bin/vi vi /usr/local/Vim82/bin/vim 1
sudo update-alternatives --set vi /usr/local/Vim82/bin/vim
# 将vim设置为vim82
sudo update-alternatives --install /usr/bin/vim vim /usr/local/Vim82/bin/vim 1
sudo update-alternatives --set vim /usr/local/Vim82/bin/vim
验证
# 或者editor --version 或 vi --version
vim --version
安装插件管理器vim-plug
# github上的安装方法
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
使用vim-plug
管理插件的方法
安装插件方法
在配置文件~/.vimrc
中添加如下字段
call plug#begin()
call plug#end()
将需要安装的插件的安装代码(去插件主页中找,比较著名的vim插件网站VimAwesome)写在其中并保存,以The NERD tree
为例:
# 其中`Plug 'scrooloose/nerdtree'可以在The NERD tree主页找到
call plug#begin()
Plug 'scrooloose/nerdtree'
call plug#end()
打开Vim,在命令模式中输入以下命令,等待安装完成。
PlugInstall
删除插件方法
在配置文件中的call plug#begin()
和call plug#end()
字段中找到插件相应的代码,注释或删除该代码,保存。
打开Vim,在命令行模式中输入以下代码,等待删除完成。
PlugClean
安装依赖
# 编译 YouCompleteMe 插件时需要依赖 cmake 构建 Makefile,且依赖 Python 源码头文件
# clang 是一个面向 C 族语言(C-family languages)的轻量级编译器,YouCompleteMe 插件依赖 clang 实现对 C 族语言的语义补全
sudo apt-get install build-essential cmake python-dev python3-dev clang
下载YCM源码(建议使用魔法,以前失败很多次都是因为源码下不完整,后来使用魔法就没什么问题了)
在vim配置文件.vimrc中vim-plug字段中添加Plug 'valloric/youcompleteme'
,并保存退出。
打开Vim,进入命令模式,输入命令PlugInstall
,等待安装完成后退出vim。
更新子模块
# 进入插件安装目录
cd ~/.vim/plugged/youcompleteme/
# 更新子模块
git submodule update --init --recursive
编译YCM
经过上面几个步骤还不能使用YCM,打开vim会显示:
The ycmd server SHUT DOWN (restart with ‘:YcmRestartServer’). YCM core library not detected; you need to compile YCM before using it. Follow the instructions in the documentation
。
这是因为,YouCompleteMe
需要手工编译出库文件ycm_core.so
(以及依赖的libclang.so
) 才可使用。
# 进入源码目录
cd ~/.vim/plugged/youcompleteme/
# 编译具有C族语言的语义补全功能的 YouCompleteMe 插件
./install.py --clang-completer
配置YCM
编译完成之后还 是不能用,显示:
NoExtraConfDetected: No .ycm_extra_conf.py file detected......
显示找不到文件.ycm_extra_conf.py
,其实这个文件就在目录~/.vim/plugged/youcompleteme/third_party/ycmd
下。
在vim
配置文件~/.vimrc
中指定该文件的位置,在~/.vimrc
中添加:
let g:ycm_global_ycm_extra_conf = '~/.vim/plugged/youcompleteme/third_party/ycmd/.ycm_extra_conf.py'
修改YCM配置文件.ycm_extra_conf.py
中的内容。根据自己系统在flags
字段中添加一些头文件路径,以下是博主自己添加的部分,各位可以根据自己系统的路径自行修改。
#_自己添加的部分
'-isystem',
'/usr/include/c++/11',
'-isystem',
'/usr/include/x86_64-linux-gnu',
'-isystem',
'/usr/include/x86_64-linux-gnu/c++/11',
'-isystem',
'/usr/include',
YouCompleteMe 踩坑记
YouCompleteMe 中容易忽略的配置
安装Terminator
sudo apt install terminator
将Terminator
设置为默认终端(重启终端后查看效果)
# 设置为默认终端方法
# 但是在文件管理器右键选择`在终端打开`时会唤起原来的终端
gsettings set org.gnome.desktop.default-applications.terminal exec /usr/bin/terminator
gsettings set org.gnome.desktop.default-applications.terminal exec-arg "-x"
# 换回默认配置的命令
gsettings reset org.gnome.desktop.default-applications.terminal
安装zsh
# 查看系统安装的shell,如果没有zsh,下面将介绍安装命令
cat /etc/shells
# 查看系统默认的shell,一般是bash
echo $SHELL
# 如果没有安装zsh,通过以下命令安装
sudo apt update
sudo apt install -y zsh
将zsh
设置为默认shell
(重启终端后查看效果)
chsh -s /bin/zsh
安装Oh My Zsh
# 安装Oh-My-Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 有的主题必须使用powerline字体,通过以下命令安装
sudo apt install powerline fonts-powerline
设置主题
打开配置文件~/.zshrc
,通过ZSH_THEME
字段设置主题
# zsh配置文件是~/.zshrc,每次打开shell都会执行~/.zshrc中命令。
# Oh My Zsh默认安装了很多主题,位于目录`~/.oh-my-zsh/themes`下。配置文件`.zshrc`中的`ZSH_THEME`字段用于设置主题,可以根据自己喜好设置。
ZSH_THEME="geoffgarside"
命令行执行以下命令使设置生效,查看主题效果。也可以官网查看
# 使配置文件生效查看主题效果。也可以去Oh My Zsh查看主题样式。
source ~/.zshrc
安装插件
配置文件设置方法
# 配置文件中的`plugins`字段设置安装的插件
plugins=(
插件1
插件2
...
)
推荐插件
语法高亮:zsh-syntax-highlighting
配置文件~/.zshrc
的plugins
字段中添加zsh-syntax-highlighting
# 打开配置文件,在`plugins`字段中添加`zsh-syntax-highlighting`
plugins=(
zsh-syntax-highlighting
)
下载安装
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
命令补全:zsh-autosuggestions
配置文件~/.zshrc
的plugins
字段中添加zsh-autosuggestions
plugins=(
zsh-syntax-highlighting
zsh-autosuggestions
)
下载安装
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
去官网下载最新的deb包
安装
sudo gdebi deb包名
下载缺失的字体
解压字体文件并移动到系统字体目录
unzip wps_symbol_fonts.zip -d ./wps
sudo mv wps/* /usr/share/fonts/wps-office/
生成字体索引信息
sudo mkfontscale
sudo mkfontdir
更新字体缓存
sudo fc-cache
重启WPS即可
Syncthing
是一款开源免费跨平台的文件同步工具,是基于P2P技术实现设备间的文件同步,所以它的同步是去中心化的,即你并不需要一个服务器,故不需要担心这个中心的服务器给你带来的种种限制。
下载syncthing源码,建议下载Latest release
版本,不要下Pre-release
版本。
安装
# 解压
tar -zxvf syncthing-linux-amd64-*.tar.gz
rm syncthing-linux-amd64-*.tar.gz -rf
# 移动位置
sudo mv ./syncthing-linux-amd64-*/ /usr/local/syncthing
# 创建软连接,然后就可以通过`syncthing`命令运行`syncthing`程序了
sudo ln -s -T /usr/local/syncthing/syncthing /usr/local/bin/syncthing
启动syncthing
,生成配置文件
# 第一次启动syncthing会在当前用户的用户目录下生成配置文件`~/.config/syncthing/config.xml`
syncthing
修改配置文件
# Ctrl + C终止程序,修改配置文件
vim ~/.config/syncthing/config.xml
# 将配置文件中的:127.0.0.1:8384修改为0.0.0.0:8384,保存退出
设置开机自启
syncthing
默认的命令行启动方式会一直占用着终端进行输出,如果使用nohup
把syncthing
放到后台又不方便管理,一个比较好的解决办法是让systemd
接管,systemd
是Linux的守护进程,是启动系统时第一个运行的进程,也是关机时最后一个结束的进程,让systemd
接管也可以让syncthing
实现开机自启。
新建一个文件
sudo vim /usr/lib/systemd/system/[email protected]
文件中添加以下内容,保存退出:
[Unit]
Description=Syncthing - Open Source Continuous File Synchronization for %I
Documentation=man:syncthing(1)
After=network.target
[Service]
User=%i
ExecStart=/usr/local/bin/syncthing -no-browser -no-restart -logflags=0
Restart=on-failure
SuccessExitStatus=3 4
RestartForceExitStatus=3 4
[Install]
WantedBy=multi-user.target
设置开机自启(注意把命令里面的guoke-master
替换成自己的用户名)
# 启动syncthing
systemctl start [email protected]
# 设置syncthing开机自启
systemctl enable [email protected]
# 其他命令:
# 查看syncthing运行状态
systemctl status [email protected]
# 停止syncthing
systemctl stop [email protected]
# 关闭syncthing开机自启
systemctl disable [email protected]
# 重新启动syncthing服务
systemctl restart [email protected]
版本更新
如果syncthing
有新版本的话,WebUI是会提示的,不过除非是以root
用户运行,否则通过网页版是升级不成功的,因为权限不够,这个时候要么就是下载syncthing
的二进制文件,然后手动复制过去,要么就通过终端使用命令行升级。
sudo syncthing --upgrade
Thunderbird
是Ubuntu20.04自带的一个邮件客户端,但是无法最小化应用到系统推盘。所以可以通过Birdtray
这个应用来将其最小化到系统托盘。除此之外,还需要Thunderbird
客户端的插件Minimize on Close
配合,该插件将Thunderbird
的关闭按钮映射为最小化功能,Birdtray
将最小化的Thunderbird
放到系统托盘。
添加ppa
sudo add-apt-repository ppa:ubuntu-mozilla-security/ppa
sudo apt-get update
安装
sudo apt-get install thunderbird
安装
sudo apt install birdtray
BT客户端两个选择,一个是Transmission
,另一个是qBittorrent
。以前用Transmission
,现在使用qBittorrent
,不过两个都是很不错的BT客户端,所以这里记录了两个客户端的安装方法。
# 添加官方源
sudo add-apt-repository ppa:transmissionbt/ppa
sudo apt-get update
# 安装
sudo apt install transmission-gtk
sudo apt install qbittorrent
安装依赖
sudo apt install build-essential linux-headers-generic
官网下载软件
添加执行权限并执行安装
chmod +x VMware-Player-Full-16.2.0-18760230.x86_64.bundle
sudo ./VMware-Player-Full-16.2.0-18760230.x86_64.bundle
卸载命令
sudo /usr/bin/vmware-installer -u vmware-player
添加仓库
首次使用时,你需要运行如下一条命令将移植仓库添加到系统中。
wget -O- https://deepin-wine.i-m.dev/setup.sh | sh
应用安装
自此以后,你可以像对待普通的软件包一样,使用apt-get
系列命令进行各种应用安装、更新和卸载清理了。
例如,安装微信:
sudo apt-get install com.qq.weixin.deepin
应用完整列表参见https://deepin-wine.i-m.dev/
安装Gnome
个性化工具
# 可以通过这个应用来设置一些选项和管理Gnome Shell插件
sudo apt install gnome-tweaks
安装浏览器插件
安装网页与本地扩展的联系工具
# 安装这个插件和浏览器插件之后可以在网页端直接安装Gnome Shell插件
sudo apt install chrome-gnome-shell
User Themes:想给gnome换主题就必须安装这个插件
Vitals:在顶栏显示内存、负载、CPU 使用率等信息
Net Speed:在顶栏显示网速
Clipboard Indicator:显示复制粘贴的历史,还可以永久保存某次复制历史
Dash to Dock:将gnome左侧的dock变成类似于MacOS的dock
这个插件和Ubuntu20.04默认安装的gnome-shell-extension-ubuntu-dock
功能重叠,但是gnome-shell-extension-ubuntu-dock
自定义程度不高,所以如果要安装这个插件,可以把gnome-shell-extension-ubuntu-dock
卸载
sudo apt purge gnome-shell-extension-ubuntu-dock
Dash to dock
设置为透明后,存在多余边框,下面命令可以去除
sed -ri 's/(border\:)1px/\10px/' ~/.local/share/gnome-shell/extensions/[email protected]/stylesheet.css
Unite:可对顶栏自定义,例如添加当前窗口的标题或最大最小化按钮,也可以去除标题栏
Dynamic Panel Transparency:顶栏透明插件,可以设置只有桌面的顶栏透明
Fullscreen Notifications:全屏时仍可弹出系统通知
Simpler Off Menu:可以自定义顶栏的设置菜单
Top Panel Workspace Scroll:在顶栏滚动鼠标就可以切换工作区
Hide Frequent View:在应用列表中隐藏“常用”标签页
BigAvatar:在顶栏的设置菜单中显示自己的头像
Screenshot tool:截图工具
# 安装依赖
sudo apt install libglib2.0-dev-bin
# 下载工具
wget github.com/thiggy01/change-gdm-background/raw/master/change-gdm-background
# 添加执行权限
chmod +x change-gdm-background
# 更换壁纸,后面改成壁纸路径
sudo ./change-gdm-background /path/to/image
# 不想使用壁纸了, 随时可以恢复成GDM原来的主题样式
sudo ./change-gdm-background --restore
deb包形式
以下这些软件直接使用sudo gdebi deb文件
形式安装即可。
Ubuntu软件仓库
以下这些软件直接使用sudo apt install -y 软件名
形式命令安装即可。
vlc
:开源的视频播放器p7zip-full
:用于压缩和解压 7z 压缩包rar
:用于压缩和解压 rar 压缩包variety
:壁纸下载器和管理器translate-shell
:命令行翻译程序telegram-desktop
:社交通讯软件fbterm
:让 tty 显示中文krita
:免费开源的绘画软件,可以用来替代Photoshop