From 5a5cf05e2e5368faf7a77ed492434dc004052f8c Mon Sep 17 00:00:00 2001 From: darksun Date: Tue, 19 Mar 2019 10:00:49 +0800 Subject: [PATCH 001/128] =?UTF-8?q?=E9=80=89=E9=A2=98:=2020190318=20How=20?= =?UTF-8?q?to=20host=20your=20own=20webfonts=20sources/tech/20190318=20How?= =?UTF-8?q?=20to=20host=20your=20own=20webfonts.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20190318 How to host your own webfonts.md | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 sources/tech/20190318 How to host your own webfonts.md diff --git a/sources/tech/20190318 How to host your own webfonts.md b/sources/tech/20190318 How to host your own webfonts.md new file mode 100644 index 0000000000..78fba8389d --- /dev/null +++ b/sources/tech/20190318 How to host your own webfonts.md @@ -0,0 +1,107 @@ +[#]: collector: (lujun9972) +[#]: translator: ( ) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (How to host your own webfonts) +[#]: via: (https://opensource.com/article/19/3/webfonts) +[#]: author: (Seth Kenlon (Red Hat, Community Moderator) https://opensource.com/users/seth) + +How to host your own webfonts +====== + +### Customize your website by self-hosting openly licensed fonts. + +![Open source fonts][1] + +Fonts are often a mystery to many computer users. For example, have you designed a cool flyer and, when you take the file somewhere for printing, find all the titles rendered in Arial because the printer doesn't have the fancy font you used in your design? There are ways to prevent this, of course: you can convert words in special fonts into paths, bundle fonts into a PDF, bundle open source fonts with your design files, or—at least—list the fonts required. And yet it's still a problem because we're human and we're forgetful. + +The web has the same sort of problem. If you have even a basic understanding of CSS, you've probably seen this kind of declaration: + +``` +h1 { font-family: "Times New Roman", Times, serif; } +``` + +This is a designer's attempt to define a specific font, provide a fallback if a user doesn't have Times New Roman installed, and offer yet another fallback if the user doesn't have Times either. It's better than using a graphic instead of text, but it's still an awkward, inelegant method of font non-management, However, in the early-ish days of the web, it's all we had to work with. + +### Webfonts + +Then webfonts happened, moving font management from the client to the server. Fonts on websites were rendered for the client by the server, rather than requiring the web browser to find a font on the user's system. Google and other providers even host openly licensed fonts, which designers can include on their sites with a simple CSS rule. + +The problem with this free convenience, of course, is that it doesn't come without cost. It's $0 to use, but major sites like Google love to keep track of who references their data, fonts included. If you don't see a need to assist Google in building a record of everyone's activity on the web, the good news is you can host your own webfonts, and it's as simple as uploading fonts to your host and using one easy CSS rule. As a side benefit, your site may load faster, as you'll be making one fewer external call upon loading each page. + +### Self-hosted webfonts + +The first thing you need is an openly licensed font. This can be confusing if you're not used to thinking or caring about obscure software licenses, especially since it seems like all fonts are free. Very few of us have consciously paid for a font, and yet most people have high-priced fonts on their computers. Thanks to licensing deals, your computer may have shipped with fonts that [you aren't legally allowed to copy and redistribute][2]. Fonts like Arial, Verdana, Calibri, Georgia, Impact, Lucida and Lucida Grande, Times and Times New Roman, Trebuchet, Geneva, and many others are owned by Microsoft, Apple, and Adobe. If you purchased a computer preloaded with Windows or MacOS, you paid for the right to use the bundled fonts, but you don't own those fonts and are not permitted to upload them to a web server (unless otherwise stated). + +Fortunately, the open source craze hit the font world long ago, and there are excellent collections of openly licensed fonts from collectives and projects like [The League of Moveable Type][3], [Font Library][4], [Omnibus Type][5], and even [Google][6] and [Adobe][7]. + +You can use most common font file formats, including TTF, OTF, WOFF, EOT, and so on. Since Sorts Mill Goudy includes a WOFF (Web Open Font Format, developed in part by Mozilla) version, I'll use it in this example. However, other formats work the same way. + +Assuming you want to use [Sorts Mill Goudy][8] on your web page: + + 1. Upload the **GoudyStM-webfont.woff** file to your web server: + +``` +scp GoudyStM-webfont.woff seth@example.com:~/www/fonts/ +``` + +Your host may also provide a graphical upload tool through cPanel or a similar web control panel. + + + + 2. In your site's CSS file, add an **@font-face** rule, similar to this: + + +``` +@font-face { +  font-family: "titlefont"; +  src: url("../fonts/GoudyStM-webfont.woff"); +} +``` + +The **font-family** value is something you make up. It's a human-friendly name for whatever the font face represents. I am using "titlefont" in this example because I imagine this font will be used for the main titles on an imaginary site. You could just as easily use "officialfont" or "myfont." + +The **src** value is the path to the font file. The path to the font must be appropriate for your server's file structure; in this example, I have the **fonts** directory alongside a **css** directory. You may not have your site structured that way, so adjust the paths as needed, remembering that a single dot means _this folder_ and two dots mean _a folder back_. + + + + 3. Now that you've defined the font face name and the location, you can call it for any given CSS class or ID you desire. For example, if you want **< h1>** to render in the Sorts Mill Goudy font, then make its CSS rule use your custom font name: + +``` +h1 { font-family: "titlefont", serif; } +``` + + + + +You're now hosting and using your own fonts. + + +![Web fonts on a website][10] + +_Thanks to Alexandra Kanik for teaching me about @font-face and most everything else I know about good web design._ + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/19/3/webfonts + +作者:[Seth Kenlon (Red Hat, Community Moderator)][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/life_typography_fonts.png?itok=Q1jMys5G (Open source fonts) +[2]: https://docs.microsoft.com/en-us/typography/fonts/font-faq +[3]: https://www.theleagueofmoveabletype.com/ +[4]: https://fontlibrary.org/ +[5]: https://www.omnibus-type.com +[6]: https://github.com/googlefonts +[7]: https://github.com/adobe-fonts +[8]: https://www.theleagueofmoveabletype.com/sorts-mill-goudy +[9]: /file/426056 +[10]: https://opensource.com/sites/default/files/uploads/webfont.jpg (Web fonts on a website) From a5df1edc9f7fa9d5ecb324fec1748316e0faa7e9 Mon Sep 17 00:00:00 2001 From: darksun Date: Tue, 19 Mar 2019 10:13:30 +0800 Subject: [PATCH 002/128] =?UTF-8?q?=E9=80=89=E9=A2=98:=2020190318=20Buildi?= =?UTF-8?q?ng=20and=20augmenting=20libraries=20by=20calling=20Rust=20from?= =?UTF-8?q?=20JavaScript=20sources/tech/20190318=20Building=20and=20augmen?= =?UTF-8?q?ting=20libraries=20by=20calling=20Rust=20from=20JavaScript.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...braries by calling Rust from JavaScript.md | 176 ++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 sources/tech/20190318 Building and augmenting libraries by calling Rust from JavaScript.md diff --git a/sources/tech/20190318 Building and augmenting libraries by calling Rust from JavaScript.md b/sources/tech/20190318 Building and augmenting libraries by calling Rust from JavaScript.md new file mode 100644 index 0000000000..935f8eded5 --- /dev/null +++ b/sources/tech/20190318 Building and augmenting libraries by calling Rust from JavaScript.md @@ -0,0 +1,176 @@ +[#]: collector: (lujun9972) +[#]: translator: ( ) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (Building and augmenting libraries by calling Rust from JavaScript) +[#]: via: (https://opensource.com/article/19/3/calling-rust-javascript) +[#]: author: (Ryan Levick https://opensource.com/users/ryanlevick) + +Building and augmenting libraries by calling Rust from JavaScript +====== + +Explore how to use WebAssembly (Wasm) to embed Rust inside JavaScript. + +![JavaScript in Vim][1] + +In _[Why should you use Rust in WebAssembly?][2]_ , I looked at why you might want to write WebAssembly (Wasm), and why you might choose Rust as the language to do it in. Now I'll share what that looks like by exploring ways to embed Rust inside JavaScript. + +This is something that separates Rust from Go, C#, and other languages with large runtimes that can compile to Wasm. Rust has a minimal runtime (basically just an allocator), making it easy to use Rust from JavaScript libraries. C and C++ have similar stories, but what sets Rust apart is its tooling, which we'll take a look at now. + +### The basics + +If you've never used Rust before, you'll first want to get that set up. It's pretty easy. First download [**Rustup**][3], which is a way to control versions of Rust and different toolchains for cross-compilation. This will give you access to [**Cargo**][4], which is the Rust build tool and package manager. + +Now we have a decision to make. We can easily write Rust code that runs in the browser through WebAssembly, but if we want to do anything other than make people's CPU fans spin, we'll probably at some point want to interact with the Document Object Model (DOM) or use some JavaScript API. In other words: _we need JavaScript interop_ (aka the JavaScript interoperability API). + +### The problem and the solutions + +WebAssembly is an extremely simple machine language. If we want to be able to communicate with JavaScript, Wasm gives us only four data types to do it with: 32- and 64-bit floats and integers. Wasm doesn't have a concept of strings, arrays, objects, or any other rich data type. Basically, we can only pass around pointers between Rust and JavaScript. Needless to say, this is less than ideal. + +The good news is there are two libraries that facilitate communication between Rust-based Wasm and JavaScript: [**wasm-bindgen**][5] and [**stdweb**][6]. The bad news, however, is these two libraries are unfortunately incompatible with each other. **wasm-bindgen** is lower-level than **stdweb** and attempts to provide full control over how JavaScript and Rust interact. In fact, there is even talk of [rewriting **stdweb** using **wasm-bindgen**][7], which would get rid of the issue of incompatibility. + +Because **wasm-bindgen** is the lighter-weight option (and the option officially worked on by the official [Rust WebAssembly working group][8]), we'll focus at that. + +### wasm-bindgen and wasm-pack + +We're going to create a function that takes a string from JavaScript, makes it uppercase and prepends "HELLO, " to it, and returns it back to JavaScript. We'll call this function **excited_greeting**! + +First, let's create our Rust library that will house this fabulous function: + +``` +$ cargo new my-wasm-library --lib +$ cd my-wasm-library +``` + +Now we'll want to replace the contents of **src/lib.rs** with our exciting logic. I think it's best to write the code out instead of copy/pasting. + +``` +// Include the `wasm_bindgen` attribute into the current namespace. +use wasm_bindgen::prelude::wasm_bindgen; + +// This attribute makes calling Rust from JavaScript possible. +// It generates code that can convert the basic types wasm understands +// (integers and floats) into more complex types like strings and +// vice versa. If you're interested in how this works, check this out: +// +#[wasm_bindgen] +// This is pretty plain Rust code. If you've written Rust before this +// should look extremely familiar. If not, why wait?! Check this out: +// +pub fn excited_greeting(original: &str) -> String { +format!("HELLO, {}", original.to_uppercase()) +} +``` + +Second, we'll have to make two changes to our **Cargo.toml** configuration file: + + * Add **wasm_bindgen** as a dependency. + * Configure the type of library binary to be a **cdylib** or dynamic system library. In this case, our system is **wasm** , and setting this option is how we produce **.wasm** binary files. + + +``` +[package] +name = "my-wasm-library" +version = "0.1.0" +authors = ["$YOUR_INFO"] +edition = "2018" + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +wasm-bindgen = "0.2.33" +``` + +Now let's build! If we just use **cargo build** , we'll get a **.wasm** binary, but in order to make it easy to call our Rust code from JavaScript, we'd like to have some JavaScript code that converts rich JavaScript types like strings and objects to pointers and passes these pointers to the Wasm module on our behalf. Doing this manually is tedious and prone to bugs. + +Luckily, in addition to being a library, **wasm-bindgen** also has the ability to create this "glue" JavaScript for us. This means in our code we can interact with our Wasm module using normal JavaScript types, and the generated code from **wasm-bindgen** will do the dirty work of converting these rich types into the pointer types that Wasm actually understands. + +We can use the awesome **wasm-pack** to build our Wasm binary, invoke the **wasm-bindgen** CLI tool, and package all of our JavaScript (and any optional generated TypeScript types) into one nice and neat package. Let's do that now! + +First we'll need to install **wasm-pack** : + +``` +$ cargo install wasm-pack +``` + +By default, **wasm-bindgen** produces ES6 modules. We'll use our code from a simple script tag, so we just want it to produce a plain old JavaScript object that gives us access to our Wasm functions. To do this, we'll pass it the **\--target no-modules** option. + +``` +$ wasm-pack build --target no-modules +``` + +We now have a **pkg** directory in our project. If we look at the contents, we'll see the following: + + * **package.json** : useful if we want to package this up as an NPM module + * **my_wasm_library_bg.wasm** : our actual Wasm code + * **my_wasm_library.js** : the JavaScript "glue" code + * Some TypeScript definition files + + + +Now we can create an **index.html** file that will make use of our JavaScript and Wasm: + +``` +<[html][9]> +<[head][10]> +<[meta][11] content="text/html;charset=utf-8" http-equiv="Content-Type" /> + +<[body][12]> + +<[script][13] src='./pkg/my_wasm_library.js'> + +<[script][13]> +window.addEventListener('load', async () => { +// Load the wasm file +await wasm_bindgen('./pkg/my_wasm_library_bg.wasm'); +// Once it's loaded the `wasm_bindgen` object is populated +// with the functions defined in our Rust code +const greeting = wasm_bindgen.excited_greeting("Ryan") +console.log(greeting) +}); + + + +``` + +You may be tempted to open the HTML file in your browser, but unfortunately, this is not possible. For security reasons, Wasm files have to be served from the same domain as the HTML file. You'll need an HTTP server. If you have a favorite static HTTP server that can serve files from your filesystem, feel free to use that. I like to use [**basic-http-server**][14], which you can install and run like so: + +``` +$ cargo install basic-http-server +$ basic-http-server +``` + +Now open the **index.html** file through the web server by going to **** and check your JavaScript console. You should see a very exciting greeting there! + +If you have any questions, please [let me know][15]. Next time, we'll take a look at how we can use various browser and JavaScript APIs from within our Rust code. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/19/3/calling-rust-javascript + +作者:[Ryan Levick][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/ryanlevick +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/javascript_vim.jpg?itok=mqkAeakO (JavaScript in Vim) +[2]: https://opensource.com/article/19/2/why-use-rust-webassembly +[3]: https://rustup.rs/ +[4]: https://doc.rust-lang.org/cargo/ +[5]: https://github.com/rustwasm/wasm-bindgen +[6]: https://github.com/koute/stdweb +[7]: https://github.com/koute/stdweb/issues/318 +[8]: https://www.rust-lang.org/governance/wgs/wasm +[9]: http://december.com/html/4/element/html.html +[10]: http://december.com/html/4/element/head.html +[11]: http://december.com/html/4/element/meta.html +[12]: http://december.com/html/4/element/body.html +[13]: http://december.com/html/4/element/script.html +[14]: https://github.com/brson/basic-http-server +[15]: https://twitter.com/ryan_levick From 70e1196bb01510e906567b7cde96087130ad7ca8 Mon Sep 17 00:00:00 2001 From: darksun Date: Tue, 19 Mar 2019 10:34:27 +0800 Subject: [PATCH 003/128] =?UTF-8?q?=E9=80=89=E9=A2=98:=2020190318=2010=20P?= =?UTF-8?q?ython=20image=20manipulation=20tools=20sources/tech/20190318=20?= =?UTF-8?q?10=20Python=20image=20manipulation=20tools.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0318 10 Python image manipulation tools.md | 331 ++++++++++++++++++ 1 file changed, 331 insertions(+) create mode 100644 sources/tech/20190318 10 Python image manipulation tools.md diff --git a/sources/tech/20190318 10 Python image manipulation tools.md b/sources/tech/20190318 10 Python image manipulation tools.md new file mode 100644 index 0000000000..334e2b4344 --- /dev/null +++ b/sources/tech/20190318 10 Python image manipulation tools.md @@ -0,0 +1,331 @@ +[#]: collector: (lujun9972) +[#]: translator: ( ) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (10 Python image manipulation tools) +[#]: via: (https://opensource.com/article/19/3/python-image-manipulation-tools) +[#]: author: (Parul Pandey https://opensource.com/users/parul-pandey) + +10 Python image manipulation tools +====== + +These Python libraries provide an easy and intuitive way to transform images and make sense of the underlying data. + +![][1] + +Today's world is full of data, and images form a significant part of this data. However, before they can be used, these digital images must be processed—analyzed and manipulated in order to improve their quality or extract some information that can be put to use. + +Common image processing tasks include displays; basic manipulations like cropping, flipping, rotating, etc.; image segmentation, classification, and feature extractions; image restoration; and image recognition. Python is an excellent choice for these types of image processing tasks due to its growing popularity as a scientific programming language and the free availability of many state-of-the-art image processing tools in its ecosystem. + +This article looks at 10 of the most commonly used Python libraries for image manipulation tasks. These libraries provide an easy and intuitive way to transform images and make sense of the underlying data. + +### 1\. scikit-image + +**[**scikit** -image][2]** is an open source Python package that works with [NumPy][3] arrays. It implements algorithms and utilities for use in research, education, and industry applications. It is a fairly simple and straightforward library, even for those who are new to Python's ecosystem. The code is high-quality, peer-reviewed, and written by an active community of volunteers. + +#### Resources + +scikit-image is very well [documented][4] with a lot of examples and practical use cases. + +#### Usage + +The package is imported as **skimage** , and most functions are found within the submodules. + +Image filtering: + +``` +import matplotlib.pyplot as plt +%matplotlib inline + +from skimage import data,filters + +image = data.coins() # ... or any other NumPy array! +edges = filters.sobel(image) +plt.imshow(edges, cmap='gray') +``` + +![Image filtering in scikit-image][6] + +Template matching using the [match_template][7] function: + +![Template matching in scikit-image][9] + +You can find more examples in the [gallery][10]. + +### 2\. NumPy + +[**NumPy**][11] is one of the core libraries in Python programming and provides support for arrays. An image is essentially a standard NumPy array containing pixels of data points. Therefore, by using basic NumPy operations, such as slicing, masking, and fancy indexing, you can modify the pixel values of an image. The image can be loaded using **skimage** and displayed using Matplotlib. + +#### Resources + +A complete list of resources and documentation is available on NumPy's [official documentation page][11]. + +#### Usage + +Using Numpy to mask an image: + +``` +import numpy as np +from skimage import data +import matplotlib.pyplot as plt +%matplotlib inline + +image = data.camera() +type(image) +numpy.ndarray #Image is a NumPy array: + +mask = image < 87 +image[mask]=255 +plt.imshow(image, cmap='gray') +``` + +![NumPy][13] + +### 3\. SciPy + +**[SciPy][14]** is another of Python's core scientific modules (like NumPy) and can be used for basic image manipulation and processing tasks. In particular, the submodule [**scipy.ndimage**][15] (in SciPy v1.1.0) provides functions operating on n-dimensional NumPy arrays. The package currently includes functions for linear and non-linear filtering, binary morphology, B-spline interpolation, and object measurements. + +#### Resources + +For a complete list of functions provided by the **scipy.ndimage** package, refer to the [documentation][16]. + +#### Usage + +Using SciPy for blurring using a [Gaussian filter][17]: +``` +from scipy import misc,ndimage + +face = misc.face() +blurred_face = ndimage.gaussian_filter(face, sigma=3) +very_blurred = ndimage.gaussian_filter(face, sigma=5) + +#Results +plt.imshow() +``` + +![Using a Gaussian filter in SciPy][19] + +### 4\. PIL/Pillow + +**PIL** (Python Imaging Library) is a free library for the Python programming language that adds support for opening, manipulating, and saving many different image file formats. However, its development has stagnated, with its last release in 2009. Fortunately, there is [**Pillow**][20], an actively developed fork of PIL, that is easier to install, runs on all major operating systems, and supports Python 3. The library contains basic image processing functionality, including point operations, filtering with a set of built-in convolution kernels, and color-space conversions. + +#### Resources + +The [documentation][21] has instructions for installation as well as examples covering every module of the library. + +#### Usage + +Enhancing an image in Pillow using ImageFilter: + +``` +from PIL import Image,ImageFilter +#Read image +im = Image.open('image.jpg') +#Display image +im.show() + +from PIL import ImageEnhance +enh = ImageEnhance.Contrast(im) +enh.enhance(1.8).show("30% more contrast") +``` + +![Enhancing an image in Pillow using ImageFilter][23] + +[Image source code][24] + +### 5\. OpenCV-Python + +**OpenCV** (Open Source Computer Vision Library) is one of the most widely used libraries for computer vision applications. [**OpenCV-Python**][25] is the Python API for OpenCV. OpenCV-Python is not only fast, since the background consists of code written in C/C++, but it is also easy to code and deploy (due to the Python wrapper in the foreground). This makes it a great choice to perform computationally intensive computer vision programs. + +#### Resources + +The [OpenCV2-Python-Guide][26] makes it easy to get started with OpenCV-Python. + +#### Usage + +Using _Image Blending using Pyramids_ in OpenCV-Python to create an "Orapple": + + +![Image blending using Pyramids in OpenCV-Python][28] + +[Image source code][29] + +### 6\. SimpleCV + +[**SimpleCV**][30] is another open source framework for building computer vision applications. It offers access to several high-powered computer vision libraries such as OpenCV, but without having to know about bit depths, file formats, color spaces, etc. Its learning curve is substantially smaller than OpenCV's, and (as its tagline says), "it's computer vision made easy." Some points in favor of SimpleCV are: + + * Even beginning programmers can write simple machine vision tests + * Cameras, video files, images, and video streams are all interoperable + + + +#### Resources + +The official [documentation][31] is very easy to follow and has tons of examples and use cases to follow. + +#### Usage + +### [7-_simplecv.png][32] + +![SimpleCV][33] + +### 7\. Mahotas + +**[Mahotas][34]** is another computer vision and image processing library for Python. It contains traditional image processing functions such as filtering and morphological operations, as well as more modern computer vision functions for feature computation, including interest point detection and local descriptors. The interface is in Python, which is appropriate for fast development, but the algorithms are implemented in C++ and tuned for speed. Mahotas' library is fast with minimalistic code and even minimum dependencies. Read its [official paper][35] for more insights. + +#### Resources + +The [documentation][36] contains installation instructions, examples, and even some tutorials to help you get started using Mahotas easily. + +#### Usage + +The Mahotas library relies on simple code to get things done. For example, it does a good job with the [Finding Wally][37] problem with a minimum amount of code. + +Solving the Finding Wally problem: + +![Finding Wally problem in Mahotas][39] + +[Image source code][40] + +![Finding Wally problem in Mahotas][42] + +[Image source code][40] + +### 8\. SimpleITK + +[**ITK**][43] (Insight Segmentation and Registration Toolkit) is an "open source, cross-platform system that provides developers with an extensive suite of software tools for image analysis. **[SimpleITK][44]** is a simplified layer built on top of ITK, intended to facilitate its use in rapid prototyping, education, [and] interpreted languages." It's also an image analysis toolkit with a [large number of components][45] supporting general filtering operations, image segmentation, and registration. SimpleITK is written in C++, but it's available for a large number of programming languages including Python. + +#### Resources + +There are a large number of [Jupyter Notebooks][46] illustrating the use of SimpleITK for educational and research activities. The notebooks demonstrate using SimpleITK for interactive image analysis using the Python and R programming languages. + +#### Usage + +Visualization of a rigid CT/MR registration process created with SimpleITK and Python: + +![SimpleITK animation][48] + +[Image source code][49] + +### 9\. pgmagick + +[**pgmagick**][50] is a Python-based wrapper for the GraphicsMagick library. The [**GraphicsMagick**][51] image processing system is sometimes called the Swiss Army Knife of image processing. Its robust and efficient collection of tools and libraries supports reading, writing, and manipulating images in over 88 major formats including DPX, GIF, JPEG, JPEG-2000, PNG, PDF, PNM, and TIFF. + +#### Resources + +pgmagick's [GitHub repository][52] has installation instructions and requirements. There is also a detailed [user guide][53]. + +#### Usage + +Image scaling: + +![Image scaling in pgmagick][55] + +[Image source code][56] + +Edge extraction: + +![Edge extraction in pgmagick][58] + +[Image source code][59] + +### 10\. Pycairo + +[**Pycairo**][60] is a set of Python bindings for the [Cairo][61] graphics library. Cairo is a 2D graphics library for drawing vector graphics. Vector graphics are interesting because they don't lose clarity when resized or transformed. Pycairo can call Cairo commands from Python. + +#### Resources + +The Pycairo [GitHub repository][62] is a good resource with detailed instructions on installation and usage. There is also a [getting started guide][63], which has a brief tutorial on Pycairo. + +#### Usage + +Drawing lines, basic shapes, and radial gradients with Pycairo: + +![Pycairo][65] + +[Image source code][66] + +### Conclusion + +These are some of the useful and freely available image processing libraries in Python. Some are well known and others may be new to you. Try them out to get to know more about them! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/19/3/python-image-manipulation-tools + +作者:[Parul Pandey][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/parul-pandey +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/daisy_gimp_art_design.jpg?itok=6kCxAKWO +[2]: https://scikit-image.org/ +[3]: http://docs.scipy.org/doc/numpy/reference/index.html#module-numpy +[4]: http://scikit-image.org/docs/stable/user_guide.html +[5]: /file/426206 +[6]: https://opensource.com/sites/default/files/uploads/1-scikit-image.png (Image filtering in scikit-image) +[7]: http://scikit-image.org/docs/dev/auto_examples/features_detection/plot_template.html#sphx-glr-auto-examples-features-detection-plot-template-py +[8]: /file/426211 +[9]: https://opensource.com/sites/default/files/uploads/2-scikit-image.png (Template matching in scikit-image) +[10]: https://scikit-image.org/docs/dev/auto_examples +[11]: http://www.numpy.org/ +[12]: /file/426216 +[13]: https://opensource.com/sites/default/files/uploads/3-numpy.png (NumPy) +[14]: https://www.scipy.org/ +[15]: https://docs.scipy.org/doc/scipy/reference/ndimage.html#module-scipy.ndimage +[16]: https://docs.scipy.org/doc/scipy/reference/tutorial/ndimage.html#correlation-and-convolution +[17]: https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.gaussian_filter.html +[18]: /file/426221 +[19]: https://opensource.com/sites/default/files/uploads/4-scipy.png (Using a Gaussian filter in SciPy) +[20]: https://python-pillow.org/ +[21]: https://pillow.readthedocs.io/en/3.1.x/index.html +[22]: /file/426226 +[23]: https://opensource.com/sites/default/files/uploads/5-pillow.png (Enhancing an image in Pillow using ImageFilter) +[24]: http://sipi.usc.edu/database/ +[25]: https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_setup/py_intro/py_intro.html +[26]: https://github.com/abidrahmank/OpenCV2-Python-Tutorials +[27]: /file/426236 +[28]: https://opensource.com/sites/default/files/uploads/6-opencv.jpeg (Image blending using Pyramids in OpenCV-Python) +[29]: https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_pyramids/py_pyramids.html#pyramids +[30]: http://simplecv.org/ +[31]: http://examples.simplecv.org/en/latest/ +[32]: /file/426241 +[33]: https://opensource.com/sites/default/files/uploads/7-_simplecv.png (SimpleCV) +[34]: https://mahotas.readthedocs.io/en/latest/ +[35]: https://openresearchsoftware.metajnl.com/articles/10.5334/jors.ac/ +[36]: https://mahotas.readthedocs.io/en/latest/install.html +[37]: https://blog.clarifai.com/wheres-waldo-using-machine-learning-to-find-all-the-waldos +[38]: /file/426246 +[39]: https://opensource.com/sites/default/files/uploads/8-mahotas.png (Finding Wally problem in Mahotas) +[40]: https://mahotas.readthedocs.io/en/latest/wally.html +[41]: /file/426251 +[42]: https://opensource.com/sites/default/files/uploads/9-mahotas.png (Finding Wally problem in Mahotas) +[43]: https://itk.org/ +[44]: http://www.simpleitk.org/ +[45]: https://itk.org/ITK/resources/resources.html +[46]: http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/ +[47]: /file/426256 +[48]: https://opensource.com/sites/default/files/uploads/10-simpleitk.gif (SimpleITK animation) +[49]: https://github.com/InsightSoftwareConsortium/SimpleITK-Notebooks/blob/master/Utilities/intro_animation.py +[50]: https://pypi.org/project/pgmagick/ +[51]: http://www.graphicsmagick.org/ +[52]: https://github.com/hhatto/pgmagick +[53]: https://pgmagick.readthedocs.io/en/latest/ +[54]: /file/426261 +[55]: https://opensource.com/sites/default/files/uploads/11-pgmagick.png (Image scaling in pgmagick) +[56]: https://pgmagick.readthedocs.io/en/latest/cookbook.html#scaling-a-jpeg-image +[57]: /file/426266 +[58]: https://opensource.com/sites/default/files/uploads/12-pgmagick.png (Edge extraction in pgmagick) +[59]: https://pgmagick.readthedocs.io/en/latest/cookbook.html#edge-extraction +[60]: https://pypi.org/project/pycairo/ +[61]: https://cairographics.org/ +[62]: https://github.com/pygobject/pycairo +[63]: https://pycairo.readthedocs.io/en/latest/tutorial.html +[64]: /file/426271 +[65]: https://opensource.com/sites/default/files/uploads/13-pycairo.png (Pycairo) +[66]: http://zetcode.com/gfx/pycairo/basicdrawing/ From 1f87b7701b964dc7d5470371c71a16d37cb7aaf1 Mon Sep 17 00:00:00 2001 From: darksun Date: Tue, 19 Mar 2019 10:52:36 +0800 Subject: [PATCH 004/128] =?UTF-8?q?=E9=80=89=E9=A2=98:=2020190318=20Solus?= =?UTF-8?q?=204=20=E2=80=98Fortitude=E2=80=99=20Released=20with=20Signific?= =?UTF-8?q?ant=20Improvements=20sources/tech/20190318=20Solus=204=20?= =?UTF-8?q?=E2=80=98Fortitude-=20Released=20with=20Significant=20Improveme?= =?UTF-8?q?nts.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...e- Released with Significant Improvements.md | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 sources/tech/20190318 Solus 4 ‘Fortitude- Released with Significant Improvements.md diff --git a/sources/tech/20190318 Solus 4 ‘Fortitude- Released with Significant Improvements.md b/sources/tech/20190318 Solus 4 ‘Fortitude- Released with Significant Improvements.md new file mode 100644 index 0000000000..c7a8d4bc55 --- /dev/null +++ b/sources/tech/20190318 Solus 4 ‘Fortitude- Released with Significant Improvements.md @@ -0,0 +1,108 @@ +[#]: collector: (lujun9972) +[#]: translator: ( ) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (Solus 4 ‘Fortitude’ Released with Significant Improvements) +[#]: via: (https://itsfoss.com/solus-4-release) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) + +Solus 4 ‘Fortitude’ Released with Significant Improvements +====== + +Finally, after a year of work, the much anticipated Solus 4 is here. It’s a significant release not just because this is a major upgrade, but also because this is the first major release after [Ikey Doherty (the founder of Solus) left the project][1] a few months ago. + +Now that everything’s under control with the new _management_ , **Solus 4 Fortitude** with updated Budgie desktop and other significant improvements has officially released. + +### What’s New in Solus 4 + +![Solus 4 Fortitude][2] + +#### Core Improvements + +Solus 4 comes loaded with **[Linux Kernel 4.20.16][3]** which enables better hardware support (like Touchpad support, improved support for Intel Coffee Lake and Ice Lake CPUs, and for AMD Picasso & Raven2 APUs). + +This release also ships with the latest [FFmpeg 4.1.1][4]. Also, they have enabled the support for [dav1d][5] in [VLC][6] – which is an open source AV1 decoder. So, you can consider these upgrades to significantly improve the Multimedia experience. + +It also includes some minor fixes to the Software Center – if you were encountering any issues while finding an application or viewing the description. + +In addition, WPS Office has been removed from the listing. + +#### UI Improvements + +![Budgie 10.5][7] + +The Budgie desktop update includes some minor changes and also comes baked in with the [Plata (Noir) GTK Theme.][8] + +You will no longer observe same applications multiple times in the menu, they’ve fixed this. They have also introduced a “ **Caffeine** ” mode as applet which prevents the system from suspending, locking the screen or changing the brightness while you are working. You can schedule the time accordingly. + +![Caffeine Mode][9] + +The new Budgie desktop experience also adds quick actions to the app icons on the task bar, dubbed as “ **Icon Tasklist** “. It makes it easy to manage the active tabs on a browser or the actions to minimize and move it to a new workplace (as shown in the image below). + +![Icon Tasklist][10] + +As the [change log][11] mentions, the above pop over design lets you do more: + + * _Close all instances of the selected application_ + * _Easily access per-window controls for marking it always on top, maximizing / unmaximizing, minimizing, and moving it to various workspaces._ + * _Quickly favorite / unfavorite apps_ + * _Quickly launch a new instance of the selected application_ + * _Scroll up or down on an IconTasklist button when a single window is open to activate and bring it into focus, or minimize it, based on the scroll direction._ + * _Toggle to minimize and unminimize various application windows_ + + + +The notification area now groups the notifications from specific applications instead of piling it all up. So, that’s a good improvement. + +In addition to these, the sound widget got some cool improvements while letting you personalize the look and feel of your desktop in an efficient manner. + +To know about all the nitty-gritty details, do refer the official [release note][11]s. + +### Download Solus 4 + +You can get the latest version of Solus from its download page below. It is available in the default Budgie, GNOME and MATE desktop flavors. + +[Get Solus 4][12] + +### Wrapping Up** + +Solus 4 is definitely an impressive upgrade – without introducing any unnecessary fancy features but by adding only the useful ones, subtle changes. + +What do you think about the latest Solus 4 Fortitude? Have you tried it yet? + +Let us know your thoughts in the comments below. + + + + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/solus-4-release + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/ikey-leaves-solus/ +[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/solus-4-featured.jpg?fit=800%2C450&ssl=1 +[3]: https://itsfoss.com/kernel-4-20-release/ +[4]: https://www.ffmpeg.org/ +[5]: https://code.videolan.org/videolan/dav1d +[6]: https://www.videolan.org/index.html +[7]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/Budgie-desktop.jpg?resize=800%2C450&ssl=1 +[8]: https://gitlab.com/tista500/plata-theme +[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/caffeine-mode.jpg?ssl=1 +[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/IconTasklistPopover.jpg?ssl=1 +[11]: https://getsol.us/2019/03/17/solus-4-released/ +[12]: https://getsol.us/download/ +[13]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/Budgie-desktop.jpg?fit=800%2C450&ssl=1 +[14]: https://www.facebook.com/sharer.php?t=Solus%204%20%E2%80%98Fortitude%E2%80%99%20Released%20with%20Significant%20Improvements&u=https%3A%2F%2Fitsfoss.com%2Fsolus-4-release%2F +[15]: https://twitter.com/intent/tweet?text=Solus+4+%E2%80%98Fortitude%E2%80%99+Released+with+Significant+Improvements&url=https%3A%2F%2Fitsfoss.com%2Fsolus-4-release%2F&via=itsfoss2 +[16]: https://www.linkedin.com/shareArticle?title=Solus%204%20%E2%80%98Fortitude%E2%80%99%20Released%20with%20Significant%20Improvements&url=https%3A%2F%2Fitsfoss.com%2Fsolus-4-release%2F&mini=true +[17]: https://www.reddit.com/submit?title=Solus%204%20%E2%80%98Fortitude%E2%80%99%20Released%20with%20Significant%20Improvements&url=https%3A%2F%2Fitsfoss.com%2Fsolus-4-release%2F From 241e79743cf5033b57968b62f7cca612c49616d8 Mon Sep 17 00:00:00 2001 From: darksun Date: Tue, 19 Mar 2019 11:08:11 +0800 Subject: [PATCH 005/128] =?UTF-8?q?=E9=80=89=E9=A2=98:=2020190318=203=20Wa?= =?UTF-8?q?ys=20To=20Check=20Whether=20A=20Port=20Is=20Open=20On=20The=20R?= =?UTF-8?q?emote=20Linux=20System=3F=20sources/tech/20190318=203=20Ways=20?= =?UTF-8?q?To=20Check=20Whether=20A=20Port=20Is=20Open=20On=20The=20Remote?= =?UTF-8?q?=20Linux=20System.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...Port Is Open On The Remote Linux System.md | 162 ++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 sources/tech/20190318 3 Ways To Check Whether A Port Is Open On The Remote Linux System.md diff --git a/sources/tech/20190318 3 Ways To Check Whether A Port Is Open On The Remote Linux System.md b/sources/tech/20190318 3 Ways To Check Whether A Port Is Open On The Remote Linux System.md new file mode 100644 index 0000000000..046682ef83 --- /dev/null +++ b/sources/tech/20190318 3 Ways To Check Whether A Port Is Open On The Remote Linux System.md @@ -0,0 +1,162 @@ +[#]: collector: (lujun9972) +[#]: translator: ( ) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (3 Ways To Check Whether A Port Is Open On The Remote Linux System?) +[#]: via: (https://www.2daygeek.com/how-to-check-whether-a-port-is-open-on-the-remote-linux-system-server/) +[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/) + +3 Ways To Check Whether A Port Is Open On The Remote Linux System? +====== + +This is an important topic, which is not only for Linux administrator and it will be very helpful for all. + +I mean to say. It’s very useful for users who are working in IT Infra. + +They have to check whether the port is open or not on Linux server before proceeding to next steps. + +If it’s not open then they can directly ask the Linux admin to check on this. + +If it’s open then we need to check with application team, etc,. + +In this article, we will show you, how to check this using three methods. + +It can be done using the following Linux commands. + + * **`nc:`** Netcat is a simple Unix utility which reads and writes data across network connections, using TCP or UDP protocol. + * **`nmap:`** Nmap (“Network Mapper”) is an open source tool for network exploration and security auditing. It was designed to rapidly scan large networks. + * **`telnet:`** The telnet command is used for interactive communication with another host using the TELNET protocol. + + + +### How To Check Whether A Port Is Open On The Remote Linux System Using nc (netcat) Command? + +nc stands for netcat. Netcat is a simple Unix utility which reads and writes data across network connections, using TCP or UDP protocol. + +It is designed to be a reliable “back-end” tool that can be used directly or easily driven by other programs and scripts. + +At the same time, it is a feature-rich network debugging and exploration tool, since it can create almost any kind of connection you would need and has several interesting built-in capabilities. + +Netcat has three main modes of functionality. These are the connect mode, the listen mode, and the tunnel mode. + +**Common Syntax for nc (netcat):** + +``` +$ nc [-options] [HostName or IP] [PortNumber] +``` + +In this example, we are going to check whether the port 22 is open or not on the remote Linux system. + +If it’s success then you will be getting the following output. + +``` +# nc -zvw3 192.168.1.8 22 +Connection to 192.168.1.8 22 port [tcp/ssh] succeeded! +``` + +**Details:** + + * **`nc:`** It’s a command. + * **`z:`** zero-I/O mode (used for scanning). + * **`v:`** For verbose. + * **`w3:`** timeout wait seconds + * **`192.168.1.8:`** Destination system IP. + * **`22:`** Port number needs to be verified. + + + +If it’s fail then you will be getting the following output. + +``` +# nc -zvw3 192.168.1.95 22 +nc: connect to 192.168.1.95 port 22 (tcp) failed: Connection refused +``` + +### How To Check Whether A Port Is Open On The Remote Linux System Using nmap Command? + +Nmap (“Network Mapper”) is an open source tool for network exploration and security auditing. It was designed to rapidly scan large networks, although it works fine against single hosts. + +Nmap uses raw IP packets in novel ways to determine what hosts are available on the network, what services (application name and version) those hosts are offering, what operating systems (and OS versions) they are running, what type of packet filters/firewalls are in use, and dozens of other characteristics. + +While Nmap is commonly used for security audits, many systems and network administrators find it useful for routine tasks such as network inventory, managing service upgrade schedules, and monitoring host or service uptime. + +**Common Syntax for nmap:** + +``` +$ nmap [-options] [HostName or IP] [-p] [PortNumber] +``` + +If it’s success then you will be getting the following output. + +``` +# nmap 192.168.1.8 -p 22 + +Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-16 03:37 IST Nmap scan report for 192.168.1.8 Host is up (0.00031s latency). + +PORT STATE SERVICE + +22/tcp open ssh + +Nmap done: 1 IP address (1 host up) scanned in 13.06 seconds +``` + +If it’s fail then you will be getting the following output. + +``` +# nmap 192.168.1.8 -p 80 +Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-16 04:30 IST +Nmap scan report for 192.168.1.8 +Host is up (0.00036s latency). + +PORT STATE SERVICE +80/tcp closed http + +Nmap done: 1 IP address (1 host up) scanned in 13.07 seconds +``` + +### How To Check Whether A Port Is Open On The Remote Linux System Using telnet Command? + +The telnet command is used for interactive communication with another host using the TELNET protocol. + +**Common Syntax for telnet:** + +``` +$ telnet [HostName or IP] [PortNumber] +``` + +If it’s success then you will be getting the following output. + +``` +$ telnet 192.168.1.9 22 +Trying 192.168.1.9... +Connected to 192.168.1.9. +Escape character is '^]'. +SSH-2.0-OpenSSH_5.3 +^] +Connection closed by foreign host. +``` + +If it’s fail then you will be getting the following output. + +``` +$ telnet 192.168.1.9 80 +Trying 192.168.1.9... +telnet: Unable to connect to remote host: Connection refused +``` + +We had found only the above three methods. If you found any other ways, please let us know by updating your query in the comments section. + +-------------------------------------------------------------------------------- + +via: https://www.2daygeek.com/how-to-check-whether-a-port-is-open-on-the-remote-linux-system-server/ + +作者:[Magesh Maruthamuthu][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.2daygeek.com/author/magesh/ +[b]: https://github.com/lujun9972 From 535d16406d7bccf30b57f8af0a104e1da849e5d3 Mon Sep 17 00:00:00 2001 From: Chang Liu Date: Tue, 19 Mar 2019 13:16:13 +0800 Subject: [PATCH 006/128] [Translated] 20190214 Run Particular Commands Without Sudo Password In Linux.md Signed-off-by: Chang Liu --- ...Commands Without Sudo Password In Linux.md | 157 ------------------ ...Commands Without Sudo Password In Linux.md | 155 +++++++++++++++++ 2 files changed, 155 insertions(+), 157 deletions(-) delete mode 100644 sources/tech/20190214 Run Particular Commands Without Sudo Password In Linux.md create mode 100644 translated/tech/20190214 Run Particular Commands Without Sudo Password In Linux.md diff --git a/sources/tech/20190214 Run Particular Commands Without Sudo Password In Linux.md b/sources/tech/20190214 Run Particular Commands Without Sudo Password In Linux.md deleted file mode 100644 index aaad1819e4..0000000000 --- a/sources/tech/20190214 Run Particular Commands Without Sudo Password In Linux.md +++ /dev/null @@ -1,157 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: (FSSlc) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Run Particular Commands Without Sudo Password In Linux) -[#]: via: (https://www.ostechnix.com/run-particular-commands-without-sudo-password-linux/) -[#]: author: (SK https://www.ostechnix.com/author/sk/) - -Run Particular Commands Without Sudo Password In Linux -====== - -I had a script on my Ubuntu system deployed on AWS. The primary purpose of this script is to check if a specific service is running at regular interval (every one minute to be precise) and start that service automatically if it is stopped for any reason. But the problem is I need sudo privileges to start the service. As you may know already, we should provide password when we run something as sudo user. But I don’t want to do that. What I actually want to do is to run the service as sudo without password. If you’re ever in a situation like this, I know a small work around, Today, in this brief guide, I will teach you how to run particular commands without sudo password in Unix-like operating systems. - -Have a look at the following example. - -``` -$ sudo mkdir /ostechnix -[sudo] password for sk: -``` - -![][2] - -As you can see in the above screenshot, I need to provide sudo password when creating a directory named ostechnix in root (/) folder. Whenever we try to execute a command with sudo privileges, we must enter the password. However, in my scenario, I don’t want to provide the sudo password. Here is what I did to run a sudo command without password on my Linux box. - -### Run Particular Commands Without Sudo Password In Linux - -For any reasons, if you want to allow a user to run a particular command without giving the sudo password, you need to add that command in **sudoers** file. - -I want the user named **sk** to execute **mkdir** command without giving the sudo password. Let us see how to do it. - -Edit sudoers file: - -``` -$ sudo visudo -``` - -Add the following line at the end of file. - -``` -sk ALL=NOPASSWD:/bin/mkdir -``` - -![][3] - -Here, **sk** is the username. As per the above line, the user **sk** can run ‘mkdir’ command from any terminal, without sudo password. - -You can add additional commands (for example **chmod** ) with comma-separated values as shown below. - -``` -sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod -``` - -Save and close the file. Log out (or reboot) your system. Now, log in as normal user ‘sk’ and try to run those commands with sudo and see what happens. - -``` -$ sudo mkdir /dir1 -``` - -![][4] - -See? Even though I ran ‘mkdir’ command with sudo privileges, there was no password prompt. From now on, the user **sk** need not to enter the sudo password while running ‘mkdir’ command. - -When running all other commands except those commands added in sudoers files, you will be prompted to enter the sudo password. - -Let us run another command with sudo. - -``` -$ sudo apt update -``` - -![][5] - -See? This command prompts me to enter the sudo password. - -If you don’t want this command to prompt you to ask sudo password, edit sudoers file: - -``` -$ sudo visudo -``` - -Add the ‘apt’ command in visudo file like below: - -``` -sk ALL=NOPASSWD: /bin/mkdir,/usr/bin/apt -``` - -Did you notice that the apt binary executable file path is different from mkdir? Yes, you must provide the correct executable file path. To find executable file path of any command, for example ‘apt’, use ‘whereis’ command like below. - -``` -$ whereis apt -apt: /usr/bin/apt /usr/lib/apt /etc/apt /usr/share/man/man8/apt.8.gz -``` - -As you see, the executable file for apt command is **/usr/bin/apt** , hence I added it in sudoers file. - -Like I already mentioned, you can add any number of commands with comma-separated values. Save and close your sudoers file once you’re done. Log out and log in again to your system. - -Now, check if you can be able to run the command with sudo prefix without using the password: - -``` -$ sudo apt update -``` - -![][6] - -See? The apt command didn’t ask me the password even though I ran it with sudo. - -Here is yet another example. If you want to run a specific service, for example apache2, add it as shown below. - -``` -sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt,/bin systemctl restart apache2 -``` - -Now, the user can run ‘sudo systemctl restart apache2’ command without sudo password. - -Can I re-authenticate to a particular command in the above case? Of course, yes! Just remove the added command. Log out and log in back. - -Alternatively, you can add **‘PASSWD:’** directive in-front of the command. Look at the following example. - -Add/modify the following line as shown below. - -``` -sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod,PASSWD:/usr/bin/apt -``` - -In this case, the user **sk** can run ‘mkdir’ and ‘chmod’ commands without entering the sudo password. However, he must provide sudo password when running ‘apt’ command. - -**Disclaimer:** This is for educational-purpose only. You should be very careful while applying this method. This method might be both productive and destructive. Say for example, if you allow users to execute ‘rm’ command without sudo password, they could accidentally or intentionally delete important stuffs. You have been warned! - -**Suggested read:** - -And, that’s all for now. Hope this was useful. More good stuffs to come. Stay tuned! - -Cheers! - - - --------------------------------------------------------------------------------- - -via: https://www.ostechnix.com/run-particular-commands-without-sudo-password-linux/ - -作者:[SK][a] -选题:[lujun9972][b] -译者:[FSSlc](https://github.com/FSSlc) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.ostechnix.com/author/sk/ -[b]: https://github.com/lujun9972 -[1]: data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 -[2]: http://www.ostechnix.com/wp-content/uploads/2017/05/sudo-password-1.png -[3]: http://www.ostechnix.com/wp-content/uploads/2017/05/sudo-password-7.png -[4]: http://www.ostechnix.com/wp-content/uploads/2017/05/sudo-password-6.png -[5]: http://www.ostechnix.com/wp-content/uploads/2017/05/sudo-password-4.png -[6]: http://www.ostechnix.com/wp-content/uploads/2017/05/sudo-password-5.png diff --git a/translated/tech/20190214 Run Particular Commands Without Sudo Password In Linux.md b/translated/tech/20190214 Run Particular Commands Without Sudo Password In Linux.md new file mode 100644 index 0000000000..2b488634c4 --- /dev/null +++ b/translated/tech/20190214 Run Particular Commands Without Sudo Password In Linux.md @@ -0,0 +1,155 @@ +[#]: collector: (lujun9972) +[#]: translator: (FSSlc) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (Run Particular Commands Without Sudo Password In Linux) +[#]: via: (https://www.ostechnix.com/run-particular-commands-without-sudo-password-linux/) +[#]: author: (SK https://www.ostechnix.com/author/sk/) + +在 Linux 中运行特定命令而无需 sudo 密码 +====== + +我有一台部署在 AWS 上的 Ubuntu 系统,在它的里面有一个脚本,这个脚本的原有目的是以一定间隔(准确来说是每隔 1 分钟)去检查某个特定服务是否正在运行,如果这个服务因为某些原因停止了,就自动重启这个服务。 但问题是我需要 sudo 权限来开启这个服务。正如你所知道的那样,当我们以 sudo 用户运行命令时,我们应该提供密码,但我并不想这么做,实际上我想做的是以 sudo 用户的身份运行这个服务但无需提供密码。假如你曾经经历过这样的情形,那么我知道一个简单的方法来做到这点。今天,在这个简短的指南中,我将教你如何在类 Unix 的操作系统中运行特定命令而无需 sudo 密码。 + +就让我们看看下面的例子吧。 + +``` +$ sudo mkdir /ostechnix +[sudo] password for sk: +``` + +![][2] + +正如上面的截图中看到的那样,当我在根目录(`/`)中创建一个名为 `ostechnix` 的目录时,我需要提供 sudo 密码。每当我们尝试以 sudo 特权执行一个命令时,我们必须输入密码。而在我的预想中,我不想提供 sudo 密码。下面的内容便是我如何在我的 Linux 机子上运行一个 sudo 命令而无需输入密码的过程。 + +### 在 Linux 中运行特定命令而无需 sudo 密码 + +基于某些原因,假如你想允许一个用户运行特定命令而无需提供 sudo 密码,则你需要在 **sudoers** 文件中添加上这个命令。 + +假如我想让名为 **sk** 的用户去执行 **mkdir** 而无需提供 sudo 密码,下面就让我们看看该如何做到这点。 + +使用下面的命令来编辑 sudoers 文件: + +``` +$ sudo visudo +``` + +将下面的命令添加到这个文件的最后。 + +``` +sk ALL=NOPASSWD:/bin/mkdir +``` + +![][3] + +其中 **sk** 是用户名。根据上面一行的内容,用户 **sk** 可以从任意终端执行 `mkdir` 命令而不必输入 sudo 密码。 + +你可以用逗号分隔的值来添加额外的命令(例如 **chmod**),正如下面展示的那样。 + +``` +sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod +``` + +保存并关闭这个文件,然后注销(或重启)你的系统。现在以普通用户 `sk` 登录,然后试试使用 sudo 来运行这些命令,看会发生什么。 + +``` +$ sudo mkdir /dir1 +``` + +![][4] + +看到了吗?即便我以 sudo 特权运行 `mkdir` 命令,也不会弹出提示让我输入密码。从现在开始,当用户 **sk** 运行 `mkdir` 时,就不必输入 sudo 密码了。 + +当运行除了添加到 sudoers 文件之外的命令时,你将被提示输入 sudo 密码。 + +让我们用 sudo 来运行另一个命令。 + +``` +$ sudo apt update +``` + +![][5] + +看到了吗?这个命令将提示我输入 sudo 密码。 + +假如你不想让这个命令提示你输入 sudo 密码,请编辑 sudoers 文件: + +``` +$ sudo visudo +``` + +像下面这样将 `apt` 命令添加到 visudo 文件中: + +``` +sk ALL=NOPASSWD: /bin/mkdir,/usr/bin/apt +``` + +你注意到了上面命令中 `apt` 二进制执行文件的路径与 `mkdir` 的有所不同吗?是的,你必须提供一个正确的可执行文件路径。要找到任意命令的可执行文件路径,例如这里的 `apt`,可以像下面这样使用 `whichis` 命令来查看: + +``` +$ whereis apt +apt: /usr/bin/apt /usr/lib/apt /etc/apt /usr/share/man/man8/apt.8.gz +``` + +如你所见,`apt` 命令的可执行文件路径为 **/usr/bin/apt**,所以我将这个路径添加到了 sudoers 文件中。 + +正如我前面提及的那样,你可以添加任意多个以逗号分隔的命令。一旦你做完添加的动作,保存并关闭你的 sudoers 文件,接着注销,然后重新登录进你的系统。 + +现在就检验你是否可以直接运行以 sudo 开头的命令而不必使用密码: + +``` +$ sudo apt update +``` + +![][6] + +看到了吗?`apt` 命令没有让我输入 sudo 密码,即便我用 sudo 来运行它。 + +下面展示另一个例子。假如你想运行一个特定服务,例如 `apache2`,那么就添加下面这条命令到 sudoers 文件中: + +``` +sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt,/bin/systemctl restart apache2 +``` + +现在用户 `sk` 就可以运行 `sudo systemctl restart apache` 命令而不必输入 sudo 密码了。 + +我可以再次让一个特别的命令提醒输入 sudo 密码吗?当然可以!只需要删除添加的命令,注销然后再次登录即可。 + +除了这种方法外,你还可以在命令的前面添加 **`PASSWD:`** 指令。让我们看看下面的例子: + +在 sudoers 文件中添加或者修改下面的一行: + +``` +sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod,PASSWD:/usr/bin/apt +``` + +在这种情况下,用户 **sk** 可以运行 `mkdir` 和 `chmod` 命令而不用输入 sudo 密码。然而,当他运行 `apt` 命令时,就必须提供 sudo 密码了。 + +**免责声明:** 本篇指南仅具有教育意义。在使用这个方法的时候,你必须非常小心。这个命令既可能富有成效但也可能带来摧毁性效果。例如,假如你允许用户执行 `rm` 命令而不输入 sudo 密码,那么他们可能无意或有意地删除某些重要文件。我警告过你了! + +那么这就是全部的内容了。希望这个能够给你带来帮助。更多精彩内容即将呈现,请保持关注! + +干杯! + + + +-------------------------------------------------------------------------------- + +via: https://www.ostechnix.com/run-particular-commands-without-sudo-password-linux/ + +作者:[SK][a] +选题:[lujun9972][b] +译者:[FSSlc](https://github.com/FSSlc) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.ostechnix.com/author/sk/ +[b]: https://github.com/lujun9972 +[1]: data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 +[2]: http://www.ostechnix.com/wp-content/uploads/2017/05/sudo-password-1.png +[3]: http://www.ostechnix.com/wp-content/uploads/2017/05/sudo-password-7.png +[4]: http://www.ostechnix.com/wp-content/uploads/2017/05/sudo-password-6.png +[5]: http://www.ostechnix.com/wp-content/uploads/2017/05/sudo-password-4.png +[6]: http://www.ostechnix.com/wp-content/uploads/2017/05/sudo-password-5.png From 0de030a9c77505f17d8f47f4483ea5b69934402f Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Tue, 19 Mar 2019 18:12:50 +0800 Subject: [PATCH 007/128] PRF:20180826 Be productive with Org-mode.md @lujun9972 --- .../20180826 Be productive with Org-mode.md | 120 +++++++++--------- 1 file changed, 57 insertions(+), 63 deletions(-) diff --git a/translated/tech/20180826 Be productive with Org-mode.md b/translated/tech/20180826 Be productive with Org-mode.md index 8592649c1c..582d1fafc7 100644 --- a/translated/tech/20180826 Be productive with Org-mode.md +++ b/translated/tech/20180826 Be productive with Org-mode.md @@ -1,46 +1,45 @@ [#]: collector: (lujun9972) [#]: translator: (lujun9972) -[#]: reviewer: ( ) +[#]: reviewer: (wxy) [#]: publisher: ( ) [#]: url: ( ) [#]: subject: (Be productive with Org-mode) [#]: via: (https://www.badykov.com/emacs/2018/08/26/be-productive-with-org-mode/) [#]: author: (Ayrat Badykov https://www.badykov.com) -高效使用 Org-mode +高效使用 Org 模式 ====== - ![org-mode-collage][1] ### 简介 -在我 [前篇关于 Emacs 的文章中 ][2] 我提到了 [Org-mode][3],一个笔记管理工具和组织工具。文本,我将会描述一下我日常的 Org-mode 使用案例。 +在我 [前一篇关于 Emacs 的文章中][2] 我提到了 [Org 模式][3]Org-mode,这是一个笔记管理工具和组织工具。本文中,我将会描述一下我日常的 Org 模式使用案例。 ### 笔记和代办列表 -首先而且最重要的是,Org-mode 是一个管理笔记和待办列表的工具,Org-mode 的所有工具都聚焦于使用纯文本文件记录笔记。我使用 Org-mode 管理多种笔记。 +首先而且最重要的是,Org 模式是一个管理笔记和待办列表的工具,Org 模式的所有工具都聚焦于使用纯文本文件记录笔记。我使用 Org 模式管理多种笔记。 #### 一般性笔记 -Org-mode 最基本的应用场景就是以笔记的形式记录下你想记住的事情。比如,下面是我正在学习的笔记内容: +Org 模式最基本的应用场景就是以笔记的形式记录下你想记住的事情。比如,下面是我正在学习的笔记内容: ``` * Learn ** Emacs LISP *** Plan - - [ ] Read best practices - - [ ] Finish reading Emacs Manual - - [ ] Finish Exercism Exercises - - [ ] Write a couple of simple plugins - - Notification plugin + - [ ] Read best practices + - [ ] Finish reading Emacs Manual + - [ ] Finish Exercism Exercises + - [ ] Write a couple of simple plugins + - Notification plugin *** Resources - https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html - http://exercism.io/languages/elisp/about - [[http://batsov.com/articles/2011/11/30/the-ultimate-collection-of-emacs-resources/][The Ultimate Collection of Emacs Resources]] + https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html + http://exercism.io/languages/elisp/about + [[http://batsov.com/articles/2011/11/30/the-ultimate-collection-of-emacs-resources/][The Ultimate Collection of Emacs Resources]] ** Rust gamedev *** Study [[https://github.com/SergiusIW/gate][gate]] 2d game engine with web assembly support @@ -55,7 +54,7 @@ Org-mode 最基本的应用场景就是以笔记的形式记录下你想记住 ![notes][5] -在这个简单的例子中,你能看到 Org-mode 的一些功能: +在这个简单的例子中,你能看到 Org 模式的一些功能: - 笔记允许嵌套 - 链接 @@ -67,81 +66,79 @@ Org-mode 最基本的应用场景就是以笔记的形式记录下你想记住 ``` * [[elisp:(org-projectile-open-project%20"mana")][mana]] [3/9] - :PROPERTIES: - :CATEGORY: mana - :END: + :PROPERTIES: + :CATEGORY: mana + :END: ** DONE [[file:~/Development/mana/apps/blockchain/lib/blockchain/contract/create_contract.ex::insufficient_gas_before_homestead%20=][fix this check using evm.configuration]] - CLOSED: [2018-08-08 Ср 09:14] - [[https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md][eip2]]: - If contract creation does not have enough gas to pay for the final gas fee for - adding the contract code to the state, the contract creation fails (i.e. goes out-of-gas) - rather than leaving an empty contract. + CLOSED: [2018-08-08 Ср 09:14] + [[https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md][eip2]]: + If contract creation does not have enough gas to pay for the final gas fee for + adding the contract code to the state, the contract creation fails (i.e. goes out-of-gas) + rather than leaving an empty contract. ** DONE Upgrade Elixir to 1.7. - CLOSED: [2018-08-08 Ср 09:14] + CLOSED: [2018-08-08 Ср 09:14] ** TODO [#A] Difficulty tests ** TODO [#C] Upgrage to OTP 21 ** DONE [#A] EIP150 - CLOSED: [2018-08-14 Вт 21:25] + CLOSED: [2018-08-14 Вт 21:25] *** DONE operation cost changes - CLOSED: [2018-08-08 Ср 20:31] + CLOSED: [2018-08-08 Ср 20:31] *** DONE 1/64th for a call and create - CLOSED: [2018-08-14 Вт 21:25] + CLOSED: [2018-08-14 Вт 21:25] ** TODO [#C] Refactor interfaces ** TODO [#B] Caching for storage during execution ** TODO [#B] Removing old merkle trees ** TODO do not calculate cost twice * [[elisp:(org-projectile-open-project%20".emacs.d")][.emacs.d]] [1/3] - :PROPERTIES: - :CATEGORY: .emacs.d - :END: + :PROPERTIES: + :CATEGORY: .emacs.d + :END: ** TODO fix flycheck issues (emacs config) ** TODO use-package for fetching dependencies ** DONE clean configuration - CLOSED: [2018-08-26 Вс 11:48] + CLOSED: [2018-08-26 Вс 11:48] ``` 它看起来是这样的: ![project-todos][7] -本例中你能看到更多的 Org mode 功能: +本例中你能看到更多的 Org 模式的功能: -- todo 列表具有 `TODO`,`DONE` 两个状态。你还可以定义自己的状态 (`WAITING` 等) +- 代办列表具有 `TODO`、`DONE` 两个状态。你还可以定义自己的状态 (`WAITING` 等) - 关闭的事项有 `CLOSED` 时间戳 -- 有些事项有优先级 - A,B,C。 +- 有些事项有优先级 - A、B、C - 链接可以指向文件内部 (`[[file:~/。..]`) - - #### 捕获模板 -正如 Org-mode 的文档中所描述的,capture 可以在不怎么干扰你工作流的情况下让你快速存储笔记。 +正如 Org 模式的文档中所描述的,捕获可以在不怎么干扰你工作流的情况下让你快速存储笔记。 我配置了许多捕获模板,可以帮我快速记录想要记住的事情。 ``` -(setq org-capture-templates -'(("t" "Todo" entry (file+headline "~/Dropbox/org/todo.org" "Todo soon") -"* TODO %? \n %^t") -("i" "Idea" entry (file+headline "~/Dropbox/org/ideas.org" "Ideas") -"* %? \n %U") -("e" "Tweak" entry (file+headline "~/Dropbox/org/tweaks.org" "Tweaks") -"* %? \n %U") -("l" "Learn" entry (file+headline "~/Dropbox/org/learn.org" "Learn") -"* %? \n") -("w" "Work note" entry (file+headline "~/Dropbox/org/work.org" "Work") -"* %? \n") -("m" "Check movie" entry (file+headline "~/Dropbox/org/check.org" "Movies") -"* %? %^g") -("n" "Check book" entry (file+headline "~/Dropbox/org/check.org" "Books") -"* %^{book name} by %^{author} %^g"))) + (setq org-capture-templates + '(("t" "Todo" entry (file+headline "~/Dropbox/org/todo.org" "Todo soon") + "* TODO %? \n %^t") + ("i" "Idea" entry (file+headline "~/Dropbox/org/ideas.org" "Ideas") + "* %? \n %U") + ("e" "Tweak" entry (file+headline "~/Dropbox/org/tweaks.org" "Tweaks") + "* %? \n %U") + ("l" "Learn" entry (file+headline "~/Dropbox/org/learn.org" "Learn") + "* %? \n") + ("w" "Work note" entry (file+headline "~/Dropbox/org/work.org" "Work") + "* %? \n") + ("m" "Check movie" entry (file+headline "~/Dropbox/org/check.org" "Movies") + "* %? %^g") + ("n" "Check book" entry (file+headline "~/Dropbox/org/check.org" "Books") + "* %^{book name} by %^{author} %^g"))) ``` 做书本记录时我需要记下它的名字和作者,做电影记录时我需要记下标签,等等。 ### 规划 -Org-mode 的另一个超棒的功能是你可以用它来作日常规划。让我们来看一个例子: +Org 模式的另一个超棒的功能是你可以用它来作日常规划。让我们来看一个例子: ![schedule][8] @@ -149,7 +146,7 @@ Org-mode 的另一个超棒的功能是你可以用它来作日常规划。让 #### 习惯 -根据 Org mode 的文档,Org 能够跟踪一种特殊的代办事情,称为 “习惯”。当我想养成新的习惯时,我会将该功能与日常规划功能一起连用: +根据 Org 模式的文档,Org 能够跟踪一种特殊的代办事情,称为 “习惯”。当我想养成新的习惯时,我会将该功能与日常规划功能一起连用: ![habits][9] @@ -161,18 +158,15 @@ Org-mode 的另一个超棒的功能是你可以用它来作日常规划。让 ![agenda][10] -### 更多 Org mode 功能 - -+ 手机应用 ([Android][https://play.google.com/store/apps/details?id=com.orgzly&hl=en],[ios][https://itunes.apple.com/app/id1238649962]) - -+ [将 Org mode 文档导出为其他格式 ][https://orgmode.org/manual/Exporting.html](html,markdown,pdf,latex etc) - -+ 使用 [ledger][https://github.com/ledger/ledger-mode] [追踪财务状况 ][https://orgmode.org/worg/org-tutorials/weaving-a-budget.html] +### 更多 Org 模式的功能 ++ 手机应用([Android](https://play.google.com/store/apps/details?id=com.orgzly&hl=en)、[ios](https://itunes.apple.com/app/id1238649962])) ++ [将 Org 模式文档导出为其他格式](https://orgmode.org/manual/Exporting.html)(html、markdown、pdf、latex 等) ++ 使用 [ledger](https://github.com/ledger/ledger-mode) [追踪财务状况](https://orgmode.org/worg/org-tutorials/weaving-a-budget.html) ### 总结 -本文我描述了 Org-mode 广泛功能中的一小部分,我每天都用它来提高工作效率,把时间花在重要的事情上。 +本文我描述了 Org 模式广泛功能中的一小部分,我每天都用它来提高工作效率,把时间花在重要的事情上。 -------------------------------------------------------------------------------- @@ -182,7 +176,7 @@ via: https://www.badykov.com/emacs/2018/08/26/be-productive-with-org-mode/ 作者:[Ayrat Badykov][a] 选题:[lujun9972][b] 译者:[lujun9972](https://github.com/lujun9972) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From ab4f4f964609707f9aaae39b00ff4a47736f6e84 Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Tue, 19 Mar 2019 18:13:28 +0800 Subject: [PATCH 008/128] PUB:20180826 Be productive with Org-mode.md @lujun9972 https://linux.cn/article-10634-1.html --- .../20180826 Be productive with Org-mode.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/tech => published}/20180826 Be productive with Org-mode.md (99%) diff --git a/translated/tech/20180826 Be productive with Org-mode.md b/published/20180826 Be productive with Org-mode.md similarity index 99% rename from translated/tech/20180826 Be productive with Org-mode.md rename to published/20180826 Be productive with Org-mode.md index 582d1fafc7..5eef4efd7b 100644 --- a/translated/tech/20180826 Be productive with Org-mode.md +++ b/published/20180826 Be productive with Org-mode.md @@ -1,8 +1,8 @@ [#]: collector: (lujun9972) [#]: translator: (lujun9972) [#]: reviewer: (wxy) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-10634-1.html) [#]: subject: (Be productive with Org-mode) [#]: via: (https://www.badykov.com/emacs/2018/08/26/be-productive-with-org-mode/) [#]: author: (Ayrat Badykov https://www.badykov.com) From 0018cb5e4b333dd171930ade2ae717a90534928d Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Tue, 19 Mar 2019 18:49:20 +0800 Subject: [PATCH 009/128] PRF:20190227 How To Find Available Network Interfaces On Linux.md @FSSlc --- ...d Available Network Interfaces On Linux.md | 95 +++++++++---------- 1 file changed, 46 insertions(+), 49 deletions(-) diff --git a/translated/tech/20190227 How To Find Available Network Interfaces On Linux.md b/translated/tech/20190227 How To Find Available Network Interfaces On Linux.md index 9c5b133bf2..408dd5c03f 100644 --- a/translated/tech/20190227 How To Find Available Network Interfaces On Linux.md +++ b/translated/tech/20190227 How To Find Available Network Interfaces On Linux.md @@ -1,6 +1,6 @@ [#]: collector: (lujun9972) [#]: translator: (FSSlc) -[#]: reviewer: ( ) +[#]: reviewer: (wxy) [#]: publisher: ( ) [#]: url: ( ) [#]: subject: (How To Find Available Network Interfaces On Linux) @@ -18,9 +18,9 @@ 我们可以使用下面的这些方法来找到可用的网络接口。 -**方法 1 —— 使用 `ifconfig` 命令:** +#### 方法 1 使用 ifconfig 命令 -使用 **`ifconfig`** 命令来查看网络接口仍然是最常使用的方法。我相信还有很多 Linux 用户仍然使用这个方法。 +使用 `ifconfig` 命令来查看网络接口仍然是最常使用的方法。我相信还有很多 Linux 用户仍然使用这个方法。 ``` $ ifconfig -a @@ -30,39 +30,39 @@ $ ifconfig -a ``` enp5s0: flags=4098 mtu 1500 -ether 24:b6:fd:37:8b:29 txqueuelen 1000 (Ethernet) -RX packets 0 bytes 0 (0.0 B) -RX errors 0 dropped 0 overruns 0 frame 0 -TX packets 0 bytes 0 (0.0 B) -TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + ether 24:b6:fd:37:8b:29 txqueuelen 1000 (Ethernet) + RX packets 0 bytes 0 (0.0 B) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 0 bytes 0 (0.0 B) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 -inet 127.0.0.1 netmask 255.0.0.0 -inet6 ::1 prefixlen 128 scopeid 0x10 -loop txqueuelen 1000 (Local Loopback) -RX packets 171420 bytes 303980988 (289.8 MiB) -RX errors 0 dropped 0 overruns 0 frame 0 -TX packets 171420 bytes 303980988 (289.8 MiB) -TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + inet 127.0.0.1 netmask 255.0.0.0 + inet6 ::1 prefixlen 128 scopeid 0x10 + loop txqueuelen 1000 (Local Loopback) + RX packets 171420 bytes 303980988 (289.8 MiB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 171420 bytes 303980988 (289.8 MiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlp9s0: flags=4163 mtu 1500 -inet 192.168.225.37 netmask 255.255.255.0 broadcast 192.168.225.255 -inet6 2409:4072:6183:c604:c218:85ff:fe50:474f prefixlen 64 scopeid 0x0 -inet6 fe80::c218:85ff:fe50:474f prefixlen 64 scopeid 0x20 -ether c0:18:85:50:47:4f txqueuelen 1000 (Ethernet) -RX packets 564574 bytes 628671925 (599.5 MiB) -RX errors 0 dropped 0 overruns 0 frame 0 -TX packets 299706 bytes 60535732 (57.7 MiB) -TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + inet 192.168.225.37 netmask 255.255.255.0 broadcast 192.168.225.255 + inet6 2409:4072:6183:c604:c218:85ff:fe50:474f prefixlen 64 scopeid 0x0 + inet6 fe80::c218:85ff:fe50:474f prefixlen 64 scopeid 0x20 + ether c0:18:85:50:47:4f txqueuelen 1000 (Ethernet) + RX packets 564574 bytes 628671925 (599.5 MiB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 299706 bytes 60535732 (57.7 MiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ``` -如上面的输出所示,在我的 Linux 机子上有两个网络接口,它们分别叫做 **enp5s0**(主板上的有线网卡)和 **wlp9s0**(无线网卡)。其中的 **lo** 是环回网卡,被用来访问本地的网络的服务,通常它的 IP 地址为 127.0.0.1。 +如上面的输出所示,在我的 Linux 机器上有两个网络接口,它们分别叫做 `enp5s0`(主板上的有线网卡)和 `wlp9s0`(无线网卡)。其中的 `lo` 是环回网卡,被用来访问本地的网络的服务,通常它的 IP 地址为 `127.0.0.1`。 -我们也可以在许多 UNIX 变种例如 **FreeBSD** 中使用相同的 `ifconfig` 来列出可用的网卡。 +我们也可以在许多 UNIX 变种例如 FreeBSD 中使用相同的 `ifconfig` 来列出可用的网卡。 -**方法 2 —— 使用 `ip` 命令:** +#### 方法 2 使用 ip 命令 -在最新的 Linux 版本中, `ifconfig` 命令已经被弃用了。你可以使用 **`ip`** 命令来罗列出网络接口,正如下面这样: +在最新的 Linux 版本中, `ifconfig` 命令已经被弃用了。你可以使用 `ip` 命令来罗列出网络接口,正如下面这样: ``` $ ip link show @@ -72,11 +72,11 @@ $ ip link show ``` 1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 - link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp5s0: mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 - link/ether 24:b6:fd:37:8b:29 brd ff:ff:ff:ff:ff:ff + link/ether 24:b6:fd:37:8b:29 brd ff:ff:ff:ff:ff:ff 3: wlp9s0: mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000 - link/ether c0:18:85:50:47:4f brd ff:ff:ff:ff:ff:ff + link/ether c0:18:85:50:47:4f brd ff:ff:ff:ff:ff:ff ``` ![](https://www.ostechnix.com/wp-content/uploads/2019/02/ip-command.png) @@ -91,15 +91,15 @@ $ ip addr $ ip -s link ``` -你注意到了吗?这些命令同时还显示出了已经连接的网络接口的状态。假如你仔细查看上面的输出,你将注意到我的有线网卡并没有跟网络线缆连接(从上面输出中的 **DOWN** 可以看出)。另外,我的无线网卡已经连接了(从上面输出中的 **UP** 可以看出)。想知晓更多的细节,可以查看我们先前的指南 [**在 Linux 中查看网络接口的已连接状态**][1]。 +你注意到了吗?这些命令同时还显示出了已经连接的网络接口的状态。假如你仔细查看上面的输出,你将注意到我的有线网卡并没有跟网络线缆连接(从上面输出中的 `DOWN` 可以看出)。另外,我的无线网卡已经连接了(从上面输出中的 `UP` 可以看出)。想知晓更多的细节,可以查看我们先前的指南 [在 Linux 中查看网络接口的已连接状态][1]。 -这两个命令(ifconfig 和 ip)已经足够在你的 LInux 系统中查看可用的网卡了。 +这两个命令(`ifconfig` 和 `ip`)已经足够在你的 LInux 系统中查看可用的网卡了。 然而,仍然有其他方法来列出 Linux 中的网络接口,下面我们接着看。 -**方法 3:** +#### 方法 3 使用 /sys/class/net 目录 -Linux 内核将网络接口的详细信息保存在 **/sys/class/net** 目录中,你可以通过查看这个目录的内容来检验可用接口的列表是否和前面的结果相符。 +Linux 内核将网络接口的详细信息保存在 `/sys/class/net` 目录中,你可以通过查看这个目录的内容来检验可用接口的列表是否和前面的结果相符。 ``` $ ls /sys/class/net @@ -111,9 +111,9 @@ $ ls /sys/class/net enp5s0 lo wlp9s0 ``` -**方法 4:** +#### 方法 4 使用 /proc/net/dev 目录 -在 Linux 操作系统中,文件 **/proc/net/dev** 中包含有关网络接口的信息。 +在 Linux 操作系统中,文件 `/proc/net/dev` 中包含有关网络接口的信息。 要查看可用的网卡,只需使用下面的命令来查看上面文件的内容: @@ -131,9 +131,9 @@ enp5s0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 lo: 303980988 171420 0 0 0 0 0 0 303980988 171420 0 0 0 0 0 0 ``` -**方法 5 : 使用 `netstat` 命令* +#### 方法 5 使用 netstat 命令 -**netstat** 命令可以列出各种不同的信息,例如网络连接、路由表、接口统计信息、伪装连接和多播成员等。 +`netstat` 命令可以列出各种不同的信息,例如网络连接、路由表、接口统计信息、伪装连接和多播成员等。 ``` $ netstat -i @@ -150,11 +150,11 @@ wlp9s0 1500 565625 0 0 0 300543 0 0 0 BMRU 请注意 `netstat` 被弃用了, `netstat -i` 的替代命令是 `ip -s link`。另外需要注意的是这个方法将只列出激活的接口,而不是所有可用的接口。 -**方法 6: 使用 `nmcli` 命令** +#### 方法 6 使用 nmcli 命令 -`nmcli` 是一个用来控制 `NetworkManager` 和报告网络状态的命令行工具。它可以被用来创建、展示、编辑、删除、激活、停用网络连接和展示网络状态。 +`nmcli` 是一个用来控制 NetworkManager 和报告网络状态的命令行工具。它可以被用来创建、展示、编辑、删除、激活、停用网络连接和展示网络状态。 -假如你的 Linux 系统中安装了 `Network Manager`,你便可以使用下面的命令来使用 `nmcli` 列出可以的网络接口: +假如你的 Linux 系统中安装了 NetworkManager,你便可以使用下面的命令来使用 `nmcli` 列出可以的网络接口: ``` $ nmcli device status @@ -168,13 +168,10 @@ $ nmcli connection show 现在你知道了如何在 Linux 中找到可用网络接口的方法,接下来,请查看下面的指南来知晓如何在 Linux 中配置 IP 地址吧。 -[如何在 Linux 和 Unix 中配置静态 IP 地址][2] - -[如何在 Ubuntu 18.04 LTS 中配置 IP 地址][3] - -[如何在 Arch Linux 中配置静态和动态 IP 地址][4] - -[如何在 Linux 中为单个网卡分配多个 IP 地址][5] +- [如何在 Linux 和 Unix 中配置静态 IP 地址][2] +- [如何在 Ubuntu 18.04 LTS 中配置 IP 地址][3] +- [如何在 Arch Linux 中配置静态和动态 IP 地址][4] +- [如何在 Linux 中为单个网卡分配多个 IP 地址][5] 假如你知道其他快捷的方法来在 Linux 中找到可用的网络接口,请在下面的评论部分中分享出来,我将检查你们的评论并更新这篇指南。 @@ -189,7 +186,7 @@ via: https://www.ostechnix.com/how-to-find-available-network-interfaces-on-linux 作者:[SK][a] 选题:[lujun9972][b] 译者:[FSSlc](https://github.com/FSSlc) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From cd0d23bfa0755c5a5e637a9c143af9030747a21e Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Tue, 19 Mar 2019 18:50:51 +0800 Subject: [PATCH 010/128] PUB:20190227 How To Find Available Network Interfaces On Linux.md @FSSlc https://linux.cn/article-10635-1.html --- ...90227 How To Find Available Network Interfaces On Linux.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/tech => published}/20190227 How To Find Available Network Interfaces On Linux.md (99%) diff --git a/translated/tech/20190227 How To Find Available Network Interfaces On Linux.md b/published/20190227 How To Find Available Network Interfaces On Linux.md similarity index 99% rename from translated/tech/20190227 How To Find Available Network Interfaces On Linux.md rename to published/20190227 How To Find Available Network Interfaces On Linux.md index 408dd5c03f..6fa954bdfc 100644 --- a/translated/tech/20190227 How To Find Available Network Interfaces On Linux.md +++ b/published/20190227 How To Find Available Network Interfaces On Linux.md @@ -1,8 +1,8 @@ [#]: collector: (lujun9972) [#]: translator: (FSSlc) [#]: reviewer: (wxy) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-10635-1.html) [#]: subject: (How To Find Available Network Interfaces On Linux) [#]: via: (https://www.ostechnix.com/how-to-find-available-network-interfaces-on-linux/) [#]: author: (SK https://www.ostechnix.com/author/sk/) From f631a2381c9ed8a612f3818295c9400f3d3c2334 Mon Sep 17 00:00:00 2001 From: HankChow <280630620@qq.com> Date: Tue, 19 Mar 2019 21:13:24 +0800 Subject: [PATCH 011/128] hankchow translating --- sources/tech/20180719 Building tiny container images.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sources/tech/20180719 Building tiny container images.md b/sources/tech/20180719 Building tiny container images.md index bdaef5f08c..50fcac0951 100644 --- a/sources/tech/20180719 Building tiny container images.md +++ b/sources/tech/20180719 Building tiny container images.md @@ -1,3 +1,5 @@ +hankchow translating + Building tiny container images ====== From 86dbec9d687f302f60269d7dc3f42cc294e94435 Mon Sep 17 00:00:00 2001 From: MjSeven Date: Tue, 19 Mar 2019 22:08:47 +0800 Subject: [PATCH 012/128] =?UTF-8?q?=E7=BF=BB=E8=AF=91=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...factor authentication for SSH on Fedora.md | 170 ------------------ ...actor authentic ation for SSH on Fedora.md | 157 ++++++++++++++++ 2 files changed, 157 insertions(+), 170 deletions(-) delete mode 100644 sources/tech/20190220 Set up two-factor authentication for SSH on Fedora.md create mode 100644 translated/tech/20190220 Set up two-factor authentic ation for SSH on Fedora.md diff --git a/sources/tech/20190220 Set up two-factor authentication for SSH on Fedora.md b/sources/tech/20190220 Set up two-factor authentication for SSH on Fedora.md deleted file mode 100644 index b54361dfd4..0000000000 --- a/sources/tech/20190220 Set up two-factor authentication for SSH on Fedora.md +++ /dev/null @@ -1,170 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: (MjSeven) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Set up two-factor authentication for SSH on Fedora) -[#]: via: (https://fedoramagazine.org/two-factor-authentication-ssh-fedora/) -[#]: author: (Curt Warfield https://fedoramagazine.org/author/rcurtiswarfield/) - -Set up two-factor authentication for SSH on Fedora -====== - -![](https://fedoramagazine.org/wp-content/uploads/2019/02/twofactor-auth-ssh-816x345.png) - -Every day there seems to be a security breach reported in the news where our data is at risk. Despite the fact that SSH is a secure way to connect remotely to a system, you can still make it even more secure. This article will show you how. - -That’s where two-factor authentication (2FA) comes in. Even if you disable passwords and only allow SSH connections using public and private keys, an unauthorized user could still gain access to your system if they steal your keys. - -With two-factor authentication, you can’t connect to a server with just your SSH keys. You also need to provide the randomly generated number displayed by an authenticator application on a mobile phone. - -The Time-based One-time Password algorithm (TOTP) is the method shown in this article. [Google Authenticator][1] is used as the server application. Google Authenticator is available by default in Fedora. - -For your mobile phone, you can use any two-way authentication application that is compatible with TOTP. There are numerous free applications for Android or IOS that work with TOTP and Google Authenticator. This article uses [FreeOTP][2] as an example. - -### Install and set up Google Authenticator - -First, install the Google Authenticator package on your server. - -``` -$ sudo dnf install -y google-authenticator -``` - -Run the application. - -``` -$ google-authenticator -``` - -The application presents you with a series of questions. The snippets below show you how to answer for a reasonably secure setup. - -``` -Do you want authentication tokens to be time-based (y/n) y -Do you want me to update your "/home/user/.google_authenticator" file (y/n)? y -``` - -The app provides you with a secret key, verification code, and recovery codes. Keep these in a secure, safe location. The recovery codes are the **only** way to access your server if you lose your mobile phone. - -### Set up mobile phone authentication - -Install the authenticator application (FreeOTP) on your mobile phone. You can find it in Google Play if you have an Android phone, or in the iTunes store for an Apple iPhone. - -A QR code is displayed on the screen. Open up the FreeOTP app on your mobile phone. To add a new account, select the QR code shaped tool at the top on the app, and then scan the QR code. After the setup is complete, you’ll have to provide the random number generated by the authenticator application every time you connect to your server remotely. - -### Finish configuration - -The application asks further questions. The example below shows you how to answer to set up a reasonably secure configuration. - -``` -Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) y -By default, tokens are good for 30 seconds. In order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of +-1min (window size of 3) to about +-4min (window size of 17 acceptable tokens). -Do you want to do so? (y/n) n -If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. -Do you want to enable rate-limiting (y/n) y -``` - -Now you have to set up SSH to take advantage of the new two-way authentication. - -### Configure SSH - -Before completing this step, **make sure you’ve already established a working SSH connection** using public SSH keys, since we’ll be disabling password connections. If there is a problem or mistake, having a connection will allow you to fix the problem. - -On your server, use [sudo][3] to edit the /etc/pam.d/sshd file. - -``` -$ sudo vi /etc/pam.d/ssh -``` - -Comment out the auth substack password-auth line: - -``` -#auth       substack     password-auth -``` - -Add the following line to the bottom of the file. - -``` -auth sufficient pam_google_authenticator.so -``` - -Save and close the file. Next, edit the /etc/ssh/sshd_config file. - -``` -$ sudo vi /etc/ssh/sshd_config -``` - -Look for the ChallengeResponseAuthentication line and change it to yes. - -``` -ChallengeResponseAuthentication yes -``` - -Look for the PasswordAuthentication line and change it to no. - -``` -PasswordAuthentication no -``` - -Add the following line to the bottom of the file. - -``` -AuthenticationMethods publickey,password publickey,keyboard-interactive -``` - -Save and close the file, and then restart SSH. - -``` -$ sudo systemctl restart sshd -``` - -### Testing your two-factor authentication - -When you attempt to connect to your server you’re now prompted for a verification code. - -``` -[user@client ~]$ ssh user@example.com -Verification code: -``` - -The verification code is randomly generated by your authenticator application on your mobile phone. Since this number changes every few seconds, you need to enter it before it changes. - -![][4] - -If you do not enter the verification code, you won’t be able to access the system, and you’ll get a permission denied error: - -``` -[user@client ~]$ ssh user@example.com - -Verification code: - -Verification code: - -Verification code: - -Permission denied (keyboard-interactive). - -[user@client ~]$ -``` - -### Conclusion - -By adding this simple two-way authentication, you’ve now made it much more difficult for an unauthorized user to gain access to your server. - - --------------------------------------------------------------------------------- - -via: https://fedoramagazine.org/two-factor-authentication-ssh-fedora/ - -作者:[Curt Warfield][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://fedoramagazine.org/author/rcurtiswarfield/ -[b]: https://github.com/lujun9972 -[1]: https://en.wikipedia.org/wiki/Google_Authenticator -[2]: https://freeotp.github.io/ -[3]: https://fedoramagazine.org/howto-use-sudo/ -[4]: https://fedoramagazine.org/wp-content/uploads/2019/02/freeotp-1.png diff --git a/translated/tech/20190220 Set up two-factor authentic ation for SSH on Fedora.md b/translated/tech/20190220 Set up two-factor authentic ation for SSH on Fedora.md new file mode 100644 index 0000000000..c79f43b076 --- /dev/null +++ b/translated/tech/20190220 Set up two-factor authentic ation for SSH on Fedora.md @@ -0,0 +1,157 @@ +[#]: collector: (lujun9972) +[#]: translator: (MjSeven) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (Set up two-factor authentication for SSH on Fedora) +[#]: via: (https://fedoramagazine.org/two-factor-authentication-ssh-fedora/) +[#]: author: (Curt Warfield https://fedoramagazine.org/author/rcurtiswarfield/) + +在 Fedora 上为 SSH 设置双因素验证 +====== + +![](https://fedoramagazine.org/wp-content/uploads/2019/02/twofactor-auth-ssh-816x345.png) + +每天似乎都有一个安全漏洞的新闻报道,说我们的数据会因此而存在风险。尽管 SSH 是一种远程连接系统的安全方式,但你仍然可以使它更安全。本文将向你展示如何做到这一点。 + +此时双因素验证(2FA)就有用武之地了。即使你禁用密码并只允许使用公钥和私钥进行 SSH 连接,但如果未经授权的用户偷窃了你的密钥,他仍然可以借此访问系统。 + +使用双因素验证,你不能仅使用 SSH 密钥连接到服务器,你还需要提供手机上验证器应用程序随机生成的数字。 + +本文展示的方法是基于时间的一次性密码算法(TOTP)。[Google Authenticator][1] 用作服务器应用程序。默认情况下,Google Authenticator 在 Fedora 中是可用的。 + +至于手机,你可以使用与 TOTP 兼容的任何可以双向验证的应用程序。Andorid 或 IOS 有许多可以与 TOTP 和 Google Authenticator 配合使用的免费应用程序。本文与 [FreeOTP][2] 为例。 + +### 安装并设置 Google Authenticator + +首先,在你的服务器上安装 Google Authenticator。 +``` +$ sudo dnf install -y google-authenticator +``` + +运行应用程序: + +``` +$ google-authenticator +``` + +该应用程序提供了一系列问题。下面的片段展示了如何进行合理的安全设置: +``` +Do you want authentication tokens to be time-based (y/n) y +Do you want me to update your "/home/user/.google_authenticator" file (y/n)? y +``` + +这个应用程序为你提供一个密钥,验证码和恢复码。把它们放在安全的地方。如果你丢失了手机,恢复码是访问服务器的**唯一**方式。 + +### 设置手机验证 + +在你的手机上安装 authenticator 应用程序(FreeOTP)。如果你有一台安卓手机,那么你可以在 Google Play 中找到它,也可以在苹果 iPhone 的 iTunes 商店中找到它。 + +Google Authenticator 会在屏幕上显示一个二维码。打开手机上的 FreeOTP 应用程序,选择添加新账户,在应用程序顶部选择二维码形状工具,然后扫描二维码即可。设置完成后,在每次远程连接服务器时,你必须提供 authenticator 应用程序生成的随机数。 + +### 完成配置 + +应用程序会向你询问更多的问题。下面示例展示了如何设置合理的安全配置。 + +``` +Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) y +By default, tokens are good for 30 seconds. In order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of +-1min (window size of 3) to about +-4min (window size of 17 acceptable tokens). +Do you want to do so? (y/n) n +If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. +Do you want to enable rate-limiting (y/n) y +``` + +现在,你必须设置 SSH 来利用新的双向验证。 + +### 配置 SSH + +在完成此步骤之前,**确保你已使用公钥建立了一个可用的 SSH 连接**,因为我们将禁用密码连接。如果出现问题或错误,一个已经建立的连接将允许你修复问题。 + +在你的服务器上,使用 [sudo][3] 编辑 /etc/pam.d/sshd 文件。 +``` +$ sudo vi /etc/pam.d/ssh +``` + +注释掉 auth substack password-auth 这一行: +``` +#auth       substack     password-auth +``` + +将以下行添加到文件底部。 +``` +auth sufficient pam_google_authenticator.so +``` + +保存并关闭文件。然后编辑 /etc/ssh/sshd_config 文件。 +``` +$ sudo vi /etc/ssh/sshd_config +``` + +找到 ChallengeResponseAuthentication 这一行并将其更改为 yes。 +``` +ChallengeResponseAuthentication yes +``` + +找到 PasswordAuthentication 这一行并将其更改为 no。 +``` +PasswordAuthentication no +``` + +将以下行添加到文件底部。 +``` +AuthenticationMethods publickey,password publickey,keyboard-interactive +``` + +保存并关闭文件,然后重新启动 SSH。 +``` +$ sudo systemctl restart sshd +``` + +### 测试双因素验证 + +当你尝试连接到服务器时,系统会提示你输入验证码: +``` +[user@client ~]$ ssh user@example.com +Verification code: +``` + +验证码由你手机上的 authenticator 应用程序随机生成。由于这个数字每隔几秒就会发生变化,因此你需要在它变化之前输入它。 + +![][4] + +如果你不输入验证码,你将无法访问系统,你会收到一个权限被拒绝的错误: +``` +[user@client ~]$ ssh user@example.com + +Verification code: + +Verification code: + +Verification code: + +Permission denied (keyboard-interactive). + +[user@client ~]$ +``` + +### 结论 + +通过添加这种简单的双向验证,现在未经授权的用户访问你的服务器将变得更加困难。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/two-factor-authentication-ssh-fedora/ + +作者:[Curt Warfield][a] +选题:[lujun9972][b] +译者:[MjSeven](https://github.com/MjSeven) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/rcurtiswarfield/ +[b]: https://github.com/lujun9972 +[1]: https://en.wikipedia.org/wiki/Google_Authenticator +[2]: https://freeotp.github.io/ +[3]: https://fedoramagazine.org/howto-use-sudo/ +[4]: https://fedoramagazine.org/wp-content/uploads/2019/02/freeotp-1.png From 04bee5ade15da64886d81c391307866fedc67c79 Mon Sep 17 00:00:00 2001 From: MjSeven Date: Tue, 19 Mar 2019 22:27:56 +0800 Subject: [PATCH 013/128] f --- ...0190220 Set up two-factor authentication for SSH on Fedora.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename translated/tech/{20190220 Set up two-factor authentic ation for SSH on Fedora.md => 20190220 Set up two-factor authentication for SSH on Fedora.md} (100%) diff --git a/translated/tech/20190220 Set up two-factor authentic ation for SSH on Fedora.md b/translated/tech/20190220 Set up two-factor authentication for SSH on Fedora.md similarity index 100% rename from translated/tech/20190220 Set up two-factor authentic ation for SSH on Fedora.md rename to translated/tech/20190220 Set up two-factor authentication for SSH on Fedora.md From 95894b45db0ce03e5579e7762f2e5af0d59dc571 Mon Sep 17 00:00:00 2001 From: ustblixin <48573576+ustblixin@users.noreply.github.com> Date: Tue, 19 Mar 2019 23:46:07 +0800 Subject: [PATCH 014/128] Translating by ustblixin --- ...stall Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20190205 Install Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS.md b/sources/tech/20190205 Install Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS.md index 7ce1201c4f..13b441f85d 100644 --- a/sources/tech/20190205 Install Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS.md +++ b/sources/tech/20190205 Install Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS.md @@ -1,5 +1,5 @@ [#]: collector: (lujun9972) -[#]: translator: ( ) +[#]: translator: (ustblixin) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) From 19aba31228f6a9072f77e82039c31069d66151d2 Mon Sep 17 00:00:00 2001 From: Chang Liu Date: Tue, 19 Mar 2019 23:47:29 +0800 Subject: [PATCH 015/128] Update 20190215 4 Methods To Change The HostName In Linux.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 准备翻译该篇。 --- .../20190215 4 Methods To Change The HostName In Linux.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/tech/20190215 4 Methods To Change The HostName In Linux.md b/sources/tech/20190215 4 Methods To Change The HostName In Linux.md index ad95e05fae..a4ef658851 100644 --- a/sources/tech/20190215 4 Methods To Change The HostName In Linux.md +++ b/sources/tech/20190215 4 Methods To Change The HostName In Linux.md @@ -1,5 +1,5 @@ [#]: collector: (lujun9972) -[#]: translator: ( ) +[#]: translator: (FSSlc) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) @@ -211,7 +211,7 @@ via: https://www.2daygeek.com/four-methods-to-change-the-hostname-in-linux/ 作者:[Magesh Maruthamuthu][a] 选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) +译者:[FSSlc](https://github.com/FSSlc) 校对:[校对者ID](https://github.com/校对者ID) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 6974e9ac189b7d5afbb5312098b89701525a96e9 Mon Sep 17 00:00:00 2001 From: geekpi Date: Wed, 20 Mar 2019 08:53:37 +0800 Subject: [PATCH 016/128] translated --- ...en source collaborative document editor.md | 58 ------------------- ...en source collaborative document editor.md | 58 +++++++++++++++++++ 2 files changed, 58 insertions(+), 58 deletions(-) delete mode 100644 sources/tech/20190117 Get started with CryptPad, an open source collaborative document editor.md create mode 100644 translated/tech/20190117 Get started with CryptPad, an open source collaborative document editor.md diff --git a/sources/tech/20190117 Get started with CryptPad, an open source collaborative document editor.md b/sources/tech/20190117 Get started with CryptPad, an open source collaborative document editor.md deleted file mode 100644 index 94e880cf41..0000000000 --- a/sources/tech/20190117 Get started with CryptPad, an open source collaborative document editor.md +++ /dev/null @@ -1,58 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: (geekpi) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Get started with CryptPad, an open source collaborative document editor) -[#]: via: (https://opensource.com/article/19/1/productivity-tool-cryptpad) -[#]: author: (Kevin Sonney https://opensource.com/users/ksonney (Kevin Sonney)) - -Get started with CryptPad, an open source collaborative document editor -====== -Securely share your notes, documents, kanban boards, and more with CryptPad, the fifth in our series on open source tools that will make you more productive in 2019. -![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/web_browser_desktop_devlopment_design_system_computer.jpg?itok=pfqRrJgh) - -There seems to be a mad rush at the beginning of every year to find ways to be more productive. New Year's resolutions, the itch to start the year off right, and of course, an "out with the old, in with the new" attitude all contribute to this. And the usual round of recommendations is heavily biased towards closed source and proprietary software. It doesn't have to be that way. - -Here's the fifth of my picks for 19 new (or new-to-you) open source tools to help you be more productive in 2019. - -### CryptPad - -We already talked about [Joplin][1], which is good for keeping your own notes but—as you may have noticed—doesn't have any sharing or collaboration features. - -[CryptPad][2] is a secure, shareable note-taking app and document editor that allows for secure, collaborative editing. Unlike Joplin, it is a NodeJS app, which means you can run it on your desktop or a server elsewhere and access it with any modern web browser. Out of the box, it supports rich text, Markdown, polls, whiteboards, kanban, and presentations. - -![](https://opensource.com/sites/default/files/uploads/cryptpad-1.png) - -The different document types are robust and fully featured. The rich text editor covers all the bases you'd expect from a good editor and allows you to export files to HTML. The Markdown editor is on par with Joplin, and the kanban board, though not as full-featured as [Wekan][3], is really well done. The rest of the supported document types and editors are also very polished and have the features you'd expect from similar apps, although polls feel a little clunky. - -![](https://opensource.com/sites/default/files/uploads/cryptpad-2.png) - -CryptPad's real power, though, comes in its sharing and collaboration features. Sharing a document is as simple as getting the sharable URL from the "share" option, and CryptPad supports embedding documents in iFrame tags on other websites. Documents can be shared in Edit or View mode with a password and with links that expire. The built-in chat allows editors to talk to each other (note that people with View access can also see the chat but can't comment). - -![](https://opensource.com/sites/default/files/pictures/cryptpad-3.png) - -All files are stored encrypted with the user's password. Server administrators can't read the documents, which also means if you forget or lose your password, the files are unrecoverable. So make sure you keep the password in a secure place, like a [password vault][4]. - -![](https://opensource.com/sites/default/files/uploads/cryptpad-4.png) - -When it's run locally, CryptPad is a robust app for creating and editing documents. When run on a server, it becomes an excellent collaboration platform for multi-user document creation and editing. Installation took less than five minutes on my laptop, and it just worked out of the box. The developers also include instructions for running CryptPad in Docker, and there is a community-maintained Ansible role for ease of deployment. CryptPad does not support any third-party authentication methods, so users must create their own accounts. CryptPad also has a community-supported hosted version if you don't want to run your own server. - - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/1/productivity-tool-cryptpad - -作者:[Kevin Sonney][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/ksonney (Kevin Sonney) -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/article/19/1/productivity-tool-joplin -[2]: https://cryptpad.fr/index.html -[3]: https://opensource.com/article/19/1/productivity-tool-wekan -[4]: https://opensource.com/article/18/4/3-password-managers-linux-command-line diff --git a/translated/tech/20190117 Get started with CryptPad, an open source collaborative document editor.md b/translated/tech/20190117 Get started with CryptPad, an open source collaborative document editor.md new file mode 100644 index 0000000000..c3e6d69bfe --- /dev/null +++ b/translated/tech/20190117 Get started with CryptPad, an open source collaborative document editor.md @@ -0,0 +1,58 @@ +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (Get started with CryptPad, an open source collaborative document editor) +[#]: via: (https://opensource.com/article/19/1/productivity-tool-cryptpad) +[#]: author: (Kevin Sonney https://opensource.com/users/ksonney (Kevin Sonney)) + +开始使用 CryptPad,一个开源的协作文档编辑器 +====== +使用 CryptPad 安全地共享你的笔记、文档、看板等,这是我们在开源工具系列中的第 5 个工具,它将使你在 2019 年更高效。 +![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/web_browser_desktop_devlopment_design_system_computer.jpg?itok=pfqRrJgh) + +每年年初似乎都有疯狂的冲动,想方设法提高工作效率。新年的决议,开始一年的权利,当然,“与旧的,与新的”的态度都有助于实现这一目标。通常的一轮建议严重偏向封闭源和专有软件。它不一定是这样。 + +这是我挑选出的 19 个新的(或者对你而言新的)开源工具中的第 5 个工具来帮助你在 2019 年更有效率。 + +### CryptPad + +我们已经介绍过 [Joplin][1],它能很好地保存自己的笔记,但是,你可能已经注意到,它没有任何共享或协作功能。 + +[CryptPad][2] 是一个安全、可共享的笔记应用和文档编辑器,它能够安全地协作编辑。与 Joplin 不同,它是一个 NodeJS 应用,这意味着你可以在桌面或其他服务器上运行它,并使用任何现代 Web 浏览器访问。它开箱即用,它支持富文本、Markdown、投票、白板,看板和 PPT。 + +![](https://opensource.com/sites/default/files/uploads/cryptpad-1.png) + +它支持不同的文档类型且功能齐全。它的富文本编辑器涵盖了你所期望的所有基础功能,并允许你将文件导出为 HTML。它的 Markdown 的编辑能与 Joplin 相提并论,它的看板虽然不像 [Wekan][3] 那样功能齐全,但也做得不错。其他支持的文档类型和编辑器也很不错,并且有你希望在类似应用中看到的功能,尽管投票功能显得有些粗糙。 + +![](https://opensource.com/sites/default/files/uploads/cryptpad-2.png) + +然而,CryptPad 的真正强大之处在于它的共享和协作功能。共享文档只需在“共享”选项中获取可共享 URL,CryptPad 支持使用 iframe 标签嵌入其他网站的文档。可以在“编辑”或“查看”模式下使用密码和会过期的链接共享文档。内置聊天能够让编辑者相互交谈(请注意,具有浏览权限的人也可以看到聊天但无法发表评论)。 + +![](https://opensource.com/sites/default/files/pictures/cryptpad-3.png) + +所有文件都使用用户密码加密存储。服务器管理员无法读取文档,这也意味着如果你忘记或丢失了密码,文件将无法恢复。因此,请确保将密码保存在安全的地方,例如放在[密码保险箱][4]中。 + +![](https://opensource.com/sites/default/files/uploads/cryptpad-4.png) + +当它在本地运行时,CryptPad 是一个用于创建和编辑文档的强大应用。当在服务器上运行时,它成为了用于多用户文档创建和编辑的出色协作平台。在我的笔记本电脑上安装它不到五分钟,并且开箱即用。开发者还加入了在 Docker 中运行 CryptPad 的说明,并且还有一个社区维护用于方便部署的 Ansible 角色。CryptPad 不支持任何第三方身份验证,因此用户必须创建自己的帐户。如果你不想运行自己的服务器,CryptPad 还有一个社区支持的托管版本。 + + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/19/1/productivity-tool-cryptpad + +作者:[Kevin Sonney][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/ksonney (Kevin Sonney) +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/article/19/1/productivity-tool-joplin +[2]: https://cryptpad.fr/index.html +[3]: https://opensource.com/article/19/1/productivity-tool-wekan +[4]: https://opensource.com/article/18/4/3-password-managers-linux-command-line From 6d7958319b49cde4f420dda620e5d91937c6720a Mon Sep 17 00:00:00 2001 From: geekpi Date: Wed, 20 Mar 2019 08:56:43 +0800 Subject: [PATCH 017/128] translating --- ...0309 Emulators and Native Linux games on the Raspberry Pi.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20190309 Emulators and Native Linux games on the Raspberry Pi.md b/sources/tech/20190309 Emulators and Native Linux games on the Raspberry Pi.md index 91670b7015..c533054854 100644 --- a/sources/tech/20190309 Emulators and Native Linux games on the Raspberry Pi.md +++ b/sources/tech/20190309 Emulators and Native Linux games on the Raspberry Pi.md @@ -1,5 +1,5 @@ [#]: collector: (lujun9972) -[#]: translator: ( ) +[#]: translator: (geekpi) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) From 9ff4b8a35caaa66f8a2349b3b1fcea6dc7a8436a Mon Sep 17 00:00:00 2001 From: darksun Date: Wed, 20 Mar 2019 11:41:52 +0800 Subject: [PATCH 018/128] =?UTF-8?q?=E9=80=89=E9=A2=98:=2020190301=20Emacs?= =?UTF-8?q?=20for=20(even=20more=20of)=20the=20win=20sources/tech/20190301?= =?UTF-8?q?=20Emacs=20for=20(even=20more=20of)=20the=20win.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...190301 Emacs for (even more of) the win.md | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 sources/tech/20190301 Emacs for (even more of) the win.md diff --git a/sources/tech/20190301 Emacs for (even more of) the win.md b/sources/tech/20190301 Emacs for (even more of) the win.md new file mode 100644 index 0000000000..c1697f3cae --- /dev/null +++ b/sources/tech/20190301 Emacs for (even more of) the win.md @@ -0,0 +1,84 @@ +[#]: collector: (lujun9972) +[#]: translator: ( ) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (Emacs for (even more of) the win) +[#]: via: (https://so.nwalsh.com/2019/03/01/emacs) +[#]: author: (Norman Walsh https://so.nwalsh.com) + +Emacs for (even more of) the win +====== + +I use Emacs every day. I rarely notice it. But when I do, it usually brings me joy. + +>If you are a professional writer…Emacs outshines all other editing software in approximately the same way that the noonday sun does the stars. It is not just bigger and brighter; it simply makes everything else vanish. + +I’ve been using [Emacs][1] for well over twenty years. I use it for writing almost anything and everything (I edit Scala and Java in [IntelliJ][2]). I read my email in it. If it can be done in Emacs, that’s where I prefer to do it. + +Although I’ve used Emacs for literally decades, I realized around the new year that very little about my use of Emacs had changed in the past decade or more. New editing modes had come along, of course, I’d picked up a package or two, and I did adopt [Helm][3] a few years ago, but mostly it just did all the heavy lifting that I required of it, day in and day out without complaining or getting in my way. On the one hand, that’s a testament to how good it is. On the other hand, that’s an invitation to dig in and see what I’ve missed. + +At about the same time, I resolved to improve several aspects of my work life: + + * **Better meeting management.** I’m lead on a couple of projects at work and those projects have meetings, both regularly scheduled and ad hoc; some of them I run, some of them, I only attend. + +I realized I’d become sloppy about my participation in meetings. It’s all too easy sit in a room where there’s a meeting going on but actually read email and work on other items. (I strongly oppose the “no laptops” rule in meetings, but that’s a topic for another day.) + +There are a couple of problems with sloppy participation. First, it’s disrespectful to the person who convened the meeting and the other participants. That’s actually sufficient reason not to do it, but I think there’s another problem: it disguises the cost of meetings. + +If you’re in a meeting but also answering your email and maybe fixing a bug, then that meeting didn’t cost anything (or as much). If meetings are cheap, then there will be more of them. + +I want fewer, shorter meetings. I don’t want to disguise their cost, I want them to be perceived as damned expensive and to be avoided unless absolutely necessary. + +Sometimes, they are absolutely necessary. And I appreciate that a quick meeting can sometimes resolve an issue quickly. But if I have ten short meetings a day, let’s not pretend that I’m getting anything else productive accomplished. + +I resolved to take notes at all the meetings I attend. I’m not offering to take minutes, necessarily, but I am taking minutes of a sort. It keeps me focused on the meeting and not catching up on other things. + + * **Better time management.** There are lots and lots of things that I need or want to do, both professionally and personally. I’ve historically kept track off some of them in issue lists, some in saved email threads (in Emacs and [Gmail][4], for slightly different types of reminders), in my calendar, on “todo lists” of various sorts on my phone, and on little scraps of paper. And probably other places as well. + +I resolved to keep them all in one place. Not because I think there’s one place that’s uniformly best or better, but because I hope to accomplish two things. First, by having them all in one place, I hope to be able to develop a better and more holistic view of where I’m putting my energies. Second, because I want to develop a habitn. “A settled or regular tendency or practice, especially one that is hard to give up.” of recording, tracking, and preserving them. + + * **Better accountability.** If you work in certain science or engineering disciplines, you will have developed the habit of keeping a [lab notebook][5]. Alas, I did not. But I resolved to do so. + +I’m not interested in the legal aspects that encourage bound pages or scribing only in permanent marker. What I’m interested in is developing the habit of keeping a record. My goal is to have a place to jot down ideas and design sketches and the like. If I have sudden inspiration or if I think of an edge case that isn’t in the test suite, I want my instinct to be to write it in my journal instead of scribbling it on a scrap of paper or promising myself that I’ll remember it. + + + + +This confluence of resolutions led me quickly and more-or-less directly to [Org][6]. There is a large, active, and loyal community of Org users. I’ve played with it in the past (I even [wrote about it][7], at least in passing, a couple of years ago) and I tinkered long enough to [integrate MarkLogic][8] into it. (Boy has that paid off in the last week or two!) + +But I never used it. + +I am now using it. I take minutes in it, I record all of my todo items in it, and I keep a journal in it. I’m not sure there’s much value in me attempting to wax eloquent about it or enumerate all its features, you’ll find plenty of either with a quick web search. + +If you use Emacs, you should be using Org. If you don’t use Emacs, I’m confident you wouldn’t be the first person who started because of Org. It does a lot. It takes a little time to learn your way around and remember the shortcuts, but I think it’s worth it. (And if you carry an [iOS][9] device in your pocket, I recommend [beorg][10] for recording items while you’re on the go.) + +Naturally, I worked out how to [get XML out of it][11]⊕“Worked out” sure is a funny way to spell “hacked together in elisp.”. And from there, how to turn it back into the markup my weblog expects (and do so at the push of a button in Emacs, of course). So this is the first posting written in Org. It won’t be the last. + +P.S. Happy birthday [little weblog][12]. + +-------------------------------------------------------------------------------- + +via: https://so.nwalsh.com/2019/03/01/emacs + +作者:[Norman Walsh][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://so.nwalsh.com +[b]: https://github.com/lujun9972 +[1]: https://en.wikipedia.org/wiki/Emacs +[2]: https://en.wikipedia.org/wiki/IntelliJ_IDEA +[3]: https://emacs-helm.github.io/helm/ +[4]: https://en.wikipedia.org/wiki/Gmail +[5]: https://en.wikipedia.org/wiki/Lab_notebook +[6]: https://en.wikipedia.org/wiki/Org-mode +[7]: https://www.balisage.net/Proceedings/vol17/html/Walsh01/BalisageVol17-Walsh01.html +[8]: https://github.com/ndw/ob-ml-marklogic/ +[9]: https://en.wikipedia.org/wiki/IOS +[10]: https://beorgapp.com/ +[11]: https://github.com/ndw/org-to-xml +[12]: https://so.nwalsh.com/2017/03/01/helloWorld From ddf88a6c945be4c440ace9d7e052ab4031a0f73a Mon Sep 17 00:00:00 2001 From: darksun Date: Wed, 20 Mar 2019 11:49:51 +0800 Subject: [PATCH 019/128] =?UTF-8?q?=E9=80=89=E9=A2=98:=2020190319=20Five?= =?UTF-8?q?=20Commands=20To=20Use=20Calculator=20In=20Linux=20Command=20Li?= =?UTF-8?q?ne=3F=20sources/tech/20190319=20Five=20Commands=20To=20Use=20Ca?= =?UTF-8?q?lculator=20In=20Linux=20Command=20Line.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...To Use Calculator In Linux Command Line.md | 342 ++++++++++++++++++ 1 file changed, 342 insertions(+) create mode 100644 sources/tech/20190319 Five Commands To Use Calculator In Linux Command Line.md diff --git a/sources/tech/20190319 Five Commands To Use Calculator In Linux Command Line.md b/sources/tech/20190319 Five Commands To Use Calculator In Linux Command Line.md new file mode 100644 index 0000000000..c419d15268 --- /dev/null +++ b/sources/tech/20190319 Five Commands To Use Calculator In Linux Command Line.md @@ -0,0 +1,342 @@ +[#]: collector: (lujun9972) +[#]: translator: ( ) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (Five Commands To Use Calculator In Linux Command Line?) +[#]: via: (https://www.2daygeek.com/linux-command-line-calculator-bc-calc-qalc-gcalccmd/) +[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/) + +Five Commands To Use Calculator In Linux Command Line? +====== + +As a Linux administrator you may use the command line calculator many times in a day for some purpose. + +I had used this especially when LVM creation using the PE values. + +There are many commands available for this purpose and i’m going to list most used commands in this article. + +These command line calculators are allow us to perform all kind of actions such as scientific, financial, or even simple calculation. + +Also, we can use these commands in shell scripts for complex math. + +In this article, I’m listing the top five command line calculator commands. + +Those command line calculator commands are below. + + * **`bc:`** An arbitrary precision calculator language + * **`calc:`** arbitrary precision calculator + * **`expr:`** evaluate expressions + * **`gcalccmd:`** gnome-calculator – a desktop calculator + * **`qalc:`** + * **`Linux Shell:`** + + + +### How To Perform Calculation In Linux Using bc Command? + +bs stands for Basic Calculator. bc is a language that supports arbitrary precision numbers with interactive execution of statements. There are some similarities in the syntax to the C programming language. + +A standard math library is available by command line option. If requested, the math library is defined before processing any files. bc starts by processing code from all the files listed on the command line in the order listed. + +After all files have been processed, bc reads from the standard input. All code is executed as it is read. + +By default bc command has installed in all the Linux system. If not, use the following procedure to install it. + +For **`Fedora`** system, use **[DNF Command][1]** to install bc. + +``` +$ sudo dnf install bc +``` + +For **`Debian/Ubuntu`** systems, use **[APT-GET Command][2]** or **[APT Command][3]** to install bc. + +``` +$ sudo apt install bc +``` + +For **`Arch Linux`** based systems, use **[Pacman Command][4]** to install bc. + +``` +$ sudo pacman -S bc +``` + +For **`RHEL/CentOS`** systems, use **[YUM Command][5]** to install bc. + +``` +$ sudo yum install bc +``` + +For **`openSUSE Leap`** system, use **[Zypper Command][6]** to install bc. + +``` +$ sudo zypper install bc +``` + +### How To Use The bc Command To Perform Calculation In Linux? + +We can use the bc command to perform all kind of calculation right from the terminal. + +``` +$ bc +bc 1.07.1 +Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc. +This is free software with ABSOLUTELY NO WARRANTY. +For details type `warranty'. + +1+2 +3 + +10-5 +5 + +2*5 +10 + +10/2 +5 + +(2+4)*5-5 +25 + +quit +``` + +Use `-l` flag to define the standard math library. + +``` +$ bc -l +bc 1.07.1 +Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc. +This is free software with ABSOLUTELY NO WARRANTY. +For details type `warranty'. + +3/5 +.60000000000000000000 + +quit +``` + +### How To Perform Calculation In Linux Using calc Command? + +calc is an arbitrary precision calculator. It’s a simple calculator that allow us to perform all kind of calculation in Linux command line. + +For **`Fedora`** system, use **[DNF Command][1]** to install calc. + +``` +$ sudo dnf install calc +``` + +For **`Debian/Ubuntu`** systems, use **[APT-GET Command][2]** or **[APT Command][3]** to install calc. + +``` +$ sudo apt install calc +``` + +For **`Arch Linux`** based systems, use **[Pacman Command][4]** to install calc. + +``` +$ sudo pacman -S calc +``` + +For **`RHEL/CentOS`** systems, use **[YUM Command][5]** to install calc. + +``` +$ sudo yum install calc +``` + +For **`openSUSE Leap`** system, use **[Zypper Command][6]** to install calc. + +``` +$ sudo zypper install calc +``` + +### How To Use The calc Command To Perform Calculation In Linux? + +We can use the calc command to perform all kind of calculation right from the terminal. + +Intractive mode + +``` +$ calc +C-style arbitrary precision calculator (version 2.12.7.1) +Calc is open software. For license details type: help copyright +[Type "exit" to exit, or "help" for help.] + +; 5+1 + 6 +; 5-1 + 4 +; 5*2 + 10 +; 10/2 + 5 +; quit +``` + +Non-Intractive mode + +``` +$ calc 3/5 + 0.6 +``` + +### How To Perform Calculation In Linux Using expr Command? + +Print the value of EXPRESSION to standard output. A blank line below separates increasing precedence groups. It’s part of coreutils so, we no need to install it. + +### How To Use The expr Command To Perform Calculation In Linux? + +Use the following format for basic calculations. + +For addition + +``` +$ expr 5 + 1 +6 +``` + +For subtraction + +``` +$ expr 5 - 1 +4 +``` + +For division. + +``` +$ expr 10 / 2 +5 +``` + +### How To Perform Calculation In Linux Using gcalccmd Command? + +gnome-calculator is the official calculator of the GNOME desktop environment. gcalccmd is the console version of Gnome Calculator utility. By default it has installed in the GNOME desktop. + +### How To Use The gcalccmd Command To Perform Calculation In Linux? + +I have added few examples on this. + +``` +$ gcalccmd + +> 5+1 +6 + +> 5-1 +4 + +> 5*2 +10 + +> 10/2 +5 + +> sqrt(16) +4 + +> 3/5 +0.6 + +> quit +``` + +### How To Perform Calculation In Linux Using qalc Command? + +Qalculate is a multi-purpose cross-platform desktop calculator. It is simple to use but provides power and versatility normally reserved for complicated math packages, as well as useful tools for everyday needs (such as currency conversion and percent calculation). + +Features include a large library of customizable functions, unit calculations and conversion, symbolic calculations (including integrals and equations), arbitrary precision, uncertainty propagation, interval arithmetic, plotting, and a user-friendly interface (GTK+ and CLI). + +For **`Fedora`** system, use **[DNF Command][1]** to install qalc. + +``` +$ sudo dnf install libqalculate +``` + +For **`Debian/Ubuntu`** systems, use **[APT-GET Command][2]** or **[APT Command][3]** to install qalc. + +``` +$ sudo apt install libqalculate +``` + +For **`Arch Linux`** based systems, use **[Pacman Command][4]** to install qalc. + +``` +$ sudo pacman -S libqalculate +``` + +For **`RHEL/CentOS`** systems, use **[YUM Command][5]** to install qalc. + +``` +$ sudo yum install libqalculate +``` + +For **`openSUSE Leap`** system, use **[Zypper Command][6]** to install qalc. + +``` +$ sudo zypper install libqalculate +``` + +### How To Use The qalc Command To Perform Calculation In Linux? + +I have added few examples on this. + +``` +$ qalc +> 5+1 + + 5 + 1 = 6 + +> ans*2 + + ans * 2 = 12 + +> ans-2 + + ans - 2 = 10 + +> 1 USD to INR +It has been 36 day(s) since the exchange rates last were updated. +Do you wish to update the exchange rates now? y + + error: Failed to download exchange rates from coinbase.com: Resolving timed out after 15000 milliseconds. + 1 * dollar = approx. INR 69.638581 + +> 10 USD to INR + + 10 * dollar = approx. INR 696.38581 + +> quit +``` + +### How To Perform Calculation In Linux Using Linux Shell Command? + +We can use the shell commands such as echo, awk, etc to perform the calculation. + +For Addition using echo command. + +``` +$ echo $((5+5)) +10 +``` + +-------------------------------------------------------------------------------- + +via: https://www.2daygeek.com/linux-command-line-calculator-bc-calc-qalc-gcalccmd/ + +作者:[Magesh Maruthamuthu][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.2daygeek.com/author/magesh/ +[b]: https://github.com/lujun9972 +[1]: https://www.2daygeek.com/dnf-command-examples-manage-packages-fedora-system/ +[2]: https://www.2daygeek.com/apt-get-apt-cache-command-examples-manage-packages-debian-ubuntu-systems/ +[3]: https://www.2daygeek.com/apt-command-examples-manage-packages-debian-ubuntu-systems/ +[4]: https://www.2daygeek.com/pacman-command-examples-manage-packages-arch-linux-system/ +[5]: https://www.2daygeek.com/yum-command-examples-manage-packages-rhel-centos-systems/ +[6]: https://www.2daygeek.com/zypper-command-examples-manage-packages-opensuse-system/ From 00cec5a93631ffd5ed67667ac763a1f22cc42b1e Mon Sep 17 00:00:00 2001 From: darksun Date: Wed, 20 Mar 2019 11:51:36 +0800 Subject: [PATCH 020/128] =?UTF-8?q?=E9=80=89=E9=A2=98:=2020190319=20How=20?= =?UTF-8?q?to=20set=20up=20a=20homelab=20from=20hardware=20to=20firewall?= =?UTF-8?q?=20sources/tech/20190319=20How=20to=20set=20up=20a=20homelab=20?= =?UTF-8?q?from=20hardware=20to=20firewall.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... up a homelab from hardware to firewall.md | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 sources/tech/20190319 How to set up a homelab from hardware to firewall.md diff --git a/sources/tech/20190319 How to set up a homelab from hardware to firewall.md b/sources/tech/20190319 How to set up a homelab from hardware to firewall.md new file mode 100644 index 0000000000..28a50d8a43 --- /dev/null +++ b/sources/tech/20190319 How to set up a homelab from hardware to firewall.md @@ -0,0 +1,107 @@ +[#]: collector: (lujun9972) +[#]: translator: ( ) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (How to set up a homelab from hardware to firewall) +[#]: via: (https://opensource.com/article/19/3/home-lab) +[#]: author: (Michael Zamot (Red Hat) https://opensource.com/users/mzamot) + +How to set up a homelab from hardware to firewall +====== + +Take a look at hardware and software options for building your own homelab. + +![][1] + +Do you want to create a homelab? Maybe you want to experiment with different technologies, create development environments, or have your own private cloud. There are many reasons to have a homelab, and this guide aims to make it easier to get started. + +There are three categories to consider when planning a home lab: hardware, software, and maintenance. We'll look at the first two categories here and save maintaining your computer lab for a future article. + +### Hardware + +When thinking about your hardware needs, first consider how you plan to use your lab as well as your budget, noise, space, and power usage. + +If buying new hardware is too expensive, search local universities, ads, and websites like eBay or Craigslist for recycled servers. They are usually inexpensive, and server-grade hardware is built to last many years. You'll need three types of hardware: a virtualization server, storage, and a router/firewall. + +#### Virtualization servers + +A virtualization server allows you to run several virtual machines that share the physical box's resources while maximizing and isolating resources. If you break one virtual machine, you won't have to rebuild the entire server, just the virtual one. If you want to do a test or try something without the risk of breaking your entire system, just spin up a new virtual machine and you're ready to go. + +The two most important factors to consider in a virtualization server are the number and speed of its CPU cores and its memory. If there are not enough resources to share among all the virtual machines, they'll be overallocated and try to steal each other's CPU cycles and memory. + +So, consider a CPU platform with multiple cores. You want to ensure the CPU supports virtualization instructions (VT-x for Intel and AMD-V for AMD). Examples of good consumer-grade processors that can handle virtualization are Intel i5 or i7 and AMD Ryzen. If you are considering server-grade hardware, the Xeon class for Intel and EPYC for AMD are good options. Memory can be expensive, especially the latest DDR4 SDRAM. When estimating memory requirements, factor at least 2GB for the host operating system's memory consumption. + +If your electricity bill or noise is a concern, solutions like Intel's NUC devices provide a small form factor, low power usage, and reduced noise, but at the expense of expandability. + +#### Network-attached storage (NAS) + +If you want a machine loaded with hard drives to store all your personal data, movies, pictures, etc. and provide storage for the virtualization server, network-attached storage (NAS) is what you want. + +In most cases, you won't need a powerful CPU; in fact, many commercial NAS solutions use low-powered ARM CPUs. A motherboard that supports multiple SATA disks is a must. If your motherboard doesn't have enough ports, use a host bus adapter (HBA) SAS controller to add extras. + +Network performance is critical for a NAS, so select a gigabit network interface (or better). + +Memory requirements will differ based on your filesystem. ZFS is one of the most popular filesystems for NAS, and you'll need more memory to use features such as caching or deduplication. Error-correcting code (ECC) memory is your best bet to protect data from corruption (but make sure your motherboard supports it before you buy). Last, but not least, don't forget an uninterruptible power supply (UPS), because losing power can cause data corruption. + +#### Firewall and router + +Have you ever realized that a cheap router/firewall is usually the main thing protecting your home network from the exterior world? These routers rarely receive timely security updates, if they receive any at all. Scared now? Well, [you should be][2]! + +You usually don't need a powerful CPU or a great deal of memory to build your own router/firewall, unless you are handling a huge throughput or want to do CPU-intensive tasks, like a VPN server or traffic filtering. In such cases, you'll need a multicore CPU with AES-NI support. + +You may want to get at least two 1-gigabit or better Ethernet network interface cards (NICs), also, not needed, but recommended, a managed switch to connect your DIY-router to create VLANs to further isolate and secure your network. + +![Home computer lab PfSense][4] + +### Software + +After you've selected your virtualization server, NAS, and firewall/router, the next step is exploring the different operating systems and software to maximize their benefits. While you could use a regular Linux distribution like CentOS, Debian, or Ubuntu, they usually take more time to configure and administer than the following options. + +#### Virtualization software + +**[KVM][5]** (Kernel-based Virtual Machine) lets you turn Linux into a hypervisor so you can run multiple virtual machines in the same box. The best thing is that KVM is part of Linux, and it is the go-to option for many enterprises and home users. If you are comfortable, you can install **[libvirt][6]** and **[virt-manager][7]** to manage your virtualization platform. + +**[Proxmox VE][8]** is a robust, enterprise-grade solution and a full open source virtualization and container platform. It is based on Debian and uses KVM as its hypervisor and LXC for containers. Proxmox offers a powerful web interface, an API, and can scale out to many clustered nodes, which is helpful because you'll never know when you'll run out of capacity in your lab. + +**[oVirt][9] (RHV)** is another enterprise-grade solution that uses KVM as the hypervisor. Just because it's enterprise doesn't mean you can't use it at home. oVirt offers a powerful web interface and an API and can handle hundreds of nodes (if you are running that many servers, I don't want to be your neighbor!). The potential problem with oVirt for a home lab is that it requires a minimum set of nodes: You'll need one external storage, such as a NAS, and at least two additional virtualization nodes (you can run it just on one, but you'll run into problems in maintenance of your environment). + +#### NAS software + +**[FreeNAS][10]** is the most popular open source NAS distribution, and it's based on the rock-solid FreeBSD operating system. One of its most robust features is its use of the ZFS filesystem, which provides data-integrity checking, snapshots, replication, and multiple levels of redundancy (mirroring, striped mirrors, and striping). On top of that, everything is managed from the powerful and easy-to-use web interface. Before installing FreeNAS, check its hardware support, as it is not as wide as Linux-based distributions. + +Another popular alternative is the Linux-based **[OpenMediaVault][11]**. One of its main features is its modularity, with plugins that extend and add features. Among its included features are a web-based administration interface; protocols like CIFS, SFTP, NFS, iSCSI; and volume management, including software RAID, quotas, access control lists (ACLs), and share management. Because it is Linux-based, it has extensive hardware support. + +#### Firewall/router software + +**[pfSense][12]** is an open source, enterprise-grade FreeBSD-based router and firewall distribution. It can be installed directly on a server or even inside a virtual machine (to manage your virtual or physical networks and save space). It has many features and can be expanded using packages. It is managed entirely using the web interface, although it also has command-line access. It has all the features you would expect from a router and firewall, like DHCP and DNS, as well as more advanced features, such as intrusion detection (IDS) and intrusion prevention (IPS) systems. You can create multiple networks listening on different interfaces or using VLANs, and you can create a secure VPN server with a few clicks. pfSense uses pf, a stateful packet filter that was developed for the OpenBSD operating system using a syntax similar to IPFilter. Many companies and organizations use pfSense. + +* * * + +With all this information in mind, it's time for you to get your hands dirty and start building your lab. In a future article, I will get into the third category of running a home lab: using automation to deploy and maintain it. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/19/3/home-lab + +作者:[Michael Zamot (Red Hat)][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/mzamot +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/computer_keyboard_laptop_development_code_woman.png?itok=vbYz6jjb +[2]: https://opensource.com/article/18/5/how-insecure-your-router +[3]: /file/427426 +[4]: https://opensource.com/sites/default/files/uploads/pfsense2.png (Home computer lab PfSense) +[5]: https://www.linux-kvm.org/page/Main_Page +[6]: https://libvirt.org/ +[7]: https://virt-manager.org/ +[8]: https://www.proxmox.com/en/proxmox-ve +[9]: https://ovirt.org/ +[10]: https://freenas.org/ +[11]: https://www.openmediavault.org/ +[12]: https://www.pfsense.org/ From dbba85a0b67689be5847bda77406b46f65eeb760 Mon Sep 17 00:00:00 2001 From: darksun Date: Wed, 20 Mar 2019 12:13:43 +0800 Subject: [PATCH 021/128] =?UTF-8?q?=E9=80=89=E9=A2=98:=2020190319=20Blockc?= =?UTF-8?q?hain=202.0:=20Blockchain=20In=20Real=20Estate=20[Part=204]=20so?= =?UTF-8?q?urces/tech/20190319=20Blockchain=202.0-=20Blockchain=20In=20Rea?= =?UTF-8?q?l=20Estate=20-Part=204.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... 2.0- Blockchain In Real Estate -Part 4.md | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 sources/tech/20190319 Blockchain 2.0- Blockchain In Real Estate -Part 4.md diff --git a/sources/tech/20190319 Blockchain 2.0- Blockchain In Real Estate -Part 4.md b/sources/tech/20190319 Blockchain 2.0- Blockchain In Real Estate -Part 4.md new file mode 100644 index 0000000000..9e85b82f2c --- /dev/null +++ b/sources/tech/20190319 Blockchain 2.0- Blockchain In Real Estate -Part 4.md @@ -0,0 +1,50 @@ +[#]: collector: (lujun9972) +[#]: translator: ( ) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (Blockchain 2.0: Blockchain In Real Estate [Part 4]) +[#]: via: (https://www.ostechnix.com/blockchain-2-0-blockchain-in-real-estate/) +[#]: author: (EDITOR https://www.ostechnix.com/author/editor/) + +Blockchain 2.0: Blockchain In Real Estate [Part 4] +====== + +![](https://www.ostechnix.com/wp-content/uploads/2019/03/Blockchain-In-Real-Estate-720x340.png) + +### Blockchain 2.0: Smart‘er’ Real Estate + +The [**previous article**][1] of this series explored the features of blockchain which will enable institutions to transform and interlace **traditional banking** and **financing systems** with it. This part will explore – **Blockchain in real estate**. The real estate industry is ripe for a revolution. It’s among the most actively traded most significant asset classes known to man. However, filled with regulatory hurdles and numerous possibilities of fraud and deceit, it’s also one of the toughest to participate in. The distributed ledger capabilities of the blockchain utilizing an appropriate consensus algorithm are touted as the way forward for the industry which is traditionally regarded as conservative in its attitude to change. + +Real estate has always been a very conservative industry in terms of its myriad operations. Somewhat rightfully so as well. A major economic crisis such as the 2008 financial crisis or the great depression from the early half of the 20th century managed to destroy the industry and its participants. However, like most products of economic value, the real estate industry is resilient and this resilience is rooted in its conservative nature. + +The global real estate market comprises an asset class worth **$228 trillion dollars** [1]. Give or take. Other investment assets such as stocks, bonds, and shares combined are only worth **$170 trillion**. Obviously, any and all transactions implemented in such an industry is naturally carefully planned and meticulously executed, for the most part. For the most part, because real estate is also notorious for numerous instances of fraud and devastating loses which ensue them. The industry because of the very conservative nature of its operations is also tough to navigate. It’s heavily regulated with complex laws creating an intertwined web of nuances that are just too difficult for an average person to understand fully. This makes entry and participation near impossible for most people. If you’ve ever been involved in one such deal, you’ll know how heavy and long the paper trail was. + +This hard reality is now set to change, albeit a slow and gradual transformation. The very reasons the industry has stuck to its hardy tested roots all this while can finally give way to its modern-day counterpart. The backbone of the real estate industry has always been its paper records. Land deeds, titles, agreements, rental insurance, proofs, and declarations etc., are just the tip of the iceberg here. If you’ve noticed the pattern here, this should be obvious, the distributed ledger technology that is blockchain, fits in perfectly with the needs here. Forget paper records, conventional database systems are also points of major failure. They can be modified by multiple participants, is not tamper proof or un-hackable, has a complicated set of ever-changing regulatory parameters making auditing and verifying data a nightmare. The blockchain perfectly solves all of these issues and more. + +Starting with a trivial albeit an important example to show just how bad the current record management practices are in the real estate sector, consider the **Title Insurance business** [2], [3]. Title Insurance is used to hedge against the possibility of the land’s titles and ownership records being inadmissible and hence unenforceable. An insurance product such as this is also referred to as an indemnity cover. It is by law required in many cases that properties have title insurance, especially when dealing with property that has changed hands multiple times over the years. Mortgage firms might insist on the same as well when they back real estate deals. The fact that a product of this kind has existed since the 1850s and that it does business worth at least **$1.5 trillion a year in the US alone** is a testament to the statement at the start. A revolution in terms of how these records are maintained is imperative to have in this situation and the blockchain provides a sustainable solution. Title fraud averages around $100k per case on average as per the **American Land Title Association** and 25% of all titles involved in transactions have an issue regarding their documents[4]. The blockchain allows for setting up an immutable permanent database that will track the property itself, recording each and every transaction or investment that has gone into it. Such a ledger system will make life easier for everyone involved in the real estate industry including one-time home buyers and make financial products such as Title Insurance basically irrelevant. Converting a physical asset such as real estate to a digital asset like this is unconventional and is extant only in theory at the moment. However, such a change is imminent sooner rather than later[5]. + +Among the areas in which blockchain will have the most impact within real estate is as highlighted above in maintaining a transparent and secure title management system for properties. A blockchain based record of the property can contain information about the property, its location, history of ownership, and any related public record of the same[6]. This will permit closing real estate deals fast and obliviates the need for 3rd party monitoring and oversight. Tasks such as real estate appraisal and tax calculations become matters of tangible objective parameters rather than subjective measures and guesses because of reliable historical data which is publicly verifiable. **UBITQUITY** is one such platform that offers customized blockchain-based solutions to enterprise customers. The platform allows customers to keep track of all property details, payment records, mortgage records and even allows running smart contracts that’ll take care of taxation and leasing automatically[7]. + +This brings us to the second biggest opportunity and use case of blockchains in real estate. Since the sector is highly regulated by numerous 3rd parties apart from the counterparties involved in the trade, due-diligence and financial evaluations can be significantly time-consuming. These processes are predominantly carried out using offline channels and paperwork needs to travel for days before a final evaluation report comes out. This is especially true for corporate real estate deals and forms a bulk of the total billable hours charged by consultants. In case the transaction is backed by a mortgage, duplication of these processes is unavoidable. Once combined with digital identities for the people and institutions involved along with the property, the current inefficiencies can be avoided altogether and transactions can take place in a matter of seconds. The tenants, investors, institutions involved, consultants etc., could individually validate the data and arrive at a critical consensus thereby validating the property records for perpetuity[8]. This increases the accuracy of verification manifold. Real estate giant **RE/MAX** has recently announced a partnership with service provider **XYO Network Partners** for building a national database of real estate listings in Mexico. They hope to one day create one of the largest (as of yet) decentralized real estate title registry in the world[9]. + +However, another significant and arguably a very democratic change that the blockchain can bring about is with respect to investing in real estate. Unlike other investment asset classes where even small household investors can potentially participate, real estate often requires large hands-down payments to participate. Companies such as **ATLANT** and **BitOfProperty** tokenize the book value of a property and convert them into equivalents of a cryptocurrency. These tokens are then put for sale on their exchanges similar to how stocks and shares are traded. Any cash flow that the real estate property generates afterward is credited or debited to the token owners depending on their “share” in the property[4]. + +However, even with all of that said, Blockchain technology is still in very early stages of adoption in the real estate sector and current regulations are not exactly defined for it to be either[8]. Concepts such as distributed applications, distributed anonymous organizations, smart contracts etc., are unheard of in the legal domain in many countries. A complete overhaul of existing regulations and guidelines once all the stakeholders are well educated on the intricacies of the blockchain is the most pragmatic way forward. Again, it’ll be a slow and gradual change to go through, however a much-needed one nonetheless. The next article of the series will look at how **“Smart Contracts”** , such as those implemented by companies such as UBITQUITY and XYO are created and executed in the blockchain. + + + +-------------------------------------------------------------------------------- + +via: https://www.ostechnix.com/blockchain-2-0-blockchain-in-real-estate/ + +作者:[EDITOR][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.ostechnix.com/author/editor/ +[b]: https://github.com/lujun9972 +[1]: https://www.ostechnix.com/blockchain-2-0-redefining-financial-services/ From bc44686ee83593ad9df305092bf22345784a1eeb Mon Sep 17 00:00:00 2001 From: darksun Date: Wed, 20 Mar 2019 12:16:10 +0800 Subject: [PATCH 022/128] =?UTF-8?q?=E9=80=89=E9=A2=98:=2020190319=20How=20?= =?UTF-8?q?To=20Set=20Up=20a=20Firewall=20with=20GUFW=20on=20Linux=20sourc?= =?UTF-8?q?es/tech/20190319=20How=20To=20Set=20Up=20a=20Firewall=20with=20?= =?UTF-8?q?GUFW=20on=20Linux.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...To Set Up a Firewall with GUFW on Linux.md | 365 ++++++++++++++++++ 1 file changed, 365 insertions(+) create mode 100644 sources/tech/20190319 How To Set Up a Firewall with GUFW on Linux.md diff --git a/sources/tech/20190319 How To Set Up a Firewall with GUFW on Linux.md b/sources/tech/20190319 How To Set Up a Firewall with GUFW on Linux.md new file mode 100644 index 0000000000..26b9850109 --- /dev/null +++ b/sources/tech/20190319 How To Set Up a Firewall with GUFW on Linux.md @@ -0,0 +1,365 @@ +[#]: collector: (lujun9972) +[#]: translator: ( ) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (How To Set Up a Firewall with GUFW on Linux) +[#]: via: (https://itsfoss.com/set-up-firewall-gufw) +[#]: author: (Sergiu https://itsfoss.com/author/sergiu/) + +How To Set Up a Firewall with GUFW on Linux +====== + +**UFW (Uncomplicated Firewall)** is a simple to use firewall utility with plenty of options for most users. It is an interface for the **iptables** , which is the classic (and harder to get comfortable with) way to set up rules for your network. + +**Do you really need a firewall for desktop?** + +![][1] + +A **[firewall][2]** is a way to regulate the incoming and outgoing traffic on your network. A well-configured firewall is crucial for the security of servers. + +But what about normal, desktop users? Do you need a firewall on your Linux system? Most likely you are connected to internet via a router linked to your internet service provider (ISP). Some routers already have built-in firewall. On top of that, your actual system is hidden behind NAT. In other words, you probably have a security layer when you are on your home network. + +Now that you know you should be using a firewall on your system, let’s see how you can easily install and configure a firewall on Ubuntu or any other Linux distribution. + +### Setting Up A Firewall With GUFW + +**[GUFW][3]** is a graphical utility for managing [Uncomplicated Firewall][4] ( **UFW** ). In this guide, I’ll go over configuring a firewall using **GUFW** that suits your needs, going over the different modes and rules. + +But first, let’s see how to install GUFW. + +#### Installing GUFW on Ubuntu and other Linux + +GUFW is available in all major Linux distributions. I advise using your distribution’s package manager for installing GUFW. + +If you are using Ubuntu, make sure you have the Universe Repository enabled. To do that, open up a terminal (default hotkey**:** CTRL+ALT+T) and enter: + +``` +sudo add-apt-repository universe +sudo apt update -y +``` + +Now you can install GUFW with this command: + +``` +sudo apt install gufw -y +``` + +That’s it! If you prefer not touching the terminal, you can install it from the Software Center as well. + +Open Software Center and search for **gufw** and click on the search result. + +![Search for gufw in software center][5] + +Go ahead and click **Install**. + +![Install GUFW from the Software Center][6] + +To open **gufw** , go to your menu and search for it. + +![Start GUFW][7] + +This will open the firewall application and you’ll be greeted by a “ **Getting Started** ” section. + +![GUFW Interface and Welcome Screen][8] + +#### Turn on the firewall + +The first thing to notice about this menu is the **Status** toggle. Pressing this button will turn on/off the firewall ( **default:** off), applying your preferences (policies and rules). + +![Turn on the firewall][9] + +If turned on, the shield icon turn from grey to colored. The colors, as noted later in this article, reflect your policies. This will also make the firewall **automatically start** on system startup. + +**Note:** _**Home** will be turned **off** by default. The other profiles (see next section) will be turned **on.**_ + +#### Understanding GUFW and its profiles + +As you can see in the menu, you can select different **profiles**. Each profile comes with different **default policies**. What this means is that they offer different behaviors for incoming and outgoing traffic. + +The **default profiles** are: + + * Home + * Public + * Office + + + +You can select another profile by clicking on the current one ( **default: Home** ). + +![][10] + +Selecting one of them will modify the default behavior. Further down, you can change Incoming and Outgoing traffic preferences. + +By default, both in **Home** and in **Office** , these policies are **Deny Incoming** and **Allow Outgoing**. This enables you to use services such as http/https without letting anything get in ( **e.g.** ssh). + +For **Public** , they are **Reject Incoming** and **Allow Outgoing**. **Reject** , similar to **deny** , doesn’t let services in, but also sends feedback to the user/service that tried accessing your machine (instead of simply dropping/hanging the connection). + +Note + +If you are an average desktop user, you can stick with the default profiles. You’ll have to manually change the profiles if you change the network. + +So if you are travelling, set the firewall on public profile and the from here forwards, firewall will be set in public mode on each reboot. + +#### Configuring firewall rules and policies [for advanced users] + +All profiles use the same rules, only the policies the rules build upon will differ. Changing the behavior of a policy ( **Incoming/Outgoing** ) will apply the changes to the selected profile. + +Note that the policies can only be changed while the firewall is active (Status: ON). + +Profiles can easily be added, deleted and renamed from the **Preferences** menu. + +##### Preferences + +In the top bar, click on **Edit**. Select **Preferences**. + +![Open Preferences Menu in GUFW][11] + +This will open up the **Preferences** menu. + +![][12] + +Let’s go over the options you have here! + +**Logging** means exactly what you would think: how much information does the firewall write down in the log files. + +The options under **Gufw** are quite self-explanatory. + +In the section under **Profiles** is where we can add, delete and rename profiles. Double-clicking on a profile will allow you to **rename** it. Pressing **Enter** will complete this process and pressing **Esc** will cancel the rename. + +![][13] + +To **add** a new profile, click on the **+** under the list of profiles. This will add a new profile. However, it won’t notify you about it. You’ll also have to scroll down the list to see the profile you created (using the mouse wheel or the scroll bar on the right side of the list). + +**Note:** _The newly added profile will **Deny Incoming** and **Allow Outgoing** traffic._ + +![][14] + +Clicking a profile highlight that profile. Pressing the **–** button will **delete** the highlighted profile. + +![][15] + +**Note:** _You can’t rename/remove the currently selected profile_. + +You can now click on **Close**. Next, I’ll go into setting up different **rules**. + +##### Rules + +Back to the main menu, somewhere in the middle of the screen you can select different tabs ( **Home, Rules, Report, Logs)**. We already covered the **Home** tab (that’s the quick guide you see when you start the app). + +![][16] + +Go ahead and select **Rules**. + +![][17] + +This will be the bulk of your firewall configuration: networking rules. You need to understand the concepts UFW is based on. That is **allowing, denying, rejecting** and **limiting** traffic. + +**Note:** _In UFW, the rules apply from top to bottom (the top rules take effect first and on top of them are added the following ones)._ + +**Allow, Deny, Reject, Limit:**These are the available policies for the rules you’ll add to your firewall. + +Let’s see exactly what each of them means: + + * **Allow:** allows any entry traffic to a port + * **Deny:** denies any entry traffic to a port + * **Reject:** denies any entry traffic to a port and informs the requester about the rejection + * **Limit:** denies entry traffic if an IP address has attempted to initiate 6 or more connections in the last 30 seconds + + + +##### Adding Rules + +There are three ways to add rules in GUFW. I’ll present all three methods in the following section. + +**Note:** _After you added the rules, changing their order is a very tricky process and it’s easier to just delete them and add them in the right order._ + +But first, click on the **+** at the bottom of the **Rules** tab. + +![][18] + +This should open a pop-up menu ( **Add a Firewall Rule** ). + +![][19] + +At the top of this menu, you can see the three ways you can add rules. I’ll guide you through each method i.e. **Preconfigured, Simple, Advanced**. Click to expand each section. + +**Preconfigured Rules** + +This is the most beginner-friendly way to add rules. + +The first step is choosing a policy for the rule (from the ones detailed above). + +![][20] + +The next step is to choose the direction the rule will affect ( **Incoming, Outgoing, Both** ). + +![][21] + +The **Category** and **Subcategory** choices are plenty. These narrow down the **Applications** you can select + +Choosing an **Application** will set up a set of ports based on what is needed for that particular application. This is especially useful for apps that might operate on multiple ports, or if you don’t want to bother with manually creating rules for handwritten port numbers. + +If you wish to further customize the rule, you can click on the **orange arrow icon**. This will copy the current settings (Application with it’s ports etc.) and take you to the **Advanced** rule menu. I’ll cover that later in this article. + +For this example, I picked an **Office Database** app: **MySQL**. I’ll deny all incoming traffic to the ports used by this app. +To create the rule, click on **Add**. + +![][22] + +You can now **Close** the pop-up (if you don’t want to add any other rules). You can see that the rule has been successfully added. + +![][23] + +The ports have been added by GUFW, and the rules have been automatically numbered. You may wonder why are there two new rules instead of just one; the answer is that UFW automatically adds both a standard **IP** rule and an **IPv6** rule. + +**Simple Rules** + +Although setting up preconfigured rules is nice, there is another easy way to add a rule. Click on the **+** icon again and go to the **Simple** tab. + +![][24] + +The options here are straight forward. Enter a name for your rule and select the policy and the direction. I’ll add a rule for rejecting incoming SSH attempts. + +![][25] + +The **Protocols** you can choose are **TCP, UDP** or **Both**. + +You must now enter the **Port** for which you want to manage the traffic. You can enter a **port number** (e.g. 22 for ssh), a **port range** with inclusive ends separated by a **:** ( **colon** ) (e.g. 81:89) or a **service name** (e.g. ssh). I’ll use **ssh** and select **both TCP and UDP** for this example. As before, click on **Add** to completing the creation of your rule. You can click the **red arrow icon** to copy the settings to the **Advanced** rule creation menu. + +![][26] + +If you select **Close** , you can see that the new rule (along with the corresponding IPv6 rule) has been added. + +![][27] + +**Advanced Rules** + +I’ll now go into how to set up more advanced rules, to handle traffic from specific IP addresses and subnets and targeting different interfaces. + +Let’s open up the **Rules** menu again. Select the **Advanced** tab. + +![][28] + +By now, you should already be familiar with the basic options: **Name, Policy, Direction, Protocol, Port**. These are the same as before. + +![][29] + +**Note:** _You can choose both a receiving port and a requesting port._ + +What changes is that now you have additional options to further specialize our rules. + +I mentioned before that rules are automatically numbered by GUFW. With **Advanced** rules you specify the position of your rule by entering a number in the **Insert** option. + +**Note:** _Inputting **position 0** will add your rule after all existing rules._ + +**Interface** let’s you select any network interface available on your machine. By doing so, the rule will only have effect on traffic to and from that specific interface. + +**Log** changes exactly that: what will and what won’t be logged. + +You can also choose IPs for the requesting and for the receiving port/service ( **From** , **To** ). + +All you have to do is specify an **IP address** (e.g. 192.168.0.102) or an entire **subnet** (e.g. 192.168.0.0/24 for IPv4 addresses ranging from 192.168.0.0 to 192.168.0.255). + +In my example, I’ll set up a rule to allow all incoming TCP SSH requests from systems on my subnet to a specific network interface of the machine I’m currently running. I’ll add the rule after all my standard IP rules, so that it takes effect on top of the other rules I have set up. + +![][30] + +**Close** the menu. + +![][31] + +The rule has been successfully added after the other standard IP rules. + +##### Edit Rules + +Clicking a rule in the rules list will highlight it. Now, if you click on the **little cog icon** at the bottom, you can **edit** the highlighted rule. + +![][32] + +This will open up a menu looking something like the **Advanced** menu I explained in the last section. + +![][33] + +**Note:** _Editing any options of a rule will move it to the end of your list._ + +You can now ether select on **Apply** to modify your rule and move it to the end of the list, or hit **Cancel**. + +##### Delete Rules + +After selecting (highlighting) a rule, you can also click on the **–** icon. + +![][34] + +##### Reports + +Select the **Report** tab. Here you can see services that are currently running (along with information about them, such as Protocol, Port, Address and Application name). From here, you can **Pause Listening Report (Pause Icon)** or **Create a rule from a highlighted service from the listening report (+ Icon)**. + +![][35] + +##### Logs + +Select the **Logs** tab. Here is where you’ll have to check for any errors are suspicious rules. I’ve tried creating some invalid rules to show you what these might look like when you don’t know why you can’t add a certain rule. In the bottom section, there are two icons. Clicking the **first icon copies the logs** to your clipboard and clicking the **second icon** **clears the log**. + +![][36] + +### Wrapping Up + +Having a firewall that is properly configured can greatly contribute to your Ubuntu experience, making your machine safer to use and allowing you to have full control over incoming and outgoing traffic. + +I have covered the different uses and modes of **GUFW** , going into how to set up different rules and configure a firewall to your needs. I hope that this guide has been helpful to you. + +If you are a beginner, this should prove to be a comprehensive guide; even if you are more versed in the Linux world and maybe getting your feet wet into servers and networking, I hope you learned something new. + +Let us know in the comments if this article helped you and why did you decide a firewall would improve your system! + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/set-up-firewall-gufw + +作者:[Sergiu][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/sergiu/ +[b]: https://github.com/lujun9972 +[1]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/firewall-linux.png?resize=800%2C450&ssl=1 +[2]: https://en.wikipedia.org/wiki/Firewall_(computing) +[3]: http://gufw.org/ +[4]: https://en.wikipedia.org/wiki/Uncomplicated_Firewall +[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/ubuntu_software_gufw-1.jpg?ssl=1 +[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/ubuntu_software_install_gufw.jpg?ssl=1 +[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/show_applications_gufw.jpg?ssl=1 +[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw.jpg?ssl=1 +[9]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_toggle_status.jpg?ssl=1 +[10]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_select_profile-1.jpg?ssl=1 +[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_open_preferences.jpg?ssl=1 +[12]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_preferences.png?fit=800%2C585&ssl=1 +[13]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_rename_profile.png?fit=800%2C551&ssl=1 +[14]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_add_profile.png?ssl=1 +[15]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_delete_profile.png?ssl=1 +[16]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_home_tab.png?ssl=1 +[17]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_rules_tab.png?ssl=1 +[18]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_add_rule.png?ssl=1 +[19]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_add_rules_menu.png?ssl=1 +[20]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_preconfigured_rule_policy.png?ssl=1 +[21]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_preconfigured_rule_direction.png?ssl=1 +[22]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_preconfigured_add_rule.png?ssl=1 +[23]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_preconfigured_rule_added.png?ssl=1 +[24]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_add_simple_rules_menu.png?ssl=1 +[25]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_simple_rule_name_policy_direction.png?ssl=1 +[26]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_add_simple_rule.png?ssl=1 +[27]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_simple_rule_added.png?ssl=1 +[28]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_add_advanced_rules_menu.png?ssl=1 +[29]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_advanced_rule_basic_options.png?ssl=1 +[30]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_add_advanced_rule.png?ssl=1 +[31]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_advanced_rule_added.png?ssl=1 +[32]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_edit_highlighted_rule.png?ssl=1 +[33]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_edit_rule_menu.png?ssl=1 +[34]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_delete_rule.png?ssl=1 +[35]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_report_tab.png?ssl=1 +[36]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/gufw_log_tab-1.png?ssl=1 +[37]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/03/firewall-linux.png?fit=800%2C450&ssl=1 From d034ad6b01f3e2ba9303c542966d536fd5ff36e0 Mon Sep 17 00:00:00 2001 From: zhangxiangping Date: Wed, 20 Mar 2019 15:33:29 +0800 Subject: [PATCH 023/128] add translator --- ...ty Print JSON With Linux Commandline Tools.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sources/tech/20190315 How To Parse And Pretty Print JSON With Linux Commandline Tools.md b/sources/tech/20190315 How To Parse And Pretty Print JSON With Linux Commandline Tools.md index 6cf53bdbca..16e9c70627 100644 --- a/sources/tech/20190315 How To Parse And Pretty Print JSON With Linux Commandline Tools.md +++ b/sources/tech/20190315 How To Parse And Pretty Print JSON With Linux Commandline Tools.md @@ -1,11 +1,11 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (How To Parse And Pretty Print JSON With Linux Commandline Tools) -[#]: via: (https://www.ostechnix.com/how-to-parse-and-pretty-print-json-with-linux-commandline-tools/) -[#]: author: (EDITOR https://www.ostechnix.com/author/editor/) +[#]: collector: "lujun9972" +[#]: translator: "zhangxiangping " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " +[#]: subject: "How To Parse And Pretty Print JSON With Linux Commandline Tools" +[#]: via: "https://www.ostechnix.com/how-to-parse-and-pretty-print-json-with-linux-commandline-tools/" +[#]: author: "EDITOR https://www.ostechnix.com/author/editor/" How To Parse And Pretty Print JSON With Linux Commandline Tools ====== From 83c549786e7624f4407987ff35dc10f088fb0494 Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Wed, 20 Mar 2019 22:23:17 +0800 Subject: [PATCH 024/128] PRF:20190117 Get started with CryptPad, an open source collaborative document editor.md @geekpi --- ...an open source collaborative document editor.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/translated/tech/20190117 Get started with CryptPad, an open source collaborative document editor.md b/translated/tech/20190117 Get started with CryptPad, an open source collaborative document editor.md index c3e6d69bfe..18a9d6a307 100644 --- a/translated/tech/20190117 Get started with CryptPad, an open source collaborative document editor.md +++ b/translated/tech/20190117 Get started with CryptPad, an open source collaborative document editor.md @@ -1,18 +1,20 @@ [#]: collector: (lujun9972) [#]: translator: (geekpi) -[#]: reviewer: ( ) +[#]: reviewer: (wxy) [#]: publisher: ( ) [#]: url: ( ) [#]: subject: (Get started with CryptPad, an open source collaborative document editor) [#]: via: (https://opensource.com/article/19/1/productivity-tool-cryptpad) [#]: author: (Kevin Sonney https://opensource.com/users/ksonney (Kevin Sonney)) -开始使用 CryptPad,一个开源的协作文档编辑器 +开始使用 CryptPad 吧,一个开源的协作文档编辑器 ====== -使用 CryptPad 安全地共享你的笔记、文档、看板等,这是我们在开源工具系列中的第 5 个工具,它将使你在 2019 年更高效。 + +> 使用 CryptPad 安全地共享你的笔记、文档、看板等,这是我们在开源工具系列中的第 5 个工具,它将使你在 2019 年更高效。 + ![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/web_browser_desktop_devlopment_design_system_computer.jpg?itok=pfqRrJgh) -每年年初似乎都有疯狂的冲动,想方设法提高工作效率。新年的决议,开始一年的权利,当然,“与旧的,与新的”的态度都有助于实现这一目标。通常的一轮建议严重偏向封闭源和专有软件。它不一定是这样。 +每年年初似乎都有疯狂的冲动想提高工作效率。新年的决心,渴望开启新的一年,当然,“抛弃旧的,拥抱新的”的态度促成了这一切。通常这时的建议严重偏向闭源和专有软件,但事实上并不用这样。 这是我挑选出的 19 个新的(或者对你而言新的)开源工具中的第 5 个工具来帮助你在 2019 年更有效率。 @@ -28,7 +30,7 @@ ![](https://opensource.com/sites/default/files/uploads/cryptpad-2.png) -然而,CryptPad 的真正强大之处在于它的共享和协作功能。共享文档只需在“共享”选项中获取可共享 URL,CryptPad 支持使用 iframe 标签嵌入其他网站的文档。可以在“编辑”或“查看”模式下使用密码和会过期的链接共享文档。内置聊天能够让编辑者相互交谈(请注意,具有浏览权限的人也可以看到聊天但无法发表评论)。 +然而,CryptPad 的真正强大之处在于它的共享和协作功能。共享文档只需在“共享”选项中获取可共享 URL,CryptPad 支持使用 `